{"openapi":"3.1.0","info":{"title":"BestChar API","description":"\n## BestChar - AI Character Generation and Chat Platform\n\n**BestChar**는 다국어 지원 AI 캐릭터 생성·대화·기억 플랫폼입니다.\n\n### 주요 기능\n- 🤖 AI 기반 캐릭터 생성 (성격, 백스토리, 외모)\n- 💬 실시간 캐릭터 채팅 (OpenRouter 연동)\n- 🎨 캐릭터 이미지 생성 (DALL-E, Stability AI)\n- 🧠 대화 기억 관리 (Qdrant 기반)\n- 🌍 다국어 지원 (한국어, 일본어, 영어)\n- 💳 구독제 + Pay-as-you-go 과금 시스템\n- 🔑 API 키 발급 및 외부 서비스 연동\n\n### 인증 방법\n- **JWT Bearer Token**: 웹 앱 사용자 인증\n- **API Key**: 외부 서비스 연동용 (`bc_` 접두사)\n\n### 비용 모델\n- 모든 LLM/이미지 생성 호출은 크레딧에서 차감\n- 크레딧 부족 시 402 Payment Required 반환\n- 신규 가입자는 $10 무료 크레딧 제공\n\n### 지원 모델\n- **LLM**: OpenRouter 지원 모든 모델 (기본: Gemini 1.5 Pro)\n- **이미지**: DALL-E 3, Stability AI\n\n### 한계 및 주의사항\n- 응답 시간: LLM 호출 시 최대 30초\n- 토큰 한계: 입력/출력 각각 제한 있음\n- 안전 가이드라인: 부적절한 콘텐츠 필터링\n    ","termsOfService":"https://bestchar.com/terms","contact":{"name":"BestChar Support","url":"https://bestchar.com/support","email":"support@bestchar.com"},"license":{"name":"MIT","url":"https://opensource.org/licenses/MIT"},"version":"1.0.0"},"paths":{"/metrics":{"get":{"summary":"Metrics","description":"Endpoint that serves Prometheus metrics.","operationId":"metrics_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/public/stats":{"get":{"tags":["public"],"summary":"Get Public Stats","description":"홈페이지 공개 통계 조회 (인증 불필요)","operationId":"get_public_stats_api_v1_public_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Public Stats Api V1 Public Stats Get"}}}}}}},"/api/v1/public/characters":{"get":{"tags":["public"],"summary":"Get Public Characters","description":"공개 캐릭터 목록 조회 (인증 불필요)","operationId":"get_public_characters_api_v1_public_characters_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CharacterResponse"},"type":"array","title":"Response Get Public Characters Api V1 Public Characters Get"}}}}}}},"/api/v1/public/characters/{character_id}":{"get":{"tags":["public"],"summary":"Get Public Character","description":"공개 캐릭터 개별 조회 (인증 불필요)","operationId":"get_public_character_api_v1_public_characters__character_id__get","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/llm-pricing":{"get":{"tags":["public"],"summary":"Get Llm Pricing Tiers","description":"LLM 가격 티어 정보 조회 (인증 불필요)\n\n관리자가 config에서 설정한 가격 정보를 반환합니다.\n프론트엔드 가격 페이지에서 사용됩니다.","operationId":"get_llm_pricing_tiers_api_v1_public_llm_pricing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Llm Pricing Tiers Api V1 Public Llm Pricing Get"}}}}}}},"/api/v1/public/platform-fees":{"get":{"tags":["public"],"summary":"Get Platform Fees","description":"플랫폼 수수료 정보 조회 (인증 불필요)\n\n관리자가 config에서 설정한 수수료 정보를 반환합니다.","operationId":"get_platform_fees_api_v1_public_platform_fees_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Platform Fees Api V1 Public Platform Fees Get"}}}}}}},"/api/v1/public/testimonials":{"get":{"tags":["public"],"summary":"Get Public Testimonials","description":"공개 고객 후기 목록 조회 (인증 불필요)\n활성화된 후기만 display_order 순으로 반환","operationId":"get_public_testimonials_api_v1_public_testimonials_get","parameters":[{"name":"locale","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"ko","title":"Locale"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PublicTestimonialResponse"},"title":"Response Get Public Testimonials Api V1 Public Testimonials Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/press-features":{"get":{"tags":["public"],"summary":"Get Public Press Features","description":"공개 언론 보도 목록 조회 (인증 불필요)\n활성화된 보도만 display_order 순으로 반환","operationId":"get_public_press_features_api_v1_public_press_features_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PublicPressFeatureResponse"},"type":"array","title":"Response Get Public Press Features Api V1 Public Press Features Get"}}}}}}},"/api/v1/public/homepage-content":{"get":{"tags":["public"],"summary":"Get Homepage Content","description":"홈페이지 콘텐츠 통합 조회 (인증 불필요)\n고객 후기 + 언론 보도 한번에 반환","operationId":"get_homepage_content_api_v1_public_homepage_content_get","parameters":[{"name":"locale","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"ko","title":"Locale"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Homepage Content Api V1 Public Homepage Content Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/signup-status":{"get":{"tags":["auth"],"summary":"Signup Status","description":"가입 화면이 폼·초대 코드 입력·대기열 중 무엇을 보여 줄지 정한다 (인증 불필요).","operationId":"signup_status_api_v1_auth_signup_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Signup Status Api V1 Auth Signup Status Get"}}}}}}},"/api/v1/auth/waitlist":{"post":{"tags":["auth"],"summary":"Join Waitlist","description":"초대제 대기열 — 같은 이메일은 갱신(멱등). 가입이 열려 있어도 받아 둔다.","operationId":"join_waitlist_api_v1_auth_waitlist_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WaitlistRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Join Waitlist Api V1 Auth Waitlist Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/signup":{"post":{"tags":["auth"],"summary":"Signup","operationId":"signup_api_v1_auth_signup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Token"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/signin":{"post":{"tags":["auth"],"summary":"Signin","operationId":"signin_api_v1_auth_signin_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_signin_api_v1_auth_signin_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Token"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/refresh":{"post":{"tags":["auth"],"summary":"Refresh Access Token","description":"Refresh Token을 사용하여 새로운 Access Token 발급\n\n- Refresh Token은 httpOnly 쿠키에서 자동으로 읽음\n- 새로운 Access Token과 Refresh Token 반환\n- 만료되거나 잘못된 Refresh Token은 401 에러","operationId":"refresh_access_token_api_v1_auth_refresh_post","parameters":[{"name":"refresh_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refresh Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Token"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/logout":{"post":{"tags":["auth"],"summary":"Logout","description":"로그아웃 (쿠키 삭제)","operationId":"logout_api_v1_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auth/password-reset/request":{"post":{"tags":["auth"],"summary":"Request Password Reset","description":"비밀번호 재설정 요청","operationId":"request_password_reset_api_v1_auth_password_reset_request_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/password-reset/confirm":{"post":{"tags":["auth"],"summary":"Confirm Password Reset","description":"비밀번호 재설정 확인","operationId":"confirm_password_reset_api_v1_auth_password_reset_confirm_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/verify-email/request":{"post":{"tags":["auth"],"summary":"Request Email Verification","description":"이메일 인증 요청","operationId":"request_email_verification_api_v1_auth_verify_email_request_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auth/verify-email/confirm":{"post":{"tags":["auth"],"summary":"Confirm Email Verification","description":"이메일 인증 확인","operationId":"confirm_email_verification_api_v1_auth_verify_email_confirm_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/me":{"get":{"tags":["auth"],"summary":"Get Current User Info","description":"현재 로그인한 사용자 정보 조회 (통일된 인증 정책 사용)","operationId":"get_current_user_info_api_v1_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["auth"],"summary":"Update Profile","operationId":"update_profile_api_v1_auth_me_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auth/me-debug":{"get":{"tags":["auth"],"summary":"Get Current User Debug","operationId":"get_current_user_debug_api_v1_auth_me_debug_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auth/settings":{"get":{"tags":["auth"],"summary":"Get User Settings","description":"Get user settings","operationId":"get_user_settings_api_v1_auth_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["auth"],"summary":"Update User Settings","description":"Update user settings","operationId":"update_user_settings_api_v1_auth_settings_put","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Settings Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auth/sessions":{"get":{"tags":["auth"],"summary":"Get Active Sessions","description":"Get user's active sessions from Redis","operationId":"get_active_sessions_api_v1_auth_sessions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auth/sessions/{session_id}":{"delete":{"tags":["auth"],"summary":"Revoke Session","description":"Revoke a user session from Redis","operationId":"revoke_session_api_v1_auth_sessions__session_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/2fa/enable":{"post":{"tags":["auth"],"summary":"Enable 2Fa","description":"Enable 2FA for user with real TOTP implementation","operationId":"enable_2fa_api_v1_auth_2fa_enable_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auth/2fa/disable":{"post":{"tags":["auth"],"summary":"Disable 2Fa","description":"Disable 2FA for user","operationId":"disable_2fa_api_v1_auth_2fa_disable_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auth/2fa/verify":{"post":{"tags":["auth"],"summary":"Verify 2Fa","description":"Verify 2FA code","operationId":"verify_2fa_api_v1_auth_2fa_verify_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/webhook/test":{"post":{"tags":["auth"],"summary":"Test Webhook","description":"Test webhook URL","operationId":"test_webhook_api_v1_auth_webhook_test_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auth/upload-profile-image":{"post":{"tags":["auth"],"summary":"Upload Profile Image","description":"프로필 이미지 업로드 (아바타 또는 배너)","operationId":"upload_profile_image_api_v1_auth_upload_profile_image_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"image_type","in":"query","required":false,"schema":{"type":"string","default":"avatar","title":"Image Type"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_profile_image_api_v1_auth_upload_profile_image_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/google":{"get":{"tags":["social-auth","auth"],"summary":"Google Auth Init","description":"Google 소셜 로그인 시작\n\nArgs:\n    redirect_uri: Google 인증 후 리디렉션될 URL\n\nReturns:\n    Google 인증 URL 및 state 토큰","operationId":"google_auth_init_api_v1_auth_google_get","parameters":[{"name":"redirect_uri","in":"query","required":true,"schema":{"type":"string","description":"콜백 URL (프론트엔드 URL)","title":"Redirect Uri"},"description":"콜백 URL (프론트엔드 URL)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialAuthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/google/callback":{"get":{"tags":["social-auth","auth"],"summary":"Google Auth Callback","description":"Google OAuth 콜백 엔드포인트\n\nArgs:\n    code: Google에서 받은 인증 코드\n    state: CSRF 방지 토큰\n\nReturns:\n    JWT 토큰 및 사용자 정보","operationId":"google_auth_callback_api_v1_auth_google_callback_get","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","description":"Google 인증 코드","title":"Code"},"description":"Google 인증 코드"},{"name":"state","in":"query","required":true,"schema":{"type":"string","description":"CSRF 방지 토큰","title":"State"},"description":"CSRF 방지 토큰"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/google/callback/json":{"post":{"tags":["social-auth","auth"],"summary":"Google Auth Callback Json","description":"Google OAuth 콜백 (JSON 응답)\n\nArgs:\n    code: Google 인증 코드\n    state: CSRF 방지 토큰\n    redirect_uri: 콜백 URL\n\nReturns:\n    JWT 토큰 및 사용자 정보 (JSON)","operationId":"google_auth_callback_json_api_v1_auth_google_callback_json_post","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","description":"Google 인증 코드","title":"Code"},"description":"Google 인증 코드"},{"name":"state","in":"query","required":true,"schema":{"type":"string","description":"CSRF 방지 토큰","title":"State"},"description":"CSRF 방지 토큰"},{"name":"redirect_uri","in":"query","required":true,"schema":{"type":"string","description":"콜백 URL","title":"Redirect Uri"},"description":"콜백 URL"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialAuthCallbackResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/github":{"get":{"tags":["social-auth","auth"],"summary":"Github Auth Init","description":"GitHub 소셜 로그인 시작\n\nArgs:\n    redirect_uri: GitHub 인증 후 리디렉션될 URL\n\nReturns:\n    GitHub 인증 URL 및 state 토큰","operationId":"github_auth_init_api_v1_auth_github_get","parameters":[{"name":"redirect_uri","in":"query","required":true,"schema":{"type":"string","description":"콜백 URL (프론트엔드 URL)","title":"Redirect Uri"},"description":"콜백 URL (프론트엔드 URL)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialAuthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/github/callback":{"get":{"tags":["social-auth","auth"],"summary":"Github Auth Callback","description":"GitHub OAuth 콜백 엔드포인트\n\nArgs:\n    code: GitHub에서 받은 인증 코드\n    state: CSRF 방지 토큰\n\nReturns:\n    JWT 토큰 및 사용자 정보","operationId":"github_auth_callback_api_v1_auth_github_callback_get","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","description":"GitHub 인증 코드","title":"Code"},"description":"GitHub 인증 코드"},{"name":"state","in":"query","required":true,"schema":{"type":"string","description":"CSRF 방지 토큰","title":"State"},"description":"CSRF 방지 토큰"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/github/callback/json":{"post":{"tags":["social-auth","auth"],"summary":"Github Auth Callback Json","description":"GitHub OAuth 콜백 (JSON 응답)\n\nArgs:\n    code: GitHub 인증 코드\n    state: CSRF 방지 토큰\n    redirect_uri: 콜백 URL\n\nReturns:\n    JWT 토큰 및 사용자 정보 (JSON)","operationId":"github_auth_callback_json_api_v1_auth_github_callback_json_post","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","description":"GitHub 인증 코드","title":"Code"},"description":"GitHub 인증 코드"},{"name":"state","in":"query","required":true,"schema":{"type":"string","description":"CSRF 방지 토큰","title":"State"},"description":"CSRF 방지 토큰"},{"name":"redirect_uri","in":"query","required":true,"schema":{"type":"string","description":"콜백 URL","title":"Redirect Uri"},"description":"콜백 URL"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialAuthCallbackResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/kakao":{"get":{"tags":["social-auth","auth"],"summary":"Kakao Auth Init","description":"Kakao 소셜 로그인 시작\n\nArgs:\n    redirect_uri: Kakao 인증 후 리디렉션될 URL\n\nReturns:\n    Kakao 인증 URL 및 state 토큰","operationId":"kakao_auth_init_api_v1_auth_kakao_get","parameters":[{"name":"redirect_uri","in":"query","required":true,"schema":{"type":"string","description":"콜백 URL (프론트엔드 URL)","title":"Redirect Uri"},"description":"콜백 URL (프론트엔드 URL)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialAuthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/kakao/callback":{"get":{"tags":["social-auth","auth"],"summary":"Kakao Auth Callback","description":"Kakao OAuth 콜백 엔드포인트\n\nArgs:\n    code: Kakao에서 받은 인증 코드\n    state: CSRF 방지 토큰\n\nReturns:\n    JWT 토큰 및 사용자 정보","operationId":"kakao_auth_callback_api_v1_auth_kakao_callback_get","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","description":"Kakao 인증 코드","title":"Code"},"description":"Kakao 인증 코드"},{"name":"state","in":"query","required":true,"schema":{"type":"string","description":"CSRF 방지 토큰","title":"State"},"description":"CSRF 방지 토큰"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/kakao/callback/json":{"post":{"tags":["social-auth","auth"],"summary":"Kakao Auth Callback Json","description":"Kakao OAuth 콜백 (JSON 응답)\n\nArgs:\n    code: Kakao 인증 코드\n    state: CSRF 방지 토큰\n    redirect_uri: 콜백 URL\n\nReturns:\n    JWT 토큰 및 사용자 정보 (JSON)","operationId":"kakao_auth_callback_json_api_v1_auth_kakao_callback_json_post","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","description":"Kakao 인증 코드","title":"Code"},"description":"Kakao 인증 코드"},{"name":"state","in":"query","required":true,"schema":{"type":"string","description":"CSRF 방지 토큰","title":"State"},"description":"CSRF 방지 토큰"},{"name":"redirect_uri","in":"query","required":true,"schema":{"type":"string","description":"콜백 URL","title":"Redirect Uri"},"description":"콜백 URL"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialAuthCallbackResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/social-accounts":{"get":{"tags":["social-auth","auth"],"summary":"Get User Social Accounts","description":"현재 사용자의 소셜 계정 목록 조회\n\nReturns:\n    연동된 소셜 계정 목록","operationId":"get_user_social_accounts_api_v1_auth_social_accounts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auth/social-accounts/{provider}":{"delete":{"tags":["social-auth","auth"],"summary":"Unlink Social Account","description":"소셜 계정 연동 해제\n\nArgs:\n    provider: 소셜 제공자 ('google', 'github', 'kakao')\n\nReturns:\n    성공 여부","operationId":"unlink_social_account_api_v1_auth_social_accounts__provider__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/apple":{"get":{"tags":["social-auth","auth"],"summary":"Apple Auth Init","description":"Apple Sign In 시작\n\nArgs:\n    redirect_uri: Apple 인증 후 리디렉션될 URL\n\nReturns:\n    Apple 인증 URL 및 state 토큰","operationId":"apple_auth_init_api_v1_auth_apple_get","parameters":[{"name":"redirect_uri","in":"query","required":true,"schema":{"type":"string","description":"콜백 URL (프론트엔드 URL)","title":"Redirect Uri"},"description":"콜백 URL (프론트엔드 URL)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialAuthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/apple/callback":{"post":{"tags":["social-auth","auth"],"summary":"Apple Auth Callback","description":"Apple Sign In 콜백 엔드포인트 (POST - form_post)\n\nArgs:\n    code: Apple에서 받은 인증 코드\n    state: CSRF 방지 토큰\n\nReturns:\n    JWT 토큰 및 사용자 정보","operationId":"apple_auth_callback_api_v1_auth_apple_callback_post","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","description":"Apple 인증 코드","title":"Code"},"description":"Apple 인증 코드"},{"name":"state","in":"query","required":true,"schema":{"type":"string","description":"CSRF 방지 토큰","title":"State"},"description":"CSRF 방지 토큰"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/apple/callback/json":{"post":{"tags":["social-auth","auth"],"summary":"Apple Auth Callback Json","description":"Apple Sign In 콜백 (JSON 응답)\n\nArgs:\n    code: Apple 인증 코드\n    state: CSRF 방지 토큰\n    redirect_uri: 콜백 URL\n\nReturns:\n    JWT 토큰 및 사용자 정보 (JSON)","operationId":"apple_auth_callback_json_api_v1_auth_apple_callback_json_post","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","description":"Apple 인증 코드","title":"Code"},"description":"Apple 인증 코드"},{"name":"state","in":"query","required":true,"schema":{"type":"string","description":"CSRF 방지 토큰","title":"State"},"description":"CSRF 방지 토큰"},{"name":"redirect_uri","in":"query","required":true,"schema":{"type":"string","description":"콜백 URL","title":"Redirect Uri"},"description":"콜백 URL"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialAuthCallbackResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/naver":{"get":{"tags":["social-auth","auth"],"summary":"Naver Auth Init","description":"Naver 소셜 로그인 시작\n\nArgs:\n    redirect_uri: Naver 인증 후 리디렉션될 URL\n\nReturns:\n    Naver 인증 URL 및 state 토큰","operationId":"naver_auth_init_api_v1_auth_naver_get","parameters":[{"name":"redirect_uri","in":"query","required":true,"schema":{"type":"string","description":"콜백 URL (프론트엔드 URL)","title":"Redirect Uri"},"description":"콜백 URL (프론트엔드 URL)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialAuthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/naver/callback":{"get":{"tags":["social-auth","auth"],"summary":"Naver Auth Callback","description":"Naver OAuth 콜백 엔드포인트\n\nArgs:\n    code: Naver에서 받은 인증 코드\n    state: CSRF 방지 토큰\n\nReturns:\n    JWT 토큰 및 사용자 정보","operationId":"naver_auth_callback_api_v1_auth_naver_callback_get","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","description":"Naver 인증 코드","title":"Code"},"description":"Naver 인증 코드"},{"name":"state","in":"query","required":true,"schema":{"type":"string","description":"CSRF 방지 토큰","title":"State"},"description":"CSRF 방지 토큰"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/naver/callback/json":{"post":{"tags":["social-auth","auth"],"summary":"Naver Auth Callback Json","description":"Naver OAuth 콜백 (JSON 응답)\n\nArgs:\n    code: Naver 인증 코드\n    state: CSRF 방지 토큰\n    redirect_uri: 콜백 URL\n\nReturns:\n    JWT 토큰 및 사용자 정보 (JSON)","operationId":"naver_auth_callback_json_api_v1_auth_naver_callback_json_post","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","description":"Naver 인증 코드","title":"Code"},"description":"Naver 인증 코드"},{"name":"state","in":"query","required":true,"schema":{"type":"string","description":"CSRF 방지 토큰","title":"State"},"description":"CSRF 방지 토큰"},{"name":"redirect_uri","in":"query","required":true,"schema":{"type":"string","description":"콜백 URL","title":"Redirect Uri"},"description":"콜백 URL"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialAuthCallbackResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/mfa/setup":{"post":{"tags":["mfa","mfa"],"summary":"Setup Mfa","description":"MFA 설정 시작\n\nQR 코드를 반환하여 사용자가 Google Authenticator 등의 앱으로 스캔","operationId":"setup_mfa_api_v1_auth_mfa_setup_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MFASetupResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auth/mfa/verify":{"post":{"tags":["mfa","mfa"],"summary":"Verify Mfa","description":"MFA 코드 검증 및 활성화\n\nArgs:\n    token: 6자리 TOTP 코드\n    remember_device: 이 기기 기억 (30일간 MFA 스킵)","operationId":"verify_mfa_api_v1_auth_mfa_verify_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"remember_device","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Remember Device"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MFAVerifyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MFAVerifyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/mfa/disable":{"post":{"tags":["mfa","mfa"],"summary":"Disable Mfa","description":"MFA 비활성화\n\n보안을 위해 6자리 코드 입력 필요","operationId":"disable_mfa_api_v1_auth_mfa_disable_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MFADisableRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auth/mfa/status":{"get":{"tags":["mfa","mfa"],"summary":"Get Mfa Status","description":"현재 사용자의 MFA 상태 조회","operationId":"get_mfa_status_api_v1_auth_mfa_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MFAStatusResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auth/mfa/backup-codes":{"post":{"tags":["mfa","mfa"],"summary":"Generate Backup Codes","description":"백업 코드 생성\n\nMFA 기기를 잃어버렸을 때 사용할 수 있는 일회용 코드 10개 생성","operationId":"generate_backup_codes_api_v1_auth_mfa_backup_codes_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackupCodesResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auth/mfa/use-backup-code":{"post":{"tags":["mfa","mfa"],"summary":"Use Backup Code","description":"백업 코드로 로그인\n\nMFA 기기를 사용할 수 없을 때 백업 코드로 인증","operationId":"use_backup_code_api_v1_auth_mfa_use_backup_code_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/me":{"get":{"tags":["users"],"summary":"Get Current User Profile","description":"현재 로그인한 사용자 정보 조회","operationId":"get_current_user_profile_api_v1_users_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/users/{user_id}":{"get":{"tags":["users"],"summary":"Get User Public Profile","description":"공개 프로필 조회 (인증 불필요)","operationId":"get_user_public_profile_api_v1_users__user_id__get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get User Public Profile Api V1 Users  User Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/public/featured":{"get":{"tags":["characters"],"summary":"Get Featured Public Character","description":"Onboarding helper — returns ONE public character for new-user 0-click chat.\n\nSelection priority:\n  1. Newest is_featured=True public character\n  2. Newest public character (any)\nReturns 404 if the marketplace is empty.","operationId":"get_featured_public_character_api_v1_characters_public_featured_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/characters/public/paginated":{"get":{"tags":["characters"],"summary":"Get Public Characters Paginated V2","description":"페이지네이션된 공개 캐릭터 목록 (N+1 최적화, Read Replica, 인증 불필요).","operationId":"get_public_characters_paginated_v2_api_v1_characters_public_paginated_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort By"}},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","default":"desc","title":"Sort Order"}},{"name":"query","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"is_public","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Public"}},{"name":"is_featured","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Featured"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_CharacterResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/public/{character_id}":{"get":{"tags":["characters"],"summary":"Get Character Public Profile","description":"캐릭터 퍼블릭 프로필 조회 (인증 불필요)","operationId":"get_character_public_profile_api_v1_characters_public__character_id__get","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/public":{"get":{"tags":["characters"],"summary":"Get Public Characters","description":"공개 캐릭터 목록 조회 (인증 불필요, 캐싱 적용)","operationId":"get_public_characters_api_v1_characters_public_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/quick-create":{"post":{"tags":["characters"],"summary":"Quick Create Character","description":"간편 캐릭터 생성 - 한 줄 설명만 입력하면 AI가 나머지 자동 생성","operationId":"quick_create_character_api_v1_characters_quick_create_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuickCharacterCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/characters/preview":{"post":{"tags":["characters"],"summary":"Generate Character Preview","description":"하이브리드 모드 - AI 미리보기 생성\n\n한 줄 설명만 입력하면 AI가 전체 캐릭터 정보를 생성하여 미리보기로 반환합니다.\n사용자는 이 미리보기를 확인하고 수정한 후 /hybrid-create로 최종 생성할 수 있습니다.","operationId":"generate_character_preview_api_v1_characters_preview_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuickCharacterCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterPreviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/characters/hybrid-create":{"post":{"tags":["characters"],"summary":"Hybrid Create Character","description":"하이브리드 모드 - AI 미리보기 + 사용자 조정 후 생성\n\n/preview에서 받은 미리보기를 확인하고, 원하는 필드를 수정하여 최종 생성합니다.\n수정하지 않은 필드는 AI가 생성한 값이 그대로 사용됩니다.","operationId":"hybrid_create_character_api_v1_characters_hybrid_create_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HybridCharacterCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/characters/":{"get":{"tags":["characters"],"summary":"Get User Characters","operationId":"get_user_characters_api_v1_characters__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CharacterResponse"},"type":"array","title":"Response Get User Characters Api V1 Characters  Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["characters"],"summary":"Create Character","operationId":"create_character_api_v1_characters__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/characters/{character_id}/generate-profile":{"post":{"tags":["characters"],"summary":"Generate Character Profile","operationId":"generate_character_profile_api_v1_characters__character_id__generate_profile_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/categories":{"get":{"tags":["characters"],"summary":"Get Character Categories","description":"캐릭터 카테고리 목록 조회 (캐싱 적용)","operationId":"get_character_categories_api_v1_characters_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/characters/my":{"get":{"tags":["characters"],"summary":"Get My Characters","description":"내 캐릭터 목록 조회 (N+1 최적화 완료)","operationId":"get_my_characters_api_v1_characters_my_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CharacterResponse"},"type":"array","title":"Response Get My Characters Api V1 Characters My Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/characters/{character_id}/documents/upload":{"post":{"tags":["characters"],"summary":"Upload Character Document","description":"캐릭터에 문서 업로드 및 벡터화","operationId":"upload_character_document_api_v1_characters__character_id__documents_upload_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"title","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_character_document_api_v1_characters__character_id__documents_upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/documents":{"get":{"tags":["characters"],"summary":"Get Character Documents","description":"캐릭터의 모든 문서 조회","operationId":"get_character_documents_api_v1_characters__character_id__documents_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/documents/{knowledge_id}":{"delete":{"tags":["characters"],"summary":"Delete Character Document","description":"캐릭터 문서 삭제","operationId":"delete_character_document_api_v1_characters__character_id__documents__knowledge_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"knowledge_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Knowledge Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/documents/search":{"post":{"tags":["characters"],"summary":"Search Character Documents","description":"캐릭터 문서 검색 (Qdrant 기반 RAG)","operationId":"search_character_documents_api_v1_characters__character_id__documents_search_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentSearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/documents/{knowledge_id}/analyze":{"post":{"tags":["characters"],"summary":"Analyze Character Document","description":"업로드된 문서의 벡터화 상태 확인.\n\nanalyze_document 는 존재한 적 없는 서비스 메서드다 — upload_document 가\n업로드 시점에 임베딩·Qdrant 저장까지 전부 수행하므로 별도 \"분석\" 단계는\n없다. 소유권을 확인하고 처리 상태를 돌려준다 (없으면 404/403).","operationId":"analyze_character_document_api_v1_characters__character_id__documents__knowledge_id__analyze_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"knowledge_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Knowledge Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/generate-image":{"post":{"tags":["characters"],"summary":"Generate Character Image","operationId":"generate_character_image_api_v1_characters__character_id__generate_image_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageGenerationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/set-main-image/{image_id}":{"post":{"tags":["characters"],"summary":"Set Main Image","operationId":"set_main_image_api_v1_characters__character_id__set_main_image__image_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"image_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Image Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/images":{"get":{"tags":["characters"],"summary":"Get Character Images","operationId":"get_character_images_api_v1_characters__character_id__images_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/images/{image_id}":{"delete":{"tags":["characters"],"summary":"Delete Character Image","operationId":"delete_character_image_api_v1_characters__character_id__images__image_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"image_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Image Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/knowledge":{"post":{"tags":["characters"],"summary":"Add Character Knowledge","description":"캐릭터에 전문지식 추가","operationId":"add_character_knowledge_api_v1_characters__character_id__knowledge_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeAddRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["characters"],"summary":"Get Character Knowledge","description":"캐릭터의 모든 지식 조회","operationId":"get_character_knowledge_api_v1_characters__character_id__knowledge_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/knowledge/{knowledge_id}":{"patch":{"tags":["characters"],"summary":"Update Character Knowledge","description":"캐릭터 지식 증분 업데이트 (임베딩 재생성)","operationId":"update_character_knowledge_api_v1_characters__character_id__knowledge__knowledge_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"knowledge_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Knowledge Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Knowledge Update"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["characters"],"summary":"Delete Character Knowledge","description":"캐릭터의 지식 삭제","operationId":"delete_character_knowledge_api_v1_characters__character_id__knowledge__knowledge_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"knowledge_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Knowledge Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/knowledge/search":{"post":{"tags":["characters"],"summary":"Search Character Knowledge","description":"캐릭터의 지식 검색 (RAG)","operationId":"search_character_knowledge_api_v1_characters__character_id__knowledge_search_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/knowledge/batch-upload":{"post":{"tags":["characters"],"summary":"Batch Upload Knowledge Files","description":"여러 파일을 동시에 업로드하여 캐릭터 지식으로 추가","operationId":"batch_upload_knowledge_files_api_v1_characters__character_id__knowledge_batch_upload_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"knowledge_scope","in":"query","required":false,"schema":{"type":"string","default":"character","title":"Knowledge Scope"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_batch_upload_knowledge_files_api_v1_characters__character_id__knowledge_batch_upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/knowledge/upload":{"post":{"tags":["characters"],"summary":"Upload Knowledge File","description":"파일을 업로드하여 캐릭터 지식으로 추가.\n\n캐릭터 설정 지식 탭이 부르는 경로다(multipart: file/title/content_type/knowledge_scope).\n예전엔 파일 바이트를 utf-8 로 디코드해 지식에 넣어서 PDF·docx·xlsx 가 전부 깨졌다.\n이제 정식 문서 파이프라인(QdrantRAGService.upload_document — 형식별 텍스트 추출,\nLLM 전처리, 청크 벡터)을 그대로 쓴다 (2026-09-18).","operationId":"upload_knowledge_file_api_v1_characters__character_id__knowledge_upload_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_knowledge_file_api_v1_characters__character_id__knowledge_upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/knowledge/youtube":{"post":{"tags":["characters"],"summary":"Add Youtube Knowledge","description":"유튜브 자막을 지식으로 추가","operationId":"add_youtube_knowledge_api_v1_characters__character_id__knowledge_youtube_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"youtube_url","in":"query","required":true,"schema":{"type":"string","title":"Youtube Url"}},{"name":"language","in":"query","required":false,"schema":{"type":"string","default":"ko","title":"Language"}},{"name":"knowledge_scope","in":"query","required":false,"schema":{"type":"string","default":"character","title":"Knowledge Scope"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/knowledge/audio-upload":{"post":{"tags":["characters"],"summary":"Upload Audio Knowledge","description":"음성 파일을 텍스트로 변환 후 지식 추가 (Whisper API)","operationId":"upload_audio_knowledge_api_v1_characters__character_id__knowledge_audio_upload_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"title","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"}},{"name":"language","in":"query","required":false,"schema":{"type":"string","default":"ko","title":"Language"}},{"name":"knowledge_scope","in":"query","required":false,"schema":{"type":"string","default":"character","title":"Knowledge Scope"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_audio_knowledge_api_v1_characters__character_id__knowledge_audio_upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/knowledge/structured-data":{"post":{"tags":["characters"],"summary":"Add Structured Data Knowledge","description":"CSV, JSON, Excel 파일을 지식으로 추가","operationId":"add_structured_data_knowledge_api_v1_characters__character_id__knowledge_structured_data_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"title","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"}},{"name":"knowledge_scope","in":"query","required":false,"schema":{"type":"string","default":"character","title":"Knowledge Scope"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_add_structured_data_knowledge_api_v1_characters__character_id__knowledge_structured_data_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/knowledge/crawl":{"post":{"tags":["characters"],"summary":"Crawl Website For Knowledge","description":"웹사이트를 크롤링하여 캐릭터 지식으로 추가","operationId":"crawl_website_for_knowledge_api_v1_characters__character_id__knowledge_crawl_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"url","in":"query","required":true,"schema":{"type":"string","title":"Url"}},{"name":"max_depth","in":"query","required":false,"schema":{"type":"integer","default":2,"title":"Max Depth"}},{"name":"max_pages","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Max Pages"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/marketplace":{"get":{"tags":["characters"],"summary":"Get Character Marketplace Settings","description":"캐릭터 마켓플레이스 설정 조회","operationId":"get_character_marketplace_settings_api_v1_characters__character_id__marketplace_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["characters"],"summary":"Update Character Marketplace Settings","description":"캐릭터 마켓플레이스 설정 업데이트 (제작자용)","operationId":"update_character_marketplace_settings_api_v1_characters__character_id__marketplace_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterMarketplaceSettings"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/marketplace/validate-pricing":{"get":{"tags":["characters"],"summary":"Validate Character Pricing","description":"가격 설정 유효성 검사","operationId":"validate_character_pricing_api_v1_characters__character_id__marketplace_validate_pricing_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"price","in":"query","required":true,"schema":{"type":"number","title":"Price"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}":{"get":{"tags":["characters"],"summary":"Get Character","description":"Get character details — supports both authenticated users and guests (public characters only).","operationId":"get_character_api_v1_characters__character_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["characters"],"summary":"Update Character","description":"캐릭터 정보 업데이트","operationId":"update_character_api_v1_characters__character_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["characters"],"summary":"Delete Character","operationId":"delete_character_api_v1_characters__character_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/purchased-characters/acquire-free/{character_id}":{"post":{"tags":["purchased-characters"],"summary":"Acquire Free Character","description":"무료 캐릭터 획득 (라이브러리에 추가)","operationId":"acquire_free_character_api_v1_purchased_characters_acquire_free__character_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/purchased-characters/purchased":{"get":{"tags":["purchased-characters"],"summary":"Get Purchased Characters","description":"구매한 캐릭터 목록 조회\n\n다음 소스에서 캐릭터를 조회합니다:\n1. purchases 테이블 (마켓플레이스 구매)\n2. project_characters 테이블 (access_type='purchased', 프로젝트에서 선택한 무료/공개 캐릭터)","operationId":"get_purchased_characters_api_v1_purchased_characters_purchased_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/purchased-characters/{character_id}":{"get":{"tags":["purchased-characters"],"summary":"Get Purchased Character Detail","description":"구매한 캐릭터 상세 정보 조회","operationId":"get_purchased_character_detail_api_v1_purchased_characters__character_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/character-search/search":{"get":{"tags":["character-search"],"summary":"Search Characters By Ability","description":"능력별/전문분야별 캐릭터 검색\n\n예시:\n- \"영어 선생님\" → 영어 전문 캐릭터\n- \"요리사\" → 요리 전문 캐릭터\n- \"코딩 멘토\" → 프로그래밍 전문 캐릭터\n- \"심리 상담사\" → 상담 전문 캐릭터","operationId":"search_characters_by_ability_api_v1_character_search_search_get","parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","description":"검색어 (능력, 전문분야, 태그)","title":"Query"},"description":"검색어 (능력, 전문분야, 태그)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"expert_only","in":"query","required":false,"schema":{"type":"boolean","description":"전문가만 검색","default":false,"title":"Expert Only"},"description":"전문가만 검색"},{"name":"min_rating","in":"query","required":false,"schema":{"type":"number","maximum":5.0,"minimum":0.0,"default":0.0,"title":"Min Rating"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CharacterSearchResult"},"title":"Response Search Characters By Ability Api V1 Character Search Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/character-search/categories":{"get":{"tags":["character-search"],"summary":"Get Popular Categories","description":"인기 카테고리/능력 목록\n\n전화번호부의 \"즐겨찾기\" 같은 기능","operationId":"get_popular_categories_api_v1_character_search_categories_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get Popular Categories Api V1 Character Search Categories Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/lora/train":{"post":{"tags":["character-lora"],"summary":"Train Lora","description":"1장 업로드 → 30+ 변형 자동 생성 → LoRA 학습 큐 등록.","operationId":"train_lora_api_v1_characters__character_id__lora_train_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_train_lora_api_v1_characters__character_id__lora_train_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoRAResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/lora":{"get":{"tags":["character-lora"],"summary":"List Loras","operationId":"list_loras_api_v1_characters__character_id__lora_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LoRAResponse"},"title":"Response List Loras Api V1 Characters  Character Id  Lora Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/lora/{lora_id}":{"get":{"tags":["character-lora"],"summary":"Lora Status","operationId":"lora_status_api_v1_characters__character_id__lora__lora_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"lora_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Lora Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoRAResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/character-categories/":{"post":{"tags":["character-categories"],"summary":"Create Character Category","description":"사용자 개인 캐릭터 카테고리 생성\n\n- **name**: 카테고리 이름 (필수)\n- **description**: 카테고리 설명 (선택)\n- **color**: 카테고리 색상 hex 코드 (기본값: #6366F1)\n- **icon**: 아이콘 이름 (선택)\n- **parent_id**: 부모 카테고리 ID (선택, 2단계까지 지원)\n- **sort_order**: 정렬 순서 (기본값: 0)","operationId":"create_character_category_api_v1_character_categories__post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterCategoryCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterCategoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["character-categories"],"summary":"Get Character Categories","description":"캐릭터 카테고리 조회 (공개 접근 가능)\n\n로그인한 경우 사용자의 카테고리, 비로그인 시 시스템 기본 카테고리 반환","operationId":"get_character_categories_api_v1_character_categories__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","description":"비활성 카테고리 포함 여부","default":false,"title":"Include Inactive"},"description":"비활성 카테고리 포함 여부"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterCategoryListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/character-categories/tree":{"get":{"tags":["character-categories"],"summary":"Get Character Categories Tree","description":"사용자의 캐릭터 카테고리를 계층구조 트리로 조회\n\n부모-자식 관계를 중첩된 구조로 반환","operationId":"get_character_categories_tree_api_v1_character_categories_tree_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CharacterCategoryTree"},"type":"array","title":"Response Get Character Categories Tree Api V1 Character Categories Tree Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/character-categories/{category_id}":{"get":{"tags":["character-categories"],"summary":"Get Character Category","description":"특정 캐릭터 카테고리 상세 조회","operationId":"get_character_category_api_v1_character_categories__category_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"category_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Category Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterCategoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["character-categories"],"summary":"Update Character Category","description":"캐릭터 카테고리 정보 수정\n\n- 부모 카테고리 변경 시 순환 참조와 3단계 이상 구조 방지\n- 같은 레벨에서의 이름 중복 방지","operationId":"update_character_category_api_v1_character_categories__category_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"category_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Category Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterCategoryUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterCategoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["character-categories"],"summary":"Delete Character Category","description":"캐릭터 카테고리 삭제\n\n- **force=false**: 연결된 캐릭터나 자식 카테고리가 있으면 삭제 불가\n- **force=true**: 자식 카테고리는 최상위로 이동, 캐릭터는 카테고리 해제 후 삭제","operationId":"delete_character_category_api_v1_character_categories__category_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"category_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Category Id"}},{"name":"force","in":"query","required":false,"schema":{"type":"boolean","description":"연결된 캐릭터와 자식 카테고리가 있어도 강제 삭제","default":false,"title":"Force"},"description":"연결된 캐릭터와 자식 카테고리가 있어도 강제 삭제"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/character-categories/bulk":{"post":{"tags":["character-categories"],"summary":"Bulk Category Operation","description":"캐릭터 카테고리 일괄 작업\n\n- **delete**: 일괄 삭제\n- **activate**: 일괄 활성화\n- **deactivate**: 일괄 비활성화\n- **reorder**: 일괄 정렬 순서 변경 (향후 구현)\n\noptions 필드를 통해 작업별 추가 옵션 전달 가능","operationId":"bulk_category_operation_api_v1_character_categories_bulk_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkCategoryOperationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkCategoryOperationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/presets/categories":{"get":{"tags":["presets"],"summary":"Get Preset Categories","description":"프리셋 카테고리 목록 조회\n\n- **active_only**: 활성 카테고리만 조회할지 여부","operationId":"get_preset_categories_api_v1_presets_categories_get","parameters":[{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","description":"활성 카테고리만 조회","default":true,"title":"Active Only"},"description":"활성 카테고리만 조회"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PresetCategoryResponse"},"title":"Response Get Preset Categories Api V1 Presets Categories Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/presets/categories/{category_id}/presets":{"get":{"tags":["presets"],"summary":"Get Presets By Category","description":"특정 카테고리의 프리셋 목록 조회\n\n- **category_id**: 카테고리 ID\n- **include_premium**: 프리미엄 프리셋 포함 여부","operationId":"get_presets_by_category_api_v1_presets_categories__category_id__presets_get","parameters":[{"name":"category_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Category Id"}},{"name":"include_premium","in":"query","required":false,"schema":{"type":"boolean","description":"프리미엄 프리셋 포함 여부","default":true,"title":"Include Premium"},"description":"프리미엄 프리셋 포함 여부"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CharacterPresetListResponse"},"title":"Response Get Presets By Category Api V1 Presets Categories  Category Id  Presets Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/presets/featured":{"get":{"tags":["presets"],"summary":"Get Featured Presets","description":"Featured 프리셋 목록 조회\n\n- **limit**: 최대 결과 수 (기본 6개)","operationId":"get_featured_presets_api_v1_presets_featured_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"description":"최대 결과 수","default":6,"title":"Limit"},"description":"최대 결과 수"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CharacterPresetListResponse"},"title":"Response Get Featured Presets Api V1 Presets Featured Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/presets/popular":{"get":{"tags":["presets"],"summary":"Get Popular Presets","description":"인기 프리셋 목록 조회 (사용 횟수 기준)\n\n- **limit**: 최대 결과 수\n- **category_id**: 특정 카테고리로 필터링 (선택)","operationId":"get_popular_presets_api_v1_presets_popular_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"최대 결과 수","default":10,"title":"Limit"},"description":"최대 결과 수"},{"name":"category_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"카테고리 필터","title":"Category Id"},"description":"카테고리 필터"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CharacterPresetListResponse"},"title":"Response Get Popular Presets Api V1 Presets Popular Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/presets/recommended":{"get":{"tags":["presets"],"summary":"Get Recommended Presets","description":"사용자 맞춤 추천 프리셋\n\n현재는 평점 기반 추천, 향후 ML 기반 개인화 추천 예정\n\n- **limit**: 최대 결과 수","operationId":"get_recommended_presets_api_v1_presets_recommended_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"description":"최대 결과 수","default":5,"title":"Limit"},"description":"최대 결과 수"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CharacterPresetListResponse"},"title":"Response Get Recommended Presets Api V1 Presets Recommended Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/presets/{preset_id}":{"get":{"tags":["presets"],"summary":"Get Preset Detail","description":"프리셋 상세 조회\n\n- **preset_id**: 프리셋 ID","operationId":"get_preset_detail_api_v1_presets__preset_id__get","parameters":[{"name":"preset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Preset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterPresetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/presets/search":{"post":{"tags":["presets"],"summary":"Search Presets","description":"프리셋 검색\n\n- **query**: 검색어 (이름, 설명, 태그)\n- **category_id**: 카테고리 필터\n- **tags**: 태그 필터\n- **include_premium**: 프리미엄 포함 여부\n- **limit**: 최대 결과 수","operationId":"search_presets_api_v1_presets_search_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PresetSearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CharacterPresetListResponse"},"type":"array","title":"Response Search Presets Api V1 Presets Search Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/presets/create-character":{"post":{"tags":["presets"],"summary":"Create Character From Preset","description":"프리셋으로부터 캐릭터 생성\n\n프리셋의 설정을 기반으로 사용자의 캐릭터를 생성합니다.\n\n- **preset_id**: 사용할 프리셋 ID\n- **custom_name**: 커스텀 이름 (선택)\n- **customizations**: 추가 커스터마이징 옵션 (선택)\n    - seed_prompt: 추가 프롬프트\n    - backstory: 커스텀 배경\n    - voice_config: 음성 설정\n    - is_public: 공개 여부\n\n**프리미엄 프리셋의 경우 구매 필요**","operationId":"create_character_from_preset_api_v1_presets_create_character_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCharacterFromPresetRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/presets/{preset_id}/rate":{"post":{"tags":["presets"],"summary":"Rate Preset","description":"프리셋 평가\n\n- **preset_id**: 평가할 프리셋 ID\n- **rating**: 평점 (1.0 ~ 5.0)","operationId":"rate_preset_api_v1_presets__preset_id__rate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"preset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Preset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RatePresetRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterPresetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/presets/save-as-template":{"post":{"tags":["presets"],"summary":"Save Character As Template","description":"기존 캐릭터를 템플릿으로 저장\n\n사용자가 만든 캐릭터를 템플릿으로 저장하여 나중에 재사용하거나\n마켓플레이스에 공유할 수 있습니다.\n\n- **character_id**: 템플릿으로 저장할 캐릭터 ID\n- **template_name**: 템플릿 이름 (선택)\n- **category_id**: 카테고리 (선택)\n- **is_public**: 마켓플레이스에 공개할지 여부","operationId":"save_character_as_template_api_v1_presets_save_as_template_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","description":"템플릿으로 저장할 캐릭터 ID","title":"Character Id"},"description":"템플릿으로 저장할 캐릭터 ID"},{"name":"template_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"템플릿 이름 (미지정 시 캐릭터 이름 사용)","title":"Template Name"},"description":"템플릿 이름 (미지정 시 캐릭터 이름 사용)"},{"name":"category_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"카테고리 ID","title":"Category Id"},"description":"카테고리 ID"},{"name":"is_public","in":"query","required":false,"schema":{"type":"boolean","description":"마켓플레이스 공개 여부","default":false,"title":"Is Public"},"description":"마켓플레이스 공개 여부"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterPresetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/presets/my-templates":{"get":{"tags":["presets"],"summary":"Get My Templates","description":"내가 만든 커스텀 템플릿 목록 조회\n\n- **category_id**: 특정 카테고리로 필터링 (선택)","operationId":"get_my_templates_api_v1_presets_my_templates_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"category_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"카테고리 필터","title":"Category Id"},"description":"카테고리 필터"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CharacterPresetListResponse"},"title":"Response Get My Templates Api V1 Presets My Templates Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/presets/stats/overview":{"get":{"tags":["presets"],"summary":"Get Preset Statistics","description":"프리셋 시스템 전체 통계\n\n- 총 프리셋 수\n- 무료/프리미엄 분포\n- 평균 평점\n- 총 사용 횟수 등","operationId":"get_preset_statistics_api_v1_presets_stats_overview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PresetStatistics"}}}}}}},"/api/v1/wizard/start":{"post":{"tags":["wizard"],"summary":"Start Wizard","description":"마법사 시작 - 새로운 세션 생성\n\n**빠른 시작**: 5분 만에 AI 챗봇 완성!","operationId":"start_wizard_api_v1_wizard_start_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WizardSessionResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/wizard/preset":{"post":{"tags":["wizard"],"summary":"Wizard Select Preset","description":"Step 1: Preset 선택 또는 직접 생성\n\n**옵션**:\n- `preset_id`: 기존 프리셋 사용\n- `custom_config`: 직접 생성","operationId":"wizard_select_preset_api_v1_wizard_preset_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WizardPresetRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WizardPresetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/wizard/knowledge":{"post":{"tags":["wizard"],"summary":"Wizard Add Knowledge","description":"Step 2: 지식 추가\n\n**지원 소스**:\n- URL: 웹사이트 크롤링\n- File: 파일 업로드\n- Text: 직접 입력","operationId":"wizard_add_knowledge_api_v1_wizard_knowledge_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WizardKnowledgeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WizardKnowledgeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/wizard/test":{"post":{"tags":["wizard"],"summary":"Wizard Test Chat","description":"Step 3: 챗봇 테스트\n\n실시간으로 챗봇과 대화하여 설정을 확인합니다.","operationId":"wizard_test_chat_api_v1_wizard_test_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WizardTestRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WizardTestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/wizard/deploy":{"post":{"tags":["wizard"],"summary":"Wizard Deploy","description":"Step 4: 배포 — 프로젝트 위젯 키 발급 + 현행 SDK 임베드 코드 생성\n(window.BestCharConfig + /sdk/widget.js 단일 형식)","operationId":"wizard_deploy_api_v1_wizard_deploy_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WizardDeployRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WizardDeployResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/content/{slug}":{"get":{"tags":["content-pages"],"summary":"Get Content Page By Slug","description":"Get a content page by slug (public endpoint)","operationId":"get_content_page_by_slug_api_v1_content__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentPageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/content/":{"get":{"tags":["content-pages"],"summary":"List Content Pages","description":"List all content pages (admin only)","operationId":"list_content_pages_api_v1_content__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ContentPageResponse"},"type":"array","title":"Response List Content Pages Api V1 Content  Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["content-pages"],"summary":"Create Content Page","description":"Create a new content page (admin only)","operationId":"create_content_page_api_v1_content__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentPageCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentPageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/content/{page_id}":{"put":{"tags":["content-pages"],"summary":"Update Content Page","description":"Update a content page (admin only)","operationId":"update_content_page_api_v1_content__page_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","title":"Page Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentPageUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentPageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["content-pages"],"summary":"Delete Content Page","description":"Delete a content page (admin only)","operationId":"delete_content_page_api_v1_content__page_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","title":"Page Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/security/report":{"post":{"tags":["security-report"],"summary":"Report Security Incident","description":"보안 사고 신고","operationId":"report_security_incident_api_v1_security_report_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecurityReportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecurityReportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/contact":{"post":{"tags":["contact","Contact"],"summary":"Submit Contact Form","description":"문의 폼 제출\n\n- **name**: 이름\n- **email**: 이메일\n- **subject**: 제목 (선택)\n- **category**: 카테고리 (general, technical, billing, partnership, security, api)\n- **message**: 문의 내용","operationId":"submit_contact_form_api_v1_contact_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/contact/my-inquiries":{"get":{"tags":["contact","Contact"],"summary":"Get My Inquiries","description":"내 문의 목록 조회","operationId":"get_my_inquiries_api_v1_contact_my_inquiries_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contact/inquiry/{inquiry_id}":{"get":{"tags":["contact","Contact"],"summary":"Get Inquiry Detail","description":"문의 상세 조회","operationId":"get_inquiry_detail_api_v1_contact_inquiry__inquiry_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"inquiry_id","in":"path","required":true,"schema":{"type":"string","title":"Inquiry Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InquiryDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/inquiries":{"get":{"tags":["contact","Admin - Contact"],"summary":"Get All Inquiries","description":"모든 문의 목록 조회 (관리자용)","operationId":"get_all_inquiries_api_v1_admin_inquiries_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"priority","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Priority"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/inquiries/{inquiry_id}":{"get":{"tags":["contact","Admin - Contact"],"summary":"Get Inquiry Admin","description":"문의 상세 조회 (관리자용)","operationId":"get_inquiry_admin_api_v1_admin_inquiries__inquiry_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"inquiry_id","in":"path","required":true,"schema":{"type":"string","title":"Inquiry Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/inquiries/{inquiry_id}/respond":{"post":{"tags":["contact","Admin - Contact"],"summary":"Respond To Inquiry","description":"문의에 답변하기 (관리자용)","operationId":"respond_to_inquiry_api_v1_admin_inquiries__inquiry_id__respond_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"inquiry_id","in":"path","required":true,"schema":{"type":"string","title":"Inquiry Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminResponseRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/inquiries/{inquiry_id}/priority":{"patch":{"tags":["contact","Admin - Contact"],"summary":"Update Inquiry Priority","description":"문의 우선순위 변경 (관리자용)","operationId":"update_inquiry_priority_api_v1_admin_inquiries__inquiry_id__priority_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"inquiry_id","in":"path","required":true,"schema":{"type":"string","title":"Inquiry Id"}},{"name":"priority","in":"query","required":true,"schema":{"type":"string","description":"low, normal, high, urgent","title":"Priority"},"description":"low, normal, high, urgent"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/inquiries/{inquiry_id}/status":{"patch":{"tags":["contact","Admin - Contact"],"summary":"Update Inquiry Status","description":"문의 상태 변경 (관리자용)","operationId":"update_inquiry_status_api_v1_admin_inquiries__inquiry_id__status_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"inquiry_id","in":"path","required":true,"schema":{"type":"string","title":"Inquiry Id"}},{"name":"status","in":"query","required":true,"schema":{"type":"string","description":"pending, in_progress, resolved","title":"Status"},"description":"pending, in_progress, resolved"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/inquiries/stats":{"get":{"tags":["contact","Admin - Contact"],"summary":"Get Inquiry Stats","description":"문의 통계 (관리자용)","operationId":"get_inquiry_stats_api_v1_admin_inquiries_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/chat/{character_id}/conversations":{"get":{"tags":["chat"],"summary":"Get Conversations","operationId":"get_conversations_api_v1_chat__character_id__conversations_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/chat/{character_id}/conversations/new":{"post":{"tags":["chat"],"summary":"Create New Conversation","operationId":"create_new_conversation_api_v1_chat__character_id__conversations_new_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/chat/{character_id}/conversations/{conversation_id}/messages":{"get":{"tags":["chat"],"summary":"Get Conversation Messages","operationId":"get_conversation_messages_api_v1_chat__character_id__conversations__conversation_id__messages_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/chat/{character_id}/conversations/{conversation_id}":{"delete":{"tags":["chat"],"summary":"Delete Conversation","operationId":"delete_conversation_api_v1_chat__character_id__conversations__conversation_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/chat/{character_id}/conversations/{conversation_id}/rewind":{"post":{"tags":["chat"],"summary":"Rewind Conversation","operationId":"rewind_conversation_api_v1_chat__character_id__conversations__conversation_id__rewind_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RewindRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/chat/messages/{message_id}":{"put":{"tags":["chat"],"summary":"Edit Message","description":"사용자 자신의 메시지 텍스트 수정. AI 메시지는 수정 불가.","operationId":"edit_message_api_v1_chat_messages__message_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Message Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageEditRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponseLite"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["chat"],"summary":"Delete Message","description":"메시지 soft-delete (deleted_at만 설정, 행은 보존).","operationId":"delete_message_api_v1_chat_messages__message_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Message Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponseLite"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/chat/messages/{message_id}/pin":{"post":{"tags":["chat"],"summary":"Pin Message","description":"메시지 고정.","operationId":"pin_message_api_v1_chat_messages__message_id__pin_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Message Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponseLite"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["chat"],"summary":"Unpin Message","description":"메시지 고정 해제.","operationId":"unpin_message_api_v1_chat_messages__message_id__pin_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Message Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponseLite"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/chat/{character_id}/conversations/{conversation_id}/pinned":{"get":{"tags":["chat"],"summary":"List Pinned Messages","description":"대화에 고정된 메시지 목록 조회 (최근 핀 순).","operationId":"list_pinned_messages_api_v1_chat__character_id__conversations__conversation_id__pinned_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MessageResponseLite"},"title":"Response List Pinned Messages Api V1 Chat  Character Id  Conversations  Conversation Id  Pinned Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/chat/enhanced":{"post":{"tags":["chat"],"summary":"Enhanced Chat","description":"Enhanced chat with knowledge base and site context integration","operationId":"enhanced_chat_api_v1_chat_enhanced_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedChatRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/chat/task/{task_id}":{"get":{"tags":["chat"],"summary":"Get Chat Task Status","description":"Poll chat task status and retrieve result\n\nTask states:\n- pending: Task queued but not started\n- processing: Task in progress (with progress updates)\n- success: Task completed successfully\n- failure: Task failed with error\n\nReturns:\n    Task status and result/error/progress","operationId":"get_chat_task_status_api_v1_chat_task__task_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/chat/upload-chat-images":{"post":{"tags":["chat"],"summary":"Upload Chat Images","description":"채팅용 이미지 업로드 (Gemini Vision 등 멀티모달 모델용)\n- 최대 5개 이미지 업로드 가능\n- 업로드된 이미지 URL을 반환하여 ChatRequest.image_urls에 포함","operationId":"upload_chat_images_api_v1_chat_upload_chat_images_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_chat_images_api_v1_chat_upload_chat_images_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/chat/{character_id}/conversations/{conversation_id}/proactive-greeting":{"get":{"tags":["chat"],"summary":"관계 레벨 기반 능동적 인사 생성","description":"관계 레벨에 따른 능동적 인사 생성 (특허 기반)\n\n- STRANGER (0-24): 정중한 첫인사\n- ACQUAINTANCE (25-49): 가벼운 반가움 표현\n- FRIEND (50-74): 친근한 인사\n- CLOSE_FRIEND (75-100): 애칭 사용 가능한 친밀한 인사\n\nReturns:\n    - greeting: 생성된 인사말 (없으면 None)\n    - relationship_level: 현재 관계 레벨\n    - relationship_score: 현재 관계 점수 (0-100)\n    - greeting_style: 인사 스타일 (formal, friendly, intimate)\n    - can_use_nickname: 애칭 사용 가능 여부\n    - total_interactions: 총 대화 횟수","operationId":"get_proactive_greeting_api_v1_chat__character_id__conversations__conversation_id__proactive_greeting_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProactiveGreetingResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/chat/{character_id}/conversations/{conversation_id}/relationship":{"get":{"tags":["chat"],"summary":"현재 관계 상태 조회","description":"현재 관계 상태 조회\n\nReturns:\n    - relationship_level: 관계 레벨 (stranger/acquaintance/friend/close_friend)\n    - relationship_score: 관계 점수 (0-100)\n    - intimacy_score: 친밀도 점수 (0.0-1.0)\n    - total_messages: 총 메시지 수\n    - positive_interactions: 긍정적 상호작용 수\n    - negative_interactions: 부정적 상호작용 수\n    - behavior_guidelines: 현재 레벨에 맞는 행동 지침","operationId":"get_relationship_status_api_v1_chat__character_id__conversations__conversation_id__relationship_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/chat/generate-suggested-replies":{"post":{"tags":["suggested-replies"],"summary":"Generate Suggested Replies","description":"Generate AI-based suggested replies based on the last message from the character.\n\nArgs:\n    request: Contains character_id, last_message, and conversation_history\n\nReturns:\n    3 contextually relevant suggested replies","operationId":"generate_suggested_replies_api_v1_chat_generate_suggested_replies_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuggestedRepliesRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuggestedRepliesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/chat/translate":{"post":{"tags":["translate"],"summary":"Translate Message","description":"메시지를 번역합니다.\n\nOpenRouter API를 사용하여 GPT-4o-mini 모델로 번역을 수행합니다.","operationId":"translate_message_api_v1_chat_translate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranslateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranslateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/chat/settings/emotion-presets":{"get":{"tags":["chat-settings"],"summary":"Get Emotion Presets","description":"사용 가능한 감정 프리셋 목록","operationId":"get_emotion_presets_api_v1_chat_settings_emotion_presets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/chat/settings/emotion-preset":{"post":{"tags":["chat-settings"],"summary":"Apply Emotion Preset","description":"감정 프리셋을 적용하고 프롬프트 추가 문구 반환","operationId":"apply_emotion_preset_api_v1_chat_settings_emotion_preset_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmotionPresetRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmotionPresetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/chat/settings/tone-presets":{"get":{"tags":["chat-settings"],"summary":"Get Tone Presets","description":"사용 가능한 톤 프리셋 목록","operationId":"get_tone_presets_api_v1_chat_settings_tone_presets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/chat/settings/tone-preset":{"post":{"tags":["chat-settings"],"summary":"Apply Tone Preset","description":"톤 프리셋을 적용하고 API 파라미터 반환","operationId":"apply_tone_preset_api_v1_chat_settings_tone_preset_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TonePresetRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TonePresetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/chat/settings/templates/{user_id}":{"get":{"tags":["chat-settings"],"summary":"Get User Templates","description":"사용자의 템플릿 메시지 목록","operationId":"get_user_templates_api_v1_chat_settings_templates__user_id__get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["chat-settings"],"summary":"Save User Templates","description":"사용자의 템플릿 메시지 저장","operationId":"save_user_templates_api_v1_chat_settings_templates__user_id__post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateMessagesRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/chat/settings/templates/{user_id}/{slot}":{"delete":{"tags":["chat-settings"],"summary":"Delete User Template","description":"특정 슬롯의 템플릿 삭제","operationId":"delete_user_template_api_v1_chat_settings_templates__user_id___slot__delete","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"slot","in":"path","required":true,"schema":{"type":"integer","title":"Slot"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/chat/settings/apply-settings":{"post":{"tags":["chat-settings"],"summary":"Apply Chat Settings","description":"통합 채팅 설정 적용","operationId":"apply_chat_settings_api_v1_chat_settings_apply_settings_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatSettings"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/user-keys/":{"get":{"tags":["user-keys"],"summary":"Get User Keys","description":"List all LLM API keys for the current user","operationId":"get_user_keys_api_v1_user_keys__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/UserLLMKeyResponse"},"type":"array","title":"Response Get User Keys Api V1 User Keys  Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["user-keys"],"summary":"Add User Key","description":"Add or update an LLM API key","operationId":"add_user_key_api_v1_user_keys__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserLLMKeyCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserLLMKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/user-keys/{provider}":{"delete":{"tags":["user-keys"],"summary":"Delete User Key","description":"Delete an LLM API key","operationId":"delete_user_key_api_v1_user_keys__provider__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/chat-features":{"get":{"tags":["chat-features"],"summary":"플랫폼 전역 채팅 기능 설정 조회","description":"플랫폼 수준 채팅 기능 설정 조회 (슈퍼관리자 전용)","operationId":"get_platform_chat_features_api_v1_admin_chat_features_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatFeaturesWithDescriptions"}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["chat-features"],"summary":"플랫폼 전역 채팅 기능 설정 수정","description":"플랫폼 수준 채팅 기능 설정 수정 (슈퍼관리자 전용)","operationId":"update_platform_chat_features_api_v1_admin_chat_features_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatFeatureSettingsUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatFeatureSettingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/characters/{character_id}/chat-features":{"get":{"tags":["chat-features"],"summary":"캐릭터별 채팅 기능 설정 조회","description":"캐릭터별 채팅 기능 설정 조회\n\nReturns:\n    - settings: 최종 적용 설정 (플랫폼 기본 + 캐릭터 오버라이드)\n    - overrides: 캐릭터 레벨에서 덮어쓴 설정만\n    - descriptions: 기능 설명","operationId":"get_character_chat_features_api_v1_characters__character_id__chat_features_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatFeaturesWithDescriptions"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["chat-features"],"summary":"캐릭터별 채팅 기능 오버라이드 설정","description":"캐릭터별 채팅 기능 오버라이드 설정\n\n- None으로 설정하면 해당 키 삭제 (플랫폼 기본값 사용)\n- True/False로 설정하면 해당 키 덮어쓰기","operationId":"update_character_chat_features_api_v1_characters__character_id__chat_features_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatFeatureSettingsUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"boolean"},"title":"Response Update Character Chat Features Api V1 Characters  Character Id  Chat Features Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["chat-features"],"summary":"캐릭터별 오버라이드 초기화 (플랫폼 기본값 사용)","description":"캐릭터별 오버라이드 모두 삭제 (플랫폼 기본 설정으로 복원)","operationId":"reset_character_chat_features_api_v1_characters__character_id__chat_features_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/conversations/{conversation_id}/branch":{"post":{"tags":["conversation-branch"],"summary":"대화 분기 생성","description":"특정 메시지 시점에서 새로운 대화를 분기합니다. 원본 대화는 유지됩니다.","operationId":"create_conversation_branch_api_v1_characters__character_id__conversations__conversation_id__branch_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BranchCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BranchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/conversations/{conversation_id}/branches":{"get":{"tags":["conversation-branch"],"summary":"대화 분기 목록 조회","description":"특정 대화에서 생성된 모든 분기를 조회합니다.","operationId":"get_conversation_branches_api_v1_characters__character_id__conversations__conversation_id__branches_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BranchResponse"},"title":"Response Get Conversation Branches Api V1 Characters  Character Id  Conversations  Conversation Id  Branches Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/conversation-share":{"post":{"tags":["conversation-share"],"summary":"Create Share","description":"대화 공유 링크 생성","operationId":"create_share_api_v1_conversation_share_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateShareRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/conversation-share/my":{"get":{"tags":["conversation-share"],"summary":"Get My Shares","description":"내 공유 목록 조회","operationId":"get_my_shares_api_v1_conversation_share_my_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ShareResponse"},"type":"array","title":"Response Get My Shares Api V1 Conversation Share My Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/conversation-share/{share_id}":{"delete":{"tags":["conversation-share"],"summary":"Delete Share","description":"공유 링크 삭제","operationId":"delete_share_api_v1_conversation_share__share_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"share_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Share Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/conversation-share/{share_id}/toggle":{"patch":{"tags":["conversation-share"],"summary":"Toggle Share","description":"공유 활성화/비활성화 토글","operationId":"toggle_share_api_v1_conversation_share__share_id__toggle_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"share_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Share Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/conversation-share/view/{share_token}":{"get":{"tags":["conversation-share"],"summary":"View Shared Conversation","description":"공유된 대화 조회 (비로그인 가능)","operationId":"view_shared_conversation_api_v1_conversation_share_view__share_token__get","parameters":[{"name":"share_token","in":"path","required":true,"schema":{"type":"string","title":"Share Token"}},{"name":"password","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SharedConversationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/conversation-share/export/{conversation_id}":{"get":{"tags":["conversation-share"],"summary":"Export Conversation","description":"대화 내보내기 (JSON, 텍스트, 마크다운)","operationId":"export_conversation_api_v1_conversation_share_export__conversation_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: json, text, markdown","default":"json","title":"Format"},"description":"Export format: json, text, markdown"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/statistics":{"get":{"tags":["chat-statistics"],"summary":"캐릭터 대화 통계 조회","description":"특정 캐릭터와의 모든 대화 통계를 조회합니다.","operationId":"get_chat_statistics_api_v1_characters__character_id__statistics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"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/ChatStatisticsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/conversations/{conversation_id}/statistics":{"get":{"tags":["chat-statistics"],"summary":"개별 대화 통계 조회","description":"특정 대화의 상세 통계를 조회합니다.","operationId":"get_conversation_statistics_api_v1_characters__character_id__conversations__conversation_id__statistics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/topic-analytics":{"get":{"tags":["topic-analytics"],"summary":"대화 주제 분석","description":"AI 기반으로 대화 주제를 자동 분석합니다.","operationId":"get_topic_analytics_api_v1_characters__character_id__topic_analytics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"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/TopicAnalyticsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/daily-quote":{"get":{"tags":["daily-quote"],"summary":"Get Daily Quote","description":"오늘의 한마디 가져오기\n\n위젯에서 사용하며, 세션별로 하루에 한 번씩 새로운 한마디 제공\n\nHeaders:\n    X-External-User-ID: 외부 사용자 ID (선택, 없으면 'anonymous')\n\nReturns:\n    DailyQuoteResponse: 오늘의 한마디","operationId":"get_daily_quote_api_v1_characters__character_id__daily_quote_get","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"X-External-User-ID","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-External-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DailyQuoteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/images/generate-main":{"post":{"tags":["images"],"summary":"Generate Main Image","operationId":"generate_main_image_api_v1_images_generate_main_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageGenerateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__image__ImageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/images/generate-sub":{"post":{"tags":["images"],"summary":"Generate Sub Image","description":"Generate a sub (secondary) image for a character.\nThis endpoint is used by the integration tests to verify sub‑image creation.\nIt mirrors the main image generation logic but does **not** set the\ncharacter's `main_image_id`.","operationId":"generate_sub_image_api_v1_images_generate_sub_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageGenerateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__image__ImageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/images/generate-emotions":{"post":{"tags":["images"],"summary":"Generate Emotion Images","operationId":"generate_emotion_images_api_v1_images_generate_emotions_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageGenerateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/app__schemas__image__ImageResponse"},"type":"array","title":"Response Generate Emotion Images Api V1 Images Generate Emotions Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/characters/{character_id}/memories":{"get":{"tags":["memory"],"summary":"Get Character Memories","description":"캐릭터의 메모리 조회 - 실제 데이터베이스에서 (소유자 전용)","operationId":"get_character_memories_api_v1_characters__character_id__memories_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MemoryResponse"},"title":"Response Get Character Memories Api V1 Characters  Character Id  Memories Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/favorites":{"get":{"tags":["memory"],"summary":"Get Favorite Memories","description":"캐릭터의 즐겨찾기 메모리 조회 (소유자 전용)","operationId":"get_favorite_memories_api_v1_characters__character_id__favorites_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["memory"],"summary":"Add Favorite Memory","description":"즐겨찾기 메모리 추가 (소유자 전용)","operationId":"add_favorite_memory_api_v1_characters__character_id__favorites_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Favorite Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/favorites/{favorite_id}":{"delete":{"tags":["memory"],"summary":"Remove Favorite Memory","description":"즐겨찾기 메모리 제거 (소유자 전용)","operationId":"remove_favorite_memory_api_v1_characters__character_id__favorites__favorite_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}},{"name":"favorite_id","in":"path","required":true,"schema":{"type":"string","title":"Favorite Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/memory-statistics":{"get":{"tags":["memory"],"summary":"Get Memory Statistics","description":"메모리 통계 조회","operationId":"get_memory_statistics_api_v1_characters__character_id__memory_statistics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/health":{"get":{"tags":["memory"],"summary":"Get Memory Health Status","description":"메모리 시스템 건강 상태 조회","operationId":"get_memory_health_status_api_v1_characters__character_id__health_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/settings":{"get":{"tags":["memory"],"summary":"Get Memory Settings","description":"메모리 설정 조회","operationId":"get_memory_settings_api_v1_characters__character_id__settings_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["memory"],"summary":"Update Memory Settings","description":"메모리 설정 업데이트","operationId":"update_memory_settings_api_v1_characters__character_id__settings_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Settings"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/preferences":{"get":{"tags":["memory"],"summary":"Get Memory Preferences","description":"메모리 선호도 조회","operationId":"get_memory_preferences_api_v1_characters__character_id__preferences_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["memory"],"summary":"Update Memory Preferences","description":"메모리 선호도 업데이트","operationId":"update_memory_preferences_api_v1_characters__character_id__preferences_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Preferences"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/cleanup":{"post":{"tags":["memory"],"summary":"Trigger Memory Cleanup","description":"메모리 정리 실행","operationId":"trigger_memory_cleanup_api_v1_characters__character_id__cleanup_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}},{"name":"force","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Force"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/characters-with-memory-stats":{"get":{"tags":["memory"],"summary":"Get Characters With Memory Stats","description":"모든 캐릭터의 메모리 통계를 한 번에 조회 (성능 최적화)\n\nN+1 문제 해결:\n- Before: 1 + (N × 2)번 API 호출\n- After: 1번 쿼리 (JOIN + 집계)\n- 성능: 17초 → 1-2초 (8-17배 빠름)","operationId":"get_characters_with_memory_stats_api_v1_characters_characters_with_memory_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"time_range","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"Days to analyze","default":7,"title":"Time Range"},"description":"Days to analyze"},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","description":"Include characters without memories","default":false,"title":"Include Inactive"},"description":"Include characters without memories"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memory/{character_id}/memories":{"get":{"tags":["memory-direct"],"summary":"Get Character Memories","description":"캐릭터의 메모리 조회 - 실제 데이터베이스에서 (소유자 전용)","operationId":"get_character_memories_api_v1_memory__character_id__memories_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MemoryResponse"},"title":"Response Get Character Memories Api V1 Memory  Character Id  Memories Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memory/{character_id}/favorites":{"get":{"tags":["memory-direct"],"summary":"Get Favorite Memories","description":"캐릭터의 즐겨찾기 메모리 조회 (소유자 전용)","operationId":"get_favorite_memories_api_v1_memory__character_id__favorites_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["memory-direct"],"summary":"Add Favorite Memory","description":"즐겨찾기 메모리 추가 (소유자 전용)","operationId":"add_favorite_memory_api_v1_memory__character_id__favorites_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Favorite Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memory/{character_id}/favorites/{favorite_id}":{"delete":{"tags":["memory-direct"],"summary":"Remove Favorite Memory","description":"즐겨찾기 메모리 제거 (소유자 전용)","operationId":"remove_favorite_memory_api_v1_memory__character_id__favorites__favorite_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}},{"name":"favorite_id","in":"path","required":true,"schema":{"type":"string","title":"Favorite Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memory/{character_id}/memory-statistics":{"get":{"tags":["memory-direct"],"summary":"Get Memory Statistics","description":"메모리 통계 조회","operationId":"get_memory_statistics_api_v1_memory__character_id__memory_statistics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memory/{character_id}/health":{"get":{"tags":["memory-direct"],"summary":"Get Memory Health Status","description":"메모리 시스템 건강 상태 조회","operationId":"get_memory_health_status_api_v1_memory__character_id__health_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memory/{character_id}/settings":{"get":{"tags":["memory-direct"],"summary":"Get Memory Settings","description":"메모리 설정 조회","operationId":"get_memory_settings_api_v1_memory__character_id__settings_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["memory-direct"],"summary":"Update Memory Settings","description":"메모리 설정 업데이트","operationId":"update_memory_settings_api_v1_memory__character_id__settings_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Settings"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memory/{character_id}/preferences":{"get":{"tags":["memory-direct"],"summary":"Get Memory Preferences","description":"메모리 선호도 조회","operationId":"get_memory_preferences_api_v1_memory__character_id__preferences_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["memory-direct"],"summary":"Update Memory Preferences","description":"메모리 선호도 업데이트","operationId":"update_memory_preferences_api_v1_memory__character_id__preferences_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Preferences"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memory/{character_id}/cleanup":{"post":{"tags":["memory-direct"],"summary":"Trigger Memory Cleanup","description":"메모리 정리 실행","operationId":"trigger_memory_cleanup_api_v1_memory__character_id__cleanup_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}},{"name":"force","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Force"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memory/characters-with-memory-stats":{"get":{"tags":["memory-direct"],"summary":"Get Characters With Memory Stats","description":"모든 캐릭터의 메모리 통계를 한 번에 조회 (성능 최적화)\n\nN+1 문제 해결:\n- Before: 1 + (N × 2)번 API 호출\n- After: 1번 쿼리 (JOIN + 집계)\n- 성능: 17초 → 1-2초 (8-17배 빠름)","operationId":"get_characters_with_memory_stats_api_v1_memory_characters_with_memory_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"time_range","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"Days to analyze","default":7,"title":"Time Range"},"description":"Days to analyze"},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","description":"Include characters without memories","default":false,"title":"Include Inactive"},"description":"Include characters without memories"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memory-settings/global/settings":{"get":{"tags":["memory-settings"],"summary":"Get Global Memory Settings","description":"전역 메모리 설정 조회 (슈퍼관리자만)","operationId":"get_global_memory_settings_api_v1_memory_settings_global_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalMemorySettingsResponse"}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["memory-settings"],"summary":"Update Global Memory Settings","description":"전역 메모리 설정 업데이트 (슈퍼관리자만)","operationId":"update_global_memory_settings_api_v1_memory_settings_global_settings_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalMemorySettingsUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalMemorySettingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/memory-settings/global/system-metrics":{"get":{"tags":["memory-settings"],"summary":"Get System Memory Metrics","description":"시스템 전체 메모리 메트릭","operationId":"get_system_memory_metrics_api_v1_memory_settings_global_system_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/memory-settings/{character_id}/settings":{"get":{"tags":["memory-settings"],"summary":"Get Character Memory Settings","description":"캐릭터 메모리 설정 조회","operationId":"get_character_memory_settings_api_v1_memory_settings__character_id__settings_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterMemorySettingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["memory-settings"],"summary":"Update Character Memory Settings","description":"캐릭터 메모리 설정 업데이트 (캐릭터 생성자만 가능)","operationId":"update_character_memory_settings_api_v1_memory_settings__character_id__settings_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterMemorySettingsUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterMemorySettingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memory-settings/{character_id}/settings/reset":{"post":{"tags":["memory-settings"],"summary":"Reset Character Memory Settings","description":"캐릭터 메모리 설정 초기화","operationId":"reset_character_memory_settings_api_v1_memory_settings__character_id__settings_reset_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memory-settings/{character_id}/preferences":{"get":{"tags":["memory-settings"],"summary":"Get User Memory Preferences","description":"사용자별 메모리 선호도 조회","operationId":"get_user_memory_preferences_api_v1_memory_settings__character_id__preferences_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserMemoryPreferencesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["memory-settings"],"summary":"Update User Memory Preferences","description":"사용자별 메모리 선호도 업데이트","operationId":"update_user_memory_preferences_api_v1_memory_settings__character_id__preferences_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserMemoryPreferencesUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserMemoryPreferencesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memory-settings/{character_id}/statistics":{"get":{"tags":["memory-settings"],"summary":"Get Memory Statistics","description":"메모리 통계 조회","operationId":"get_memory_statistics_api_v1_memory_settings__character_id__statistics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memory-settings/{character_id}/cleanup":{"post":{"tags":["memory-settings"],"summary":"Trigger Memory Cleanup","description":"메모리 정리 작업 트리거 (캐릭터 생성자만)","operationId":"trigger_memory_cleanup_api_v1_memory_settings__character_id__cleanup_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"force","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Force"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memory-settings/{character_id}/health":{"get":{"tags":["memory-settings"],"summary":"Get Memory Health Status","description":"메모리 시스템 건강 상태 조회","operationId":"get_memory_health_status_api_v1_memory_settings__character_id__health_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memory-settings/bulk/characters-with-stats":{"get":{"tags":["memory-settings"],"summary":"Get Characters With Memory Stats","description":"모든 캐릭터의 메모리 통계를 한 번에 조회 (N+1 문제 해결)\n\nBefore: 1 + (N × 2) = 201번 API 호출 (100개 캐릭터)\nAfter: 1번 API 호출","operationId":"get_characters_with_memory_stats_api_v1_memory_settings_bulk_characters_with_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"time_range","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":7,"title":"Time Range"}},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Inactive"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memory-settings/global/batch-operations/consolidation":{"post":{"tags":["memory-settings"],"summary":"Trigger Global Memory Consolidation","description":"전역 메모리 통합 작업 실행","operationId":"trigger_global_memory_consolidation_api_v1_memory_settings_global_batch_operations_consolidation_post","requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Character Ids"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/memory-settings/global/batch-operations/retention-update":{"post":{"tags":["memory-settings"],"summary":"Trigger Global Retention Update","description":"전역 메모리 보존 상태 업데이트","operationId":"trigger_global_retention_update_api_v1_memory_settings_global_batch_operations_retention_update_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/memory-settings/{character_id}/settings/user":{"get":{"tags":["memory-settings"],"summary":"Get User Memory Settings Override","description":"구매자의 개인 메모리 설정 조회\n- 구매자 본인의 오버라이드 설정\n- 실제 적용될 병합된 설정값도 함께 반환","operationId":"get_user_memory_settings_override_api_v1_memory_settings__character_id__settings_user_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserMemorySettingsOverrideResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["memory-settings"],"summary":"Update User Memory Settings Override","description":"구매자의 개인 메모리 설정 업데이트\n- 구매한 캐릭터에 대해서만 설정 가능\n- 소유자 설정을 기본값으로 사용하고, 오버라이드할 값만 저장","operationId":"update_user_memory_settings_override_api_v1_memory_settings__character_id__settings_user_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserMemorySettingsOverrideUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserMemorySettingsOverrideResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["memory-settings"],"summary":"Reset User Memory Settings Override","description":"구매자의 개인 메모리 설정 초기화\n- 모든 오버라이드를 삭제하고 소유자 설정으로 복원","operationId":"reset_user_memory_settings_override_api_v1_memory_settings__character_id__settings_user_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/enhanced-memory/{character_id}/session-memories":{"get":{"tags":["enhanced-memory"],"summary":"Get Session Memories","description":"현재 세션의 메모리 조회","operationId":"get_session_memories_api_v1_enhanced_memory__character_id__session_memories_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"session_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Session Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SessionMemoryResponse"},"title":"Response Get Session Memories Api V1 Enhanced Memory  Character Id  Session Memories Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/enhanced-memory/{character_id}/conversation-memories":{"get":{"tags":["enhanced-memory"],"summary":"Get Conversation Memories","description":"RAG DB 저장된 중요 대화 메모리 조회","operationId":"get_conversation_memories_api_v1_enhanced_memory__character_id__conversation_memories_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"importance_level","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Importance Level"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ConversationMemoryResponse"},"title":"Response Get Conversation Memories Api V1 Enhanced Memory  Character Id  Conversation Memories Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/enhanced-memory/{character_id}/search":{"post":{"tags":["enhanced-memory"],"summary":"Search Memories","description":"세션 우선 메모리 통합 검색","operationId":"search_memories_api_v1_enhanced_memory__character_id__search_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemorySearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemorySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/enhanced-memory/{character_id}/favorites":{"get":{"tags":["enhanced-memory"],"summary":"Get Favorite Memories","description":"찜한 기억들 조회","operationId":"get_favorite_memories_api_v1_enhanced_memory__character_id__favorites_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"favorite_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Favorite Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FavoriteMemoryResponse"},"title":"Response Get Favorite Memories Api V1 Enhanced Memory  Character Id  Favorites Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["enhanced-memory"],"summary":"Create Favorite","description":"새로운 찜하기 생성","operationId":"create_favorite_api_v1_enhanced_memory__character_id__favorites_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFavoriteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FavoriteMemoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/enhanced-memory/{character_id}/favorites/{favorite_id}":{"delete":{"tags":["enhanced-memory"],"summary":"Delete Favorite","description":"찜하기 삭제","operationId":"delete_favorite_api_v1_enhanced_memory__character_id__favorites__favorite_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"favorite_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Favorite Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/enhanced-memory/{character_id}/favorites/{favorite_id}/reminisce":{"post":{"tags":["enhanced-memory"],"summary":"Trigger Reminiscence","description":"회상 트리거","operationId":"trigger_reminiscence_api_v1_enhanced_memory__character_id__favorites__favorite_id__reminisce_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"favorite_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Favorite Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReminiscenceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/enhanced-memory/{character_id}/reminiscence-suggestions":{"get":{"tags":["enhanced-memory"],"summary":"Get Reminiscence Suggestions","description":"회상 가능한 기억들 추천","operationId":"get_reminiscence_suggestions_api_v1_enhanced_memory__character_id__reminiscence_suggestions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"context","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10,"default":5,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FavoriteMemoryResponse"},"title":"Response Get Reminiscence Suggestions Api V1 Enhanced Memory  Character Id  Reminiscence Suggestions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/enhanced-memory/{character_id}/detect-important":{"post":{"tags":["enhanced-memory"],"summary":"Detect Important Conversation","description":"중요 대화 자동 감지 및 RAG 저장","operationId":"detect_important_conversation_api_v1_enhanced_memory__character_id__detect_important_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"session_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/enhanced-memory/{character_id}/memory-stats":{"get":{"tags":["enhanced-memory"],"summary":"Get Memory Statistics","description":"메모리 통계 정보","operationId":"get_memory_statistics_api_v1_enhanced_memory__character_id__memory_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/enhanced-memory/{character_id}/consolidate-session":{"post":{"tags":["enhanced-memory"],"summary":"Consolidate Session Memories","description":"세션 메모리 통합 및 RAG 승격","operationId":"consolidate_session_memories_api_v1_enhanced_memory__character_id__consolidate_session_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"session_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/enhanced-memory/{character_id}/conversation-memories/{memory_id}/feedback":{"put":{"tags":["enhanced-memory"],"summary":"Update Memory Feedback","description":"메모리 유효성 피드백 업데이트","operationId":"update_memory_feedback_api_v1_enhanced_memory__character_id__conversation_memories__memory_id__feedback_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}},{"name":"effectiveness_score","in":"query","required":true,"schema":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Effectiveness Score"}},{"name":"was_helpful","in":"query","required":true,"schema":{"type":"boolean","title":"Was Helpful"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/api-keys/":{"get":{"tags":["api-keys"],"summary":"Get Api Keys","operationId":"get_api_keys_api_v1_api_keys__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/app__schemas__user__apikey__APIKeyResponse"},"type":"array","title":"Response Get Api Keys Api V1 Api Keys  Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["api-keys"],"summary":"Create Api Key","operationId":"create_api_key_api_v1_api_keys__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKeyCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__user__apikey__APIKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/api-keys/{api_key_id}":{"delete":{"tags":["api-keys"],"summary":"Delete Api Key","operationId":"delete_api_key_api_v1_api_keys__api_key_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Api Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/api-keys/{api_key_id}/rotate":{"post":{"tags":["api-keys"],"summary":"Rotate Api Key","description":"API 키 로테이션\n\n새로운 키를 생성하고, 이전 키는 grace_period_hours 동안 유효합니다.\n응답에 포함된 new_key는 이 시점에만 확인 가능합니다.","operationId":"rotate_api_key_api_v1_api_keys__api_key_id__rotate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Api Key Id"}},{"name":"grace_period_hours","in":"query","required":false,"schema":{"type":"integer","default":24,"title":"Grace Period Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/api-keys/{api_key_id}/rotation-interval":{"put":{"tags":["api-keys"],"summary":"Set Rotation Interval","description":"API 키 로테이션 주기 설정\n\nArgs:\n    interval_days: 로테이션 주기 (일). 0 또는 음수면 자동 로테이션 비활성화","operationId":"set_rotation_interval_api_v1_api_keys__api_key_id__rotation_interval_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Api Key Id"}},{"name":"interval_days","in":"query","required":true,"schema":{"type":"integer","title":"Interval Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/api-keys/{api_key_id}/rotation-status":{"get":{"tags":["api-keys"],"summary":"Get Rotation Status","description":"API 키 로테이션 상태 조회","operationId":"get_rotation_status_api_v1_api_keys__api_key_id__rotation_status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Api Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/plans":{"get":{"tags":["billing"],"summary":"Get Subscription Plans","description":"구독 플랜 목록 조회","operationId":"get_subscription_plans_api_v1_billing_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PlanResponse"},"type":"array","title":"Response Get Subscription Plans Api V1 Billing Plans Get"}}}}}}},"/api/v1/billing/subscribe/free":{"post":{"tags":["billing"],"summary":"Subscribe Free Plan","description":"무료 플랜 구독 (결제 없이 즉시 활성화)","operationId":"subscribe_free_plan_api_v1_billing_subscribe_free_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreePlanSubscribeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/billing/checkout/subscription":{"post":{"tags":["billing"],"summary":"Create Subscription Checkout","description":"구독 결제 체크아웃 세션 생성","operationId":"create_subscription_checkout_api_v1_billing_checkout_subscription_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/billing/checkout/credits":{"post":{"tags":["billing"],"summary":"Create Credit Checkout","description":"크레딧 충전 체크아웃 세션 생성 - Stripe 또는 PayPal 선택 가능","operationId":"create_credit_checkout_api_v1_billing_checkout_credits_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditCheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/billing/paypal/execute":{"get":{"tags":["billing"],"summary":"Execute Paypal Payment","description":"PayPal 결제 완료 처리","operationId":"execute_paypal_payment_api_v1_billing_paypal_execute_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"paymentId","in":"query","required":true,"schema":{"type":"string","title":"Paymentid"}},{"name":"PayerID","in":"query","required":true,"schema":{"type":"string","title":"Payerid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/webhook":{"post":{"tags":["billing"],"summary":"Stripe Webhook","description":"Stripe 웹훅 처리 — Stripe-Signature 헤더 HMAC 검증 필수.","operationId":"stripe_webhook_api_v1_billing_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/billing/subscription":{"get":{"tags":["billing"],"summary":"Get Current Subscription","description":"현재 사용자의 구독 정보 조회","operationId":"get_current_subscription_api_v1_billing_subscription_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"delete":{"tags":["billing"],"summary":"Cancel Subscription","description":"구독 취소","operationId":"cancel_subscription_api_v1_billing_subscription_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/billing/usage":{"get":{"tags":["billing"],"summary":"Get Usage History","description":"사용량 기록 조회","operationId":"get_usage_history_api_v1_billing_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/UsageResponse"},"type":"array","title":"Response Get Usage History Api V1 Billing Usage Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/billing/balance":{"get":{"tags":["billing"],"summary":"Get Balance","description":"잔액 조회 - /credits alias","operationId":"get_balance_api_v1_billing_balance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/billing/credits":{"get":{"tags":["billing"],"summary":"Get Credits Balance","description":"크레딧 잔액 조회","operationId":"get_credits_balance_api_v1_billing_credits_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditsResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/billing/quota-usage":{"get":{"tags":["billing"],"summary":"Get Quota Usage","description":"구독 플랜 할당량 및 사용량 조회","operationId":"get_quota_usage_api_v1_billing_quota_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/billing/refund":{"post":{"tags":["billing"],"summary":"Request Refund","description":"결제 환불 요청.\n\n- 한국: 전자상거래법 §17 청약철회 (디지털콘텐츠 미이용 한정)\n- 일본: 特定商取引法 + 当社返品ポリシー (未使用かつ7日以内のサブスクリプション)\n\nStripe payment_intent_id 또는 charge_id 기준으로 즉시 환불을 시도하고,\n결과를 반환합니다. 부분 환불 시 amount 지정.","operationId":"request_refund_api_v1_billing_refund_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefundRequestBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/billing/usage-stats":{"get":{"tags":["billing"],"summary":"Get Usage Stats","description":"사용량 통계 조회","operationId":"get_usage_stats_api_v1_billing_usage_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/invoices":{"get":{"tags":["billing"],"summary":"Get Invoices","description":"청구서 목록 조회","operationId":"get_invoices_api_v1_billing_invoices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/billing/payment-methods":{"get":{"tags":["billing"],"summary":"Get Payment Methods","description":"등록된 결제 수단 목록 조회","operationId":"get_payment_methods_api_v1_billing_payment_methods_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/billing/admin/usage/summary":{"get":{"tags":["billing"],"summary":"Get Usage Summary","description":"전체 사용량 요약 (관리자 전용)","operationId":"get_usage_summary_api_v1_billing_admin_usage_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/billing/admin/revenue":{"get":{"tags":["billing"],"summary":"Get Revenue Stats","description":"수익 통계 (관리자 전용)","operationId":"get_revenue_stats_api_v1_billing_admin_revenue_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/pricing/plans":{"get":{"tags":["pricing"],"summary":"Get Pricing Plans","description":"요금제 목록 조회 (공개)\n\n/billing/plans의 별칭으로, 동일한 데이터를 반환합니다.\n캐시: 1시간 (요금제는 자주 변경되지 않음)","operationId":"get_pricing_plans_api_v1_pricing_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/pricing/packages":{"get":{"tags":["pricing"],"summary":"Get Credit Packages","description":"크레딧 패키지 목록 조회 (공개)\n\n인증 불필요 - 누구나 볼 수 있는 크레딧 패키지 정보\n캐시: 1시간","operationId":"get_credit_packages_api_v1_pricing_packages_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/backup/backups":{"get":{"tags":["admin","Admin - Backup & Restore"],"summary":"Get Backups","description":"백업 목록 조회","operationId":"get_backups_api_v1_admin_backup_backups_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Backups Api V1 Admin Backup Backups Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["admin","Admin - Backup & Restore"],"summary":"Create Backup","description":"새 백업 생성","operationId":"create_backup_api_v1_admin_backup_backups_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackupCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Backup Api V1 Admin Backup Backups Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/backup/backups/{backup_id}":{"delete":{"tags":["admin","Admin - Backup & Restore"],"summary":"Delete Backup","description":"백업 삭제","operationId":"delete_backup_api_v1_admin_backup_backups__backup_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"backup_id","in":"path","required":true,"schema":{"type":"string","title":"Backup Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Backup Api V1 Admin Backup Backups  Backup Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/backup/restore":{"post":{"tags":["admin","Admin - Backup & Restore"],"summary":"Restore Backup","description":"백업 복원","operationId":"restore_backup_api_v1_admin_backup_restore_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestoreRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Restore Backup Api V1 Admin Backup Restore Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/backup/backups/{backup_id}/info":{"get":{"tags":["admin","Admin - Backup & Restore"],"summary":"Get Backup Info","description":"백업 상세 정보 조회","operationId":"get_backup_info_api_v1_admin_backup_backups__backup_id__info_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"backup_id","in":"path","required":true,"schema":{"type":"string","title":"Backup Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Backup Info Api V1 Admin Backup Backups  Backup Id  Info Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/backup/test-backup":{"post":{"tags":["admin","Admin - Backup & Restore"],"summary":"Test Backup System","description":"백업 시스템 테스트","operationId":"test_backup_system_api_v1_admin_backup_test_backup_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Test Backup System Api V1 Admin Backup Test Backup Post"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/backup/storage-info":{"get":{"tags":["admin","Admin - Backup & Restore"],"summary":"Get Storage Info","description":"백업 저장소 정보 조회","operationId":"get_storage_info_api_v1_admin_backup_storage_info_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Storage Info Api V1 Admin Backup Storage Info Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/backup/schedule-backup":{"post":{"tags":["admin","Admin - Backup & Restore"],"summary":"Schedule Backup","description":"백업 스케줄 설정","operationId":"schedule_backup_api_v1_admin_backup_schedule_backup_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Schedule Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Schedule Backup Api V1 Admin Backup Schedule Backup Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/backup/backup-history":{"get":{"tags":["admin","Admin - Backup & Restore"],"summary":"Get Backup History","description":"백업 히스토리 조회","operationId":"get_backup_history_api_v1_admin_backup_backup_history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Backup History Api V1 Admin Backup Backup History Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/health/comprehensive":{"get":{"tags":["admin","Admin - System"],"summary":"Get Comprehensive Health","description":"종합 헬스체크 (관리자 전용)","operationId":"get_comprehensive_health_api_v1_admin_health_comprehensive_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/metrics/system":{"get":{"tags":["admin","Admin - System"],"summary":"Get System Metrics Endpoint","description":"시스템 메트릭 조회 (관리자 전용)","operationId":"get_system_metrics_endpoint_api_v1_admin_metrics_system_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/metrics/usage":{"get":{"tags":["admin","Admin - System"],"summary":"Get Usage Metrics","description":"사용량 메트릭 조회 (관리자 전용)","operationId":"get_usage_metrics_api_v1_admin_metrics_usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"YYYY-MM-DD 형식, 기본값: 오늘","title":"Date"},"description":"YYYY-MM-DD 형식, 기본값: 오늘"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/database/status":{"get":{"tags":["admin","Admin - System"],"summary":"Get Database Status","description":"데이터베이스 상태 조회 (관리자 전용)","operationId":"get_database_status_api_v1_admin_database_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/overview":{"get":{"tags":["admin","Admin - System"],"summary":"Get System Overview","description":"시스템 운영 개요 (관리자 전용)","operationId":"get_system_overview_api_v1_admin_overview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/announcements":{"get":{"tags":["admin","Admin - System"],"summary":"Get Announcements","description":"공지사항 목록 조회 (관리자 전용)","operationId":"get_announcements_api_v1_admin_announcements_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","description":"활성 공지사항만 조회","default":true,"title":"Active Only"},"description":"활성 공지사항만 조회"},{"name":"announcement_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"공지사항 타입","title":"Announcement Type"},"description":"공지사항 타입"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/api/overview":{"get":{"tags":["admin","Admin - System"],"summary":"Get Api Overview","description":"API 연동 개요 (관리자 전용)","operationId":"get_api_overview_api_v1_admin_api_overview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/api/external-services/health":{"get":{"tags":["admin","Admin - System"],"summary":"Check External Services Health","description":"외부 서비스 상태 확인 (관리자 전용)","operationId":"check_external_services_health_api_v1_admin_api_external_services_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/api/keys":{"get":{"tags":["admin","Admin - System"],"summary":"Get Api Keys List","description":"API 키 목록 조회 (관리자 전용)","operationId":"get_api_keys_list_api_v1_admin_api_keys_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"특정 사용자의 키만 조회","title":"User Id"},"description":"특정 사용자의 키만 조회"},{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","description":"활성 키만 조회","default":true,"title":"Active Only"},"description":"활성 키만 조회"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin","Admin - System"],"summary":"Create Api Key","description":"API 키 생성 (관리자 전용)","operationId":"create_api_key_api_v1_admin_api_keys_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAPIKeyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/api/keys/{key_id}":{"delete":{"tags":["admin","Admin - System"],"summary":"Revoke Api Key","description":"API 키 취소 (관리자 전용)\n\n- APIIntegrationService 는 AsyncSession 전용인데 예전엔 이 엔드포인트가 sync 로 선언돼\n  코루틴을 await 없이 받았다. 코루틴은 항상 truthy 라 없는 키에도 200 \"취소되었습니다\"\n  를 돌려주고 실제로는 아무것도 취소하지 않았다.\n- operation_id 를 명시하는 이유: 경로 정규화가 `/admin/api/keys/{id}` 와\n  `/admin/api-keys/{id}` 를 같은 이름으로 만들어 OpenAPI operationId 가 충돌한다.","operationId":"admin_revoke_integration_api_key","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/security/dashboard":{"get":{"tags":["admin","Admin - System"],"summary":"Get Security Dashboard","description":"보안 대시보드 (관리자 전용)","operationId":"get_security_dashboard_api_v1_admin_security_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/security/audit":{"post":{"tags":["admin","Admin - System"],"summary":"Perform Security Audit","description":"보안 감사 수행 (관리자 전용)","operationId":"perform_security_audit_api_v1_admin_security_audit_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"audit_type","in":"query","required":false,"schema":{"type":"string","description":"감사 타입","default":"comprehensive","title":"Audit Type"},"description":"감사 타입"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/security/compliance-report":{"get":{"tags":["admin","Admin - System"],"summary":"Get Compliance Report","description":"컴플라이언스 리포트 (관리자 전용)","operationId":"get_compliance_report_api_v1_admin_security_compliance_report_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/performance/dashboard":{"get":{"tags":["admin","Admin - System"],"summary":"Get Performance Dashboard","description":"성능 대시보드 (관리자 전용)","operationId":"get_performance_dashboard_api_v1_admin_performance_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/performance/trends":{"get":{"tags":["admin","Admin - System"],"summary":"Get Performance Trends","description":"성능 트렌드 분석 (관리자 전용)","operationId":"get_performance_trends_api_v1_admin_performance_trends_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"description":"분석 기간 (일)","default":7,"title":"Days"},"description":"분석 기간 (일)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/performance/optimization-job":{"post":{"tags":["admin","Admin - System"],"summary":"Create Optimization Job","description":"최적화 작업 생성 (관리자 전용)","operationId":"create_optimization_job_api_v1_admin_performance_optimization_job_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOptimizationJobRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/performance/report":{"get":{"tags":["admin","Admin - System"],"summary":"Generate Performance Report","description":"종합 성능 리포트 (관리자 전용)","operationId":"generate_performance_report_api_v1_admin_performance_report_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/logs":{"get":{"tags":["admin","Admin - System"],"summary":"Get Recent Logs","description":"최근 로그 조회 (관리자 전용)","operationId":"get_recent_logs_api_v1_admin_logs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":24,"minimum":1,"description":"최근 몇 시간의 로그 (1-24)","default":24,"title":"Hours"},"description":"최근 몇 시간의 로그 (1-24)"},{"name":"level","in":"query","required":false,"schema":{"type":"string","description":"로그 레벨 (DEBUG, INFO, WARNING, ERROR)","default":"ERROR","title":"Level"},"description":"로그 레벨 (DEBUG, INFO, WARNING, ERROR)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"로그 최대 개수","default":50,"title":"Limit"},"description":"로그 최대 개수"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/logs/recent":{"get":{"tags":["admin","Admin - System"],"summary":"Get Recent Logs","description":"최근 로그 조회 (관리자 전용)","operationId":"get_recent_logs_api_v1_admin_logs_recent_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":24,"minimum":1,"description":"최근 몇 시간의 로그 (1-24)","default":24,"title":"Hours"},"description":"최근 몇 시간의 로그 (1-24)"},{"name":"level","in":"query","required":false,"schema":{"type":"string","description":"로그 레벨 (DEBUG, INFO, WARNING, ERROR)","default":"ERROR","title":"Level"},"description":"로그 레벨 (DEBUG, INFO, WARNING, ERROR)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"로그 최대 개수","default":50,"title":"Limit"},"description":"로그 최대 개수"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/system":{"get":{"tags":["admin","Admin - System"],"summary":"Get System Status","description":"시스템 운영 상태 조회 (API 테스트 호환)","operationId":"get_system_status_api_v1_admin_system_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/database":{"get":{"tags":["admin","Admin - System"],"summary":"Get Database Info","description":"데이터베이스 관리 (API 테스트 호환)","operationId":"get_database_info_api_v1_admin_database_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/ai-cost":{"get":{"tags":["admin","Admin - System"],"summary":"Get Ai Cost Management","description":"AI 비용 관리 (API 테스트 호환)","operationId":"get_ai_cost_management_api_v1_admin_ai_cost_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/pricing":{"get":{"tags":["admin","Admin - System"],"summary":"Get Pricing Management","description":"과금 체계 관리 (API 테스트 호환)","operationId":"get_pricing_management_api_v1_admin_pricing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/analytics/user-behavior":{"get":{"tags":["admin","Admin - Analytics"],"summary":"Get User Behavior Analytics","description":"사용자 행동 분석 데이터 조회","operationId":"get_user_behavior_analytics_api_v1_admin_analytics_user_behavior_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"특정 사용자 ID (없으면 전체 분석)","title":"User Id"},"description":"특정 사용자 ID (없으면 전체 분석)"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"분석 기간 (일)","default":30,"title":"Days"},"description":"분석 기간 (일)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get User Behavior Analytics Api V1 Admin Analytics User Behavior Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/analytics/content-analytics":{"get":{"tags":["admin","Admin - Analytics"],"summary":"Get Content Analytics","description":"콘텐츠 분석 데이터 조회","operationId":"get_content_analytics_api_v1_admin_analytics_content_analytics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"분석 기간 (일)","default":30,"title":"Days"},"description":"분석 기간 (일)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Content Analytics Api V1 Admin Analytics Content Analytics Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/analytics/performance-analytics":{"get":{"tags":["admin","Admin - Analytics"],"summary":"Get Performance Analytics","description":"성능 분석 데이터 조회","operationId":"get_performance_analytics_api_v1_admin_analytics_performance_analytics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":720,"minimum":1,"description":"분석 기간 (시간)","default":24,"title":"Hours"},"description":"분석 기간 (시간)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Performance Analytics Api V1 Admin Analytics Performance Analytics Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/analytics/business-metrics":{"get":{"tags":["admin","Admin - Analytics"],"summary":"Get Business Metrics","description":"비즈니스 메트릭 조회","operationId":"get_business_metrics_api_v1_admin_analytics_business_metrics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"분석 기간 (일)","default":30,"title":"Days"},"description":"분석 기간 (일)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Business Metrics Api V1 Admin Analytics Business Metrics Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/analytics/advanced-insights":{"get":{"tags":["admin","Admin - Analytics"],"summary":"Get Advanced Insights","description":"고급 인사이트 조회","operationId":"get_advanced_insights_api_v1_admin_analytics_advanced_insights_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"분석 기간 (일)","default":30,"title":"Days"},"description":"분석 기간 (일)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Advanced Insights Api V1 Admin Analytics Advanced Insights Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/analytics/real-time-metrics":{"get":{"tags":["admin","Admin - Analytics"],"summary":"Get Real Time Metrics","description":"실시간 메트릭 조회 (15초 캐시 — 다중 관리자 폴링 부하 흡수)","operationId":"get_real_time_metrics_api_v1_admin_analytics_real_time_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Real Time Metrics Api V1 Admin Analytics Real Time Metrics Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/analytics/dashboard-summary":{"get":{"tags":["admin","Admin - Analytics"],"summary":"Get Analytics Dashboard Summary","description":"분석 대시보드 요약 정보 조회 (캐싱 적용)","operationId":"get_analytics_dashboard_summary_api_v1_admin_analytics_dashboard_summary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"description":"요약 기간 (일)","default":7,"title":"Days"},"description":"요약 기간 (일)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Analytics Dashboard Summary Api V1 Admin Analytics Dashboard Summary Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/analytics/export-report":{"get":{"tags":["admin","Admin - Analytics"],"summary":"Export Analytics Report","description":"분석 리포트 내보내기","operationId":"export_analytics_report_api_v1_admin_analytics_export_report_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"리포트 기간 (일)","default":30,"title":"Days"},"description":"리포트 기간 (일)"},{"name":"format","in":"query","required":false,"schema":{"type":"string","pattern":"^(json|csv)$","description":"리포트 형식","default":"json","title":"Format"},"description":"리포트 형식"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Export Analytics Report Api V1 Admin Analytics Export Report Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/analytics/custom-query":{"post":{"tags":["admin","Admin - Analytics"],"summary":"Run Custom Analytics Query","description":"사용자 정의 분석 쿼리 실행","operationId":"run_custom_analytics_query_api_v1_admin_analytics_custom_query_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Query Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Run Custom Analytics Query Api V1 Admin Analytics Custom Query Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/characters/":{"post":{"tags":["admin","Admin - Characters"],"summary":"Admin Create Character","description":"슈퍼유저 전용: 임의 유저 명의로 캐릭터 생성 + 정책 우회.\n\n공개 `POST /characters/`는 모든 인증 사용자에게 동일한 모더레이션/레이트리밋을\n강제한다. 운영자가 시드 데이터, 도메인 KB 임포트, 긴급 패치를 위해\n우회가 필요한 경우 이 엔드포인트를 사용한다 — 모든 우회는 감사 기록된다.","operationId":"admin_create_character_api_v1_admin_characters__post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminCharacterCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["admin","Admin - Characters"],"summary":"Admin Get All Characters","description":"모든 캐릭터 조회 (관리자)","operationId":"admin_get_all_characters_api_v1_admin_characters__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"페이지 번호","default":1,"title":"Page"},"description":"페이지 번호"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"페이지당 항목 수","default":20,"title":"Limit"},"description":"페이지당 항목 수"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"검색어 (이름, 설명)","title":"Search"},"description":"검색어 (이름, 설명)"},{"name":"require_mfa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Require Mfa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/characters/{character_id}/royalty":{"put":{"tags":["admin","Admin - Characters"],"summary":"Negotiate Creator Royalty","description":"캐릭터별 제작자 로열티 비율 협상 (IP 라이선스 캐릭터 등).\n\n변경 사항:\n  - 즉시 적용되지 않고 다음 정산 주기부터 적용 (현재 주기는 기존 비율)\n  - audit_log에 이전값/새값/사유 모두 기록\n  - notes 필수 (사유 없는 변경 차단)","operationId":"negotiate_creator_royalty_api_v1_admin_characters__character_id__royalty_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoyaltyNegotiationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["admin","Admin - Characters"],"summary":"Get Creator Royalty","description":"현재 적용 중인 로열티 비율 + 협상 메타 조회.","operationId":"get_creator_royalty_api_v1_admin_characters__character_id__royalty_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/characters/{character_id}/subscribers":{"get":{"tags":["admin","Admin - Characters"],"summary":"List Character Subscribers","description":"캐릭터별 활성 구독자 + MRR + 한도 사용률.","operationId":"list_character_subscribers_api_v1_admin_characters__character_id__subscribers_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/characters/{character_id}/subscriptions":{"post":{"tags":["admin","Admin - Characters"],"summary":"Grant Subscription","description":"슈퍼유저가 사용자에게 직접 구독 부여 (운영 보상, VIP, 베타 액세스 등).","operationId":"grant_subscription_api_v1_admin_characters__character_id__subscriptions_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantSubscriptionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/characters/subscriptions/{subscription_id}":{"delete":{"tags":["admin","Admin - Characters"],"summary":"Revoke Subscription","description":"구독 즉시 취소 (운영 사유 — 환불, 위반, 분쟁 등).","operationId":"revoke_subscription_api_v1_admin_characters_subscriptions__subscription_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Subscription Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevokeSubscriptionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/characters/_dashboard/csat":{"get":{"tags":["admin","Admin - Characters"],"summary":"Csat Dashboard","description":"위젯 CSAT(별점) 전체 집계 — 캐릭터별 분포, 평균, 최근 코멘트.","operationId":"csat_dashboard_api_v1_admin_characters__dashboard_csat_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/characters/_dashboard/subscriptions":{"get":{"tags":["admin","Admin - Characters"],"summary":"All Subscriptions Dashboard","description":"전체 구독 목록 (운영용). status 필터 가능.","operationId":"all_subscriptions_dashboard_api_v1_admin_characters__dashboard_subscriptions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"active","title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/characters/{character_id}":{"get":{"tags":["admin","Admin - Characters"],"summary":"Admin Get Character Detail","description":"캐릭터 상세 정보 조회 (관리자)","operationId":"admin_get_character_detail_api_v1_admin_characters__character_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"require_mfa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Require Mfa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["admin","Admin - Characters"],"summary":"Admin Update Character","description":"캐릭터 관리자 설정 업데이트","operationId":"admin_update_character_api_v1_admin_characters__character_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"require_mfa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Require Mfa"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterAdminUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin","Admin - Characters"],"summary":"Admin Delete Character","description":"캐릭터 삭제 (관리자)","operationId":"admin_delete_character_api_v1_admin_characters__character_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"require_mfa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Require Mfa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/characters/{character_id}/approve":{"post":{"tags":["admin","Admin - Characters"],"summary":"Admin Approve Character","description":"캐릭터 승인 (관리자)","operationId":"admin_approve_character_api_v1_admin_characters__character_id__approve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"require_mfa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Require Mfa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/characters/{character_id}/reject":{"post":{"tags":["admin","Admin - Characters"],"summary":"Admin Reject Character","description":"캐릭터 거부 (관리자)","operationId":"admin_reject_character_api_v1_admin_characters__character_id__reject_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"require_mfa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Require Mfa"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterRejectRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/characters/{character_id}/knowledge":{"get":{"tags":["admin","Admin - Characters"],"summary":"Admin Get Character Knowledge","description":"캐릭터 지식베이스 조회 (관리자)","operationId":"admin_get_character_knowledge_api_v1_admin_characters__character_id__knowledge_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"require_mfa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Require Mfa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/system-health/":{"get":{"tags":["admin","Admin - System Health"],"summary":"Get System Health Root","description":"시스템 헬스 체크 루트 - /health와 동일","operationId":"get_system_health_root_api_v1_admin_system_health__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/system-health":{"get":{"tags":["admin","Admin - System Health"],"summary":"Get System Health Root","description":"시스템 헬스 체크 루트 - /health와 동일","operationId":"get_system_health_root_api_v1_admin_system_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/system-health/health":{"get":{"tags":["admin","Admin - System Health"],"summary":"Get System Health","description":"전체 시스템 헬스 체크","operationId":"get_system_health_api_v1_admin_system_health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/system-health/metrics":{"get":{"tags":["admin","Admin - System Health"],"summary":"Get System Metrics","description":"시스템 메트릭 조회","operationId":"get_system_metrics_api_v1_admin_system_health_metrics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","default":24,"title":"Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/system-health/alerts":{"get":{"tags":["admin","Admin - System Health"],"summary":"Get Active Alerts","description":"활성 알림 목록","operationId":"get_active_alerts_api_v1_admin_system_health_alerts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/system-health/alerts/{alert_id}/acknowledge":{"post":{"tags":["admin","Admin - System Health"],"summary":"Acknowledge Alert","description":"알림 확인 처리","operationId":"acknowledge_alert_api_v1_admin_system_health_alerts__alert_id__acknowledge_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/system-health/alerts/{alert_id}/resolve":{"post":{"tags":["admin","Admin - System Health"],"summary":"Resolve Alert","description":"알림 해결 처리","operationId":"resolve_alert_api_v1_admin_system_health_alerts__alert_id__resolve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/system-health/optimization":{"get":{"tags":["admin","Admin - System Health"],"summary":"Get Optimization Report","description":"최적화 리포트 조회","operationId":"get_optimization_report_api_v1_admin_system_health_optimization_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/system-health/optimization/auto-optimize":{"post":{"tags":["admin","Admin - System Health"],"summary":"Run Auto Optimization","description":"자동 최적화 실행","operationId":"run_auto_optimization_api_v1_admin_system_health_optimization_auto_optimize_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/system-health/logs":{"get":{"tags":["admin","Admin - System Health"],"summary":"Get System Logs","description":"시스템 로그 조회","operationId":"get_system_logs_api_v1_admin_system_health_logs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"level","in":"query","required":false,"schema":{"type":"string","default":"ERROR","title":"Level"}},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","default":24,"title":"Hours"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/system-health/services":{"get":{"tags":["admin","Admin - System Health"],"summary":"Get Service Status","description":"서비스 상태 조회","operationId":"get_service_status_api_v1_admin_system_health_services_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/system-health/capacity":{"get":{"tags":["admin","Admin - System Health"],"summary":"Get Capacity Planning","description":"용량 계획 정보","operationId":"get_capacity_planning_api_v1_admin_system_health_capacity_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/system-health/dashboard":{"get":{"tags":["admin","Admin - System Health"],"summary":"Get Admin Dashboard","description":"관리자 대시보드 종합 정보","operationId":"get_admin_dashboard_api_v1_admin_system_health_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/system-health/maintenance":{"post":{"tags":["admin","Admin - System Health"],"summary":"Toggle Maintenance Mode","description":"유지보수 모드 토글","operationId":"toggle_maintenance_mode_api_v1_admin_system_health_maintenance_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"enabled","in":"query","required":true,"schema":{"type":"boolean","title":"Enabled"}},{"name":"message","in":"query","required":false,"schema":{"type":"string","default":"System maintenance in progress","title":"Message"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/alert-rules":{"get":{"tags":["admin","Admin - Alert Rules"],"summary":"Get Alert Rules","description":"모든 알림 규칙 조회","operationId":"get_alert_rules_api_v1_admin_alert_rules_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Alert Rules Api V1 Admin Alert Rules Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["admin","Admin - Alert Rules"],"summary":"Create Alert Rule","description":"새로운 알림 규칙 생성","operationId":"create_alert_rule_api_v1_admin_alert_rules_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertRuleCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Alert Rule Api V1 Admin Alert Rules Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/alert-rules/{rule_id}":{"put":{"tags":["admin","Admin - Alert Rules"],"summary":"Update Alert Rule","description":"알림 규칙 수정","operationId":"update_alert_rule_api_v1_admin_alert_rules__rule_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"integer","title":"Rule Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertRuleUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Alert Rule Api V1 Admin Alert Rules  Rule Id  Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin","Admin - Alert Rules"],"summary":"Delete Alert Rule","description":"알림 규칙 삭제","operationId":"delete_alert_rule_api_v1_admin_alert_rules__rule_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"integer","title":"Rule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Alert Rule Api V1 Admin Alert Rules  Rule Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/alert-rules/metric-thresholds":{"get":{"tags":["admin","Admin - Alert Rules"],"summary":"Get Metric Thresholds","description":"모든 메트릭 임계값 조회","operationId":"get_metric_thresholds_api_v1_admin_alert_rules_metric_thresholds_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Metric Thresholds Api V1 Admin Alert Rules Metric Thresholds Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/alert-rules/metric-thresholds/{metric_name}":{"put":{"tags":["admin","Admin - Alert Rules"],"summary":"Update Metric Threshold","description":"메트릭 임계값 수정","operationId":"update_metric_threshold_api_v1_admin_alert_rules_metric_thresholds__metric_name__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"metric_name","in":"path","required":true,"schema":{"type":"string","title":"Metric Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetricThresholdUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Metric Threshold Api V1 Admin Alert Rules Metric Thresholds  Metric Name  Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/alert-rules/advanced-metrics":{"get":{"tags":["admin","Admin - Alert Rules"],"summary":"Get Advanced Metrics","description":"고급 메트릭 조회","operationId":"get_advanced_metrics_api_v1_admin_alert_rules_advanced_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Advanced Metrics Api V1 Admin Alert Rules Advanced Metrics Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/alert-rules/test-alert-rule":{"post":{"tags":["admin","Admin - Alert Rules"],"summary":"Test Alert Rule","description":"알림 규칙 테스트","operationId":"test_alert_rule_api_v1_admin_alert_rules_test_alert_rule_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertRuleCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Test Alert Rule Api V1 Admin Alert Rules Test Alert Rule Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/alert-rules/alert-history":{"get":{"tags":["admin","Admin - Alert Rules"],"summary":"Get Alert History","description":"알림 히스토리 조회 (실제 DB 데이터)","operationId":"get_alert_history_api_v1_admin_alert_rules_alert_history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Alert History Api V1 Admin Alert Rules Alert History Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/alert-rules/acknowledge-alert/{alert_id}":{"post":{"tags":["admin","Admin - Alert Rules"],"summary":"Acknowledge Alert","description":"알림 확인 처리","operationId":"acknowledge_alert_api_v1_admin_alert_rules_acknowledge_alert__alert_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Acknowledge Alert Api V1 Admin Alert Rules Acknowledge Alert  Alert Id  Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/marketplace":{"get":{"tags":["admin","Admin - Marketplace"],"summary":"Get Marketplace Overview","description":"마켓플레이스 관리 개요 (API 테스트 호환)","operationId":"get_marketplace_overview_api_v1_admin_marketplace_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/marketplace/stats":{"get":{"tags":["admin","Admin - Marketplace"],"summary":"Get Marketplace Stats","description":"마켓플레이스 통계","operationId":"get_marketplace_stats_api_v1_admin_marketplace_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/marketplace/characters":{"get":{"tags":["admin","Admin - Marketplace"],"summary":"Get All Characters","description":"모든 캐릭터 목록 (관리자용)","operationId":"get_all_characters_api_v1_admin_marketplace_characters_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/marketplace/characters/{character_id}":{"put":{"tags":["admin","Admin - Marketplace"],"summary":"Update Character Settings","description":"캐릭터 마켓플레이스 설정 업데이트","operationId":"update_character_settings_api_v1_admin_marketplace_characters__character_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin","Admin - Marketplace"],"summary":"Delete Character","description":"캐릭터 소프트 삭제 (관리자용) - 마켓플레이스에서 제거하지만 데이터는 보존","operationId":"delete_character_api_v1_admin_marketplace_characters__character_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"reason","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"삭제 사유","title":"Reason"},"description":"삭제 사유"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/marketplace/characters/{character_id}/restore":{"post":{"tags":["admin","Admin - Marketplace"],"summary":"Restore Character","description":"캐릭터 복원 (관리자용) - 소프트 삭제된 캐릭터를 복원","operationId":"restore_character_api_v1_admin_marketplace_characters__character_id__restore_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/marketplace/characters/{character_id}/permanent":{"delete":{"tags":["admin","Admin - Marketplace"],"summary":"Permanent Delete Character","description":"캐릭터 물리 삭제 (관리자용) - 데이터베이스에서 완전히 삭제. 복구 불가!","operationId":"permanent_delete_character_api_v1_admin_marketplace_characters__character_id__permanent_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"reason","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"물리 삭제 사유","title":"Reason"},"description":"물리 삭제 사유"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/marketplace/settings":{"get":{"tags":["admin","Admin - Marketplace"],"summary":"Get Marketplace Settings","description":"마켓플레이스 설정 조회 (실제 DB)","operationId":"get_marketplace_settings_api_v1_admin_marketplace_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["admin","Admin - Marketplace"],"summary":"Update Marketplace Settings","description":"마켓플레이스 설정 업데이트 (실제 DB 저장)","operationId":"update_marketplace_settings_api_v1_admin_marketplace_settings_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketplaceSettings"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/marketplace/sellers":{"get":{"tags":["admin","Admin - Marketplace"],"summary":"Get Sellers","description":"Public-character sellers; revenue is completed character purchase value.","operationId":"get_sellers_api_v1_admin_marketplace_sellers_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"seller_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Seller Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/marketplace/purchases":{"get":{"tags":["admin","Admin - Marketplace"],"summary":"Get All Purchases","description":"모든 구매 내역 조회 (관리자용)","operationId":"get_all_purchases_api_v1_admin_marketplace_purchases_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/api-keys/stats":{"get":{"tags":["admin","Admin - API Keys"],"summary":"Get Api Keys Stats","description":"전체 API 키 통계 조회\n\n- 총 API 키 수 (상태별)\n- 일별 사용량\n- 보안 사고 통계\n- Rate limit 현황\n- 수익 추정","operationId":"get_api_keys_stats_api_v1_admin_api_keys_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"통계 기간 (일)","default":30,"title":"Days"},"description":"통계 기간 (일)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/api-keys":{"get":{"tags":["admin","Admin - API Keys"],"summary":"List All Api Keys","description":"전체 API 키 목록 조회 (관리자용)\n\n- 페이징 지원\n- 상태별 필터링\n- 캐릭터별 필터링\n- 검색 (키 이름, prefix)","operationId":"list_all_api_keys_api_v1_admin_api_keys_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(active|suspended|revoked|expired)$"},{"type":"null"}],"title":"Status"}},{"name":"character_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Character Id"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/api-keys/{key_id}":{"get":{"tags":["admin","Admin - API Keys"],"summary":"Get Api Key Detail","description":"특정 API 키 상세 조회\n\n- 기본 정보\n- 최근 사용 내역\n- 보안 사고 내역\n- Rate limit 상태","operationId":"get_api_key_detail_api_v1_admin_api_keys__key_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin","Admin - API Keys"],"summary":"Revoke Api Key","description":"API 키 영구 삭제 (관리자)","operationId":"revoke_api_key_api_v1_admin_api_keys__key_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/api-keys/{key_id}/suspend":{"patch":{"tags":["admin","Admin - API Keys"],"summary":"Suspend Api Key","description":"API 키 일시정지 (관리자)","operationId":"suspend_api_key_api_v1_admin_api_keys__key_id__suspend_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/api-keys/{key_id}/activate":{"patch":{"tags":["admin","Admin - API Keys"],"summary":"Activate Api Key","description":"API 키 활성화 (관리자)","operationId":"activate_api_key_api_v1_admin_api_keys__key_id__activate_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/api-keys/security-logs/recent":{"get":{"tags":["admin","Admin - API Keys"],"summary":"Get Recent Security Logs","description":"최근 보안 로그 조회\n\n- 심각도별 필터링\n- 페이징 지원","operationId":"get_recent_security_logs_api_v1_admin_api_keys_security_logs_recent_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(low|medium|high|critical)$"},{"type":"null"}],"title":"Severity"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/billing/transactions":{"get":{"tags":["admin","Admin - Billing"],"summary":"Get Billing Transactions","description":"Get billing transactions from database","operationId":"get_billing_transactions_api_v1_admin_billing_transactions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Billing Transactions Api V1 Admin Billing Transactions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/billing/refunds":{"get":{"tags":["admin","Admin - Billing"],"summary":"Get Refunds","description":"환불 내역 조회.\n\n관리자 결제 화면이 이 경로를 부르는데 구현이 없어 404 였고, 프론트가 그 실패를\n**목 데이터로 대체**하고 있었다 — 관리자가 조작된 환불 내역을 진짜로 보고 있었다\n(2026-08-24). Refund 모델과 refunds 테이블은 처음부터 존재했다.","operationId":"get_refunds_api_v1_admin_billing_refunds_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Refunds Api V1 Admin Billing Refunds Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/billing/credit-refunds":{"get":{"tags":["admin","Admin - Billing"],"summary":"Get Credit Refunds","description":"Credit restorations from the same ledger written by refund_transaction.","operationId":"get_credit_refunds_api_v1_admin_billing_credit_refunds_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/billing/transactions/{transaction_id}/refund":{"post":{"tags":["admin","Admin - Billing"],"summary":"Refund Transaction","description":"Refund a transaction - creates a refund transaction and updates user credits","operationId":"refund_transaction_api_v1_admin_billing_transactions__transaction_id__refund_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"transaction_id","in":"path","required":true,"schema":{"type":"string","title":"Transaction Id"}},{"name":"reason","in":"query","required":false,"schema":{"type":"string","default":"Admin refund","title":"Reason"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/CreditRefundRequest"},{"type":"null"}],"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Refund Transaction Api V1 Admin Billing Transactions  Transaction Id  Refund Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/partnerships":{"get":{"tags":["admin","Admin - Partnerships"],"summary":"Get Partnerships","description":"Get all partnerships from database\n\n관리자 권한 필요","operationId":"get_partnerships_api_v1_admin_partnerships_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"status_filter","in":"query","required":false,"schema":{"type":"string","title":"Status Filter"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Partnerships Api V1 Admin Partnerships Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin","Admin - Partnerships"],"summary":"Create Partnership","description":"Create new partnership\n\n관리자 권한 필요","operationId":"create_partnership_api_v1_admin_partnerships_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Partnership Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Partnership Api V1 Admin Partnerships Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/partnerships/{partnership_id}":{"get":{"tags":["admin","Admin - Partnerships"],"summary":"Get Partnership","description":"Get specific partnership details\n\n관리자 권한 필요","operationId":"get_partnership_api_v1_admin_partnerships__partnership_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"partnership_id","in":"path","required":true,"schema":{"type":"string","title":"Partnership Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Partnership Api V1 Admin Partnerships  Partnership Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["admin","Admin - Partnerships"],"summary":"Update Partnership","description":"Update partnership\n\n관리자 권한 필요","operationId":"update_partnership_api_v1_admin_partnerships__partnership_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"partnership_id","in":"path","required":true,"schema":{"type":"string","title":"Partnership Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Partnership Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Partnership Api V1 Admin Partnerships  Partnership Id  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin","Admin - Partnerships"],"summary":"Delete Partnership","description":"Delete partnership\n\n관리자 권한 필요","operationId":"delete_partnership_api_v1_admin_partnerships__partnership_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"partnership_id","in":"path","required":true,"schema":{"type":"string","title":"Partnership Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Delete Partnership Api V1 Admin Partnerships  Partnership Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/community/settings":{"get":{"tags":["admin","Admin - Community","admin-community"],"summary":"Get Community Settings","description":"커뮤니티 설정 조회\n\n관리자만 접근 가능","operationId":"get_community_settings_api_v1_admin_community_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitySettingsResponse"}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["admin","Admin - Community","admin-community"],"summary":"Update Community Settings","description":"커뮤니티 설정 업데이트\n\n관리자만 접근 가능","operationId":"update_community_settings_api_v1_admin_community_settings_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitySettingsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/community/public":{"get":{"tags":["admin","Admin - Community","admin-community"],"summary":"Get Public Community Settings","description":"공개 커뮤니티 설정 조회 (인증 불필요)\n\n활성화된 항목만 반환","operationId":"get_public_community_settings_api_v1_admin_community_public_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitySettingsResponse"}}}}}}},"/api/v1/admin/prompts/categories":{"get":{"tags":["admin","Admin - Prompts"],"summary":"Get Categories","description":"프롬프트 카테고리 목록","operationId":"get_categories_api_v1_admin_prompts_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array","title":"Response Get Categories Api V1 Admin Prompts Categories Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/prompts":{"get":{"tags":["admin","Admin - Prompts"],"summary":"List Prompts","description":"모든 프롬프트 템플릿 목록 조회\n\n**Query Parameters:**\n- category: 특정 카테고리만 조회 (옵션)\n- active_only: 활성 프롬프트만 조회 (기본값: true)","operationId":"list_prompts_api_v1_admin_prompts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Active Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AdminPromptTemplateResponse"},"title":"Response List Prompts Api V1 Admin Prompts Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/prompts/{template_id}":{"get":{"tags":["admin","Admin - Prompts"],"summary":"Get Prompt Detail","description":"프롬프트 상세 정보 + 변경 히스토리\n\n**Returns:**\n- template: 프롬프트 정보\n- history: 변경 히스토리 (최근 10개)","operationId":"get_prompt_detail_api_v1_admin_prompts__template_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid4","title":"Template Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["admin","Admin - Prompts"],"summary":"Update Prompt","description":"프롬프트 업데이트 (새 버전 생성)\n\n**Body:**\n- system_prompt: 새 시스템 프롬프트 (필수)\n- user_prompt_template: 사용자 프롬프트 템플릿 (옵션)\n- change_reason: 변경 이유 (옵션)\n- temperature, max_tokens, model, description: 설정 (옵션)\n\n**Note**: 기존 버전은 비활성화되고 새 버전이 생성됩니다.","operationId":"update_prompt_api_v1_admin_prompts__template_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid4","title":"Template Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePromptRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/prompts/test":{"post":{"tags":["admin","Admin - Prompts"],"summary":"Test Prompt","description":"프롬프트 테스트 (실제 LLM 호출)\n\n**Body:**\n- category: 프롬프트 카테고리\n- name: 프롬프트 이름\n- test_variables: 테스트 변수 (예: {\"description\": \"테스트 캐릭터\"})\n\n**Returns:**\n- success: 성공 여부\n- output: LLM 응답\n- tokens_used: 사용된 토큰 수\n- cost_estimate: 예상 비용 (USD)","operationId":"test_prompt_api_v1_admin_prompts_test_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestPromptRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestPromptResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/prompts/{template_id}/rollback":{"post":{"tags":["admin","Admin - Prompts"],"summary":"Rollback Prompt","description":"특정 버전으로 롤백\n\n**Path Parameters:**\n- template_id: 템플릿 ID\n- target_version: 롤백할 버전 번호\n\n**Note**: 대상 버전의 내용으로 새 버전을 생성합니다.","operationId":"rollback_prompt_api_v1_admin_prompts__template_id__rollback_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid4","title":"Template Id"}},{"name":"target_version","in":"query","required":true,"schema":{"type":"integer","title":"Target Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/presets/categories":{"get":{"tags":["admin","Admin - Presets"],"summary":"Get All Categories","description":"모든 프리셋 카테고리 조회 (관리자)","operationId":"get_all_categories_api_v1_admin_presets_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PresetCategoryResponse"},"type":"array","title":"Response Get All Categories Api V1 Admin Presets Categories Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["admin","Admin - Presets"],"summary":"Create Category","description":"새 프리셋 카테고리 생성","operationId":"create_category_api_v1_admin_presets_categories_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCategoryRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PresetCategoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/presets/categories/{category_id}":{"put":{"tags":["admin","Admin - Presets"],"summary":"Update Category","description":"프리셋 카테고리 수정","operationId":"update_category_api_v1_admin_presets_categories__category_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"category_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Category Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCategoryRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PresetCategoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin","Admin - Presets"],"summary":"Delete Category","description":"프리셋 카테고리 삭제","operationId":"delete_category_api_v1_admin_presets_categories__category_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"category_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Category Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/presets/presets":{"get":{"tags":["admin","Admin - Presets"],"summary":"Get All Presets","description":"모든 프리셋 조회 (관리자)","operationId":"get_all_presets_api_v1_admin_presets_presets_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"category_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Category Id"}},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Inactive"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CharacterPresetListResponse"},"title":"Response Get All Presets Api V1 Admin Presets Presets Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin","Admin - Presets"],"summary":"Create Preset","description":"새 프리셋 생성","operationId":"create_preset_api_v1_admin_presets_presets_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePresetRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterPresetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/presets/presets/{preset_id}":{"get":{"tags":["admin","Admin - Presets"],"summary":"Get Preset","description":"프리셋 상세 조회","operationId":"get_preset_api_v1_admin_presets_presets__preset_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"preset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Preset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterPresetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["admin","Admin - Presets"],"summary":"Update Preset","description":"프리셋 수정","operationId":"update_preset_api_v1_admin_presets_presets__preset_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"preset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Preset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePresetRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterPresetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin","Admin - Presets"],"summary":"Delete Preset","description":"프리셋 삭제","operationId":"delete_preset_api_v1_admin_presets_presets__preset_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"preset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Preset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/presets/presets/{preset_id}/duplicate":{"post":{"tags":["admin","Admin - Presets"],"summary":"Duplicate Preset","description":"프리셋 복제","operationId":"duplicate_preset_api_v1_admin_presets_presets__preset_id__duplicate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"preset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Preset Id"}},{"name":"new_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"New Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterPresetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/presets/stats/overview":{"get":{"tags":["admin","Admin - Presets"],"summary":"Get Preset Admin Statistics","description":"프리셋 관리자 통계","operationId":"get_preset_admin_statistics_api_v1_admin_presets_stats_overview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/presets/presets/{preset_id}/knowledge":{"post":{"tags":["admin","Admin - Presets"],"summary":"Add Knowledge To Preset","description":"템플릿에 기본 지식 추가\n\n템플릿으로 캐릭터 생성 시 이 지식이 자동으로 knowledge base에 추가됩니다.","operationId":"add_knowledge_to_preset_api_v1_admin_presets_presets__preset_id__knowledge_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"preset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Preset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeItemRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["admin","Admin - Presets"],"summary":"Get Preset Knowledge","description":"템플릿의 기본 지식 목록 조회","operationId":"get_preset_knowledge_api_v1_admin_presets_presets__preset_id__knowledge_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"preset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Preset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/presets/presets/{preset_id}/knowledge/{knowledge_index}":{"delete":{"tags":["admin","Admin - Presets"],"summary":"Delete Preset Knowledge","description":"템플릿에서 특정 지식 삭제","operationId":"delete_preset_knowledge_api_v1_admin_presets_presets__preset_id__knowledge__knowledge_index__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"preset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Preset Id"}},{"name":"knowledge_index","in":"path","required":true,"schema":{"type":"integer","title":"Knowledge Index"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/presets/presets/{preset_id}/optimize-prompt":{"post":{"tags":["admin","Admin - Presets"],"summary":"Optimize Preset Prompt","description":"[DEPRECATED] 이 엔드포인트는 더 이상 사용되지 않습니다.\n\n대신 /presets/ai-analysis 엔드포인트를 사용하세요 (검증+최적화 통합)","operationId":"optimize_preset_prompt_api_v1_admin_presets_presets__preset_id__optimize_prompt_post","deprecated":true,"security":[{"HTTPBearer":[]}],"parameters":[{"name":"preset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Preset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptimizePromptRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/presets/presets/{preset_id}/apply-optimized-prompt":{"put":{"tags":["admin","Admin - Presets"],"summary":"Apply Optimized Prompt","description":"최적화된 프롬프트를 템플릿에 적용","operationId":"apply_optimized_prompt_api_v1_admin_presets_presets__preset_id__apply_optimized_prompt_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"preset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Preset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_apply_optimized_prompt_api_v1_admin_presets_presets__preset_id__apply_optimized_prompt_put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/presets/presets/validate":{"post":{"tags":["admin","Admin - Presets"],"summary":"Validate Preset","description":"템플릿 생성 전 검증\n\nAI가 템플릿의 품질을 자동으로 검증하고 개선 제안을 제공합니다.\n\n⚠️ DEPRECATED: 대신 /presets/ai-analysis 엔드포인트를 사용하세요 (검증+최적화 통합)","operationId":"validate_preset_api_v1_admin_presets_presets_validate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatePresetRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatePresetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/presets/presets/ai-analysis":{"post":{"tags":["admin","Admin - Presets"],"summary":"Comprehensive Preset Analysis","description":"🚀 통합 AI 분석: 1회 호출로 검증 + 최적화 + 태그 추출 + 대상 분석\n\n기존의 optimize-prompt와 validate를 통합하여 API 비용과 응답 시간을 절감합니다.\n\n**포함된 분석:**\n- ✅ 템플릿 검증 (품질 점수, 문제점, 개선 제안)\n- 🔧 프롬프트 최적화 (개선된 프롬프트, 개선 포인트)\n- 🏷️ 자동 태그 추출 (산업, 역할, 특징)\n- 👥 타겟 고객 분석 (적합한 고객군, 사용 시나리오)\n- 📁 카테고리 추천 (적합한 카테고리 자동 추천)\n- 📊 종합 평가 (배포 준비 상태 판단)","operationId":"comprehensive_preset_analysis_api_v1_admin_presets_presets_ai_analysis_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComprehensiveAnalysisRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComprehensiveAnalysisResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/presets-analytics/presets/{preset_id}/analytics":{"get":{"tags":["admin","Admin - Presets Analytics"],"summary":"Get Preset Analytics","description":"템플릿별 상세 통계 조회\n\n- 총 사용 횟수\n- 성공률 (생성 후 30일 이상 사용)\n- 평균 만족도\n- 일반적인 커스터마이징 패턴\n- 사용자 피드백","operationId":"get_preset_analytics_api_v1_admin_presets_analytics_presets__preset_id__analytics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"preset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Preset Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"분석 기간 (일)","default":30,"title":"Days"},"description":"분석 기간 (일)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/presets-analytics/analytics/overview":{"get":{"tags":["admin","Admin - Presets Analytics"],"summary":"Get Analytics Overview","description":"전체 템플릿 시스템 분석 대시보드","operationId":"get_analytics_overview_api_v1_admin_presets_analytics_analytics_overview_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/presets-analytics/presets/{preset_id}/feedback":{"post":{"tags":["admin","Admin - Presets Analytics"],"summary":"Submit Preset Feedback","description":"템플릿 사용 후 피드백 제출 (사용자)\n\n템플릿으로 캐릭터를 생성한 사용자가 사용 경험을 공유합니다.","operationId":"submit_preset_feedback_api_v1_admin_presets_analytics_presets__preset_id__feedback_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"preset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Preset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__admin__presets_analytics__FeedbackRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["admin","Admin - Presets Analytics"],"summary":"Get Preset Feedback","description":"템플릿 피드백 목록 조회 (관리자)","operationId":"get_preset_feedback_api_v1_admin_presets_analytics_presets__preset_id__feedback_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"preset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Preset Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PresetFeedbackResponse"},"title":"Response Get Preset Feedback Api V1 Admin Presets Analytics Presets  Preset Id  Feedback Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/presets-analytics/feedback/summary":{"get":{"tags":["admin","Admin - Presets Analytics"],"summary":"Get Feedback Summary","description":"최근 피드백 요약 (관리자)","operationId":"get_feedback_summary_api_v1_admin_presets_analytics_feedback_summary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"default":7,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ai-settings/models":{"get":{"tags":["admin","Admin - AI Settings"],"summary":"Get Available Models","description":"사용 가능한 AI 모델 목록 조회\n\n관리자가 선택할 수 있는 모든 AI 모델을 반환합니다.","operationId":"get_available_models_api_v1_admin_ai_settings_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/AIModelInfo"},"type":"array","title":"Response Get Available Models Api V1 Admin Ai Settings Models Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/ai-settings/settings":{"get":{"tags":["admin","Admin - AI Settings"],"summary":"Get Ai Settings","description":"현재 AI 설정 및 통계 조회\n\n기본 모델, 사용 통계, 비용 등을 반환합니다.","operationId":"get_ai_settings_api_v1_admin_ai_settings_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AISettingsResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/ai-settings/default-model":{"post":{"tags":["admin","Admin - AI Settings"],"summary":"Set Default Model","description":"기본 AI 모델 변경\n\n관리자가 기본으로 사용할 AI 모델을 선택합니다.\n템플릿 분석, 최적화 등에 사용됩니다.","operationId":"set_default_model_api_v1_admin_ai_settings_default_model_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetDefaultModelRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/ai-settings/providers":{"get":{"tags":["admin","Admin - AI Settings"],"summary":"Get Available Providers","description":"사용 가능한 AI 프로바이더 목록\n\nOpenAI, Azure, OpenRouter 등의 상태를 반환합니다.","operationId":"get_available_providers_api_v1_admin_ai_settings_providers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/ai-settings/cost-estimate":{"get":{"tags":["admin","Admin - AI Settings"],"summary":"Estimate Costs","description":"AI 사용 비용 추정\n\n템플릿 분석 작업 기준으로 비용을 추정합니다.","operationId":"estimate_costs_api_v1_admin_ai_settings_cost_estimate_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"template_count","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Template Count"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ai-settings/test-model/{model_key}":{"post":{"tags":["admin","Admin - AI Settings"],"summary":"Test Model","description":"특정 AI 모델 테스트\n\n선택한 모델이 정상적으로 작동하는지 확인합니다.","operationId":"test_model_api_v1_admin_ai_settings_test_model__model_key__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_key","in":"path","required":true,"schema":{"type":"string","title":"Model Key"}},{"name":"test_prompt","in":"query","required":false,"schema":{"type":"string","default":"안녕하세요. 테스트 메시지입니다.","title":"Test Prompt"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/prompt-templates/prompts":{"get":{"tags":["admin","Admin - Prompt Templates"],"summary":"List Prompts","description":"프롬프트 템플릿 목록 조회\n\n- 관리자만 접근 가능\n- category: character_creation, chat_system","operationId":"list_prompts_api_v1_admin_prompt_templates_prompts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by category (character_creation or chat_system)","title":"Category"},"description":"Filter by category (character_creation or chat_system)"},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by active status","title":"Is Active"},"description":"Filter by active status"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PromptTemplateResponse"},"title":"Response List Prompts Api V1 Admin Prompt Templates Prompts Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin","Admin - Prompt Templates"],"summary":"Create Prompt","description":"새 프롬프트 템플릿 생성\n\n- 관리자만 접근 가능\n- category: character_creation (캐릭터 생성용) 또는 chat_system (채팅용)","operationId":"create_prompt_api_v1_admin_prompt_templates_prompts_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptTemplateCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptTemplateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/prompt-templates/prompts/{prompt_id}":{"get":{"tags":["admin","Admin - Prompt Templates"],"summary":"Get Prompt","description":"특정 프롬프트 템플릿 조회","operationId":"get_prompt_api_v1_admin_prompt_templates_prompts__prompt_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"prompt_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Prompt Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptTemplateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["admin","Admin - Prompt Templates"],"summary":"Update Prompt","description":"프롬프트 템플릿 수정\n\n- 버전을 증가시키고 이력에 저장","operationId":"update_prompt_api_v1_admin_prompt_templates_prompts__prompt_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"prompt_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Prompt Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptTemplateUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptTemplateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin","Admin - Prompt Templates"],"summary":"Delete Prompt","description":"프롬프트 템플릿 삭제\n\n- 물리적 삭제 (이력은 CASCADE로 함께 삭제됨)","operationId":"delete_prompt_api_v1_admin_prompt_templates_prompts__prompt_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"prompt_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Prompt Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/prompt-templates/prompts/{prompt_id}/history":{"get":{"tags":["admin","Admin - Prompt Templates"],"summary":"Get Prompt History","description":"프롬프트 템플릿 변경 이력 조회","operationId":"get_prompt_history_api_v1_admin_prompt_templates_prompts__prompt_id__history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"prompt_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Prompt Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PromptHistoryResponse"},"title":"Response Get Prompt History Api V1 Admin Prompt Templates Prompts  Prompt Id  History Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/prompt-templates/prompts/{prompt_id}/activate":{"post":{"tags":["admin","Admin - Prompt Templates"],"summary":"Activate Prompt","description":"프롬프트 템플릿 활성화\n\n- 동일한 category/name의 다른 프롬프트는 비활성화","operationId":"activate_prompt_api_v1_admin_prompt_templates_prompts__prompt_id__activate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"prompt_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Prompt Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptTemplateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/prompt-templates/categories":{"get":{"tags":["admin","Admin - Prompt Templates"],"summary":"List Categories","description":"사용 가능한 프롬프트 카테고리 목록","operationId":"list_categories_api_v1_admin_prompt_templates_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/vector-db/collections":{"get":{"tags":["admin","Admin - Vector Database"],"summary":"Get Vector Collections","description":"모든 Qdrant 컬렉션 정보 조회\n\nReturns:\n    전체 벡터 DB 통계 및 컬렉션별 상세 정보","operationId":"get_vector_collections_api_v1_admin_vector_db_collections_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"require_mfa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Require Mfa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VectorStats"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/vector-db/collection/{collection_name}":{"get":{"tags":["admin","Admin - Vector Database"],"summary":"Get Collection Detail","description":"특정 컬렉션의 상세 정보 조회\n\nArgs:\n    collection_name: 컬렉션 이름 (knowledge_base, conversation_summary, etc.)","operationId":"get_collection_detail_api_v1_admin_vector_db_collection__collection_name__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"collection_name","in":"path","required":true,"schema":{"type":"string","title":"Collection Name"}},{"name":"require_mfa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Require Mfa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/vector-db/collections/{collection_name}/documents":{"get":{"tags":["admin","Admin - Vector Database"],"summary":"Get Collection Documents","description":"컬렉션의 문서(포인트) 목록 조회 (페이지네이션)\n\nArgs:\n    collection_name: 컬렉션 이름\n    page: 페이지 번호 (1부터 시작)\n    limit: 페이지당 결과 수","operationId":"get_collection_documents_api_v1_admin_vector_db_collections__collection_name__documents_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"collection_name","in":"path","required":true,"schema":{"type":"string","title":"Collection Name"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"require_mfa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Require Mfa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/vector-db/sync-status":{"get":{"tags":["admin","Admin - Vector Database"],"summary":"Check Sync Status","description":"PostgreSQL과 Qdrant 간의 동기화 상태 확인\n\nReturns:\n    각 컬렉션의 동기화 상태","operationId":"check_sync_status_api_v1_admin_vector_db_sync_status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"require_mfa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Require Mfa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SyncStatus"},"title":"Response Check Sync Status Api V1 Admin Vector Db Sync Status Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/vector-db/collection/{collection_name}/optimize":{"post":{"tags":["admin","Admin - Vector Database"],"summary":"Optimize Collection","description":"컬렉션 최적화 (인덱스 재구성, 세그먼트 병합)\n\nArgs:\n    collection_name: 최적화할 컬렉션 이름","operationId":"optimize_collection_api_v1_admin_vector_db_collection__collection_name__optimize_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"collection_name","in":"path","required":true,"schema":{"type":"string","title":"Collection Name"}},{"name":"require_mfa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Require Mfa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/vector-db/collection/{collection_name}/clear":{"delete":{"tags":["admin","Admin - Vector Database"],"summary":"Clear Collection","description":"컬렉션의 모든 벡터 삭제 (컬렉션 구조는 유지)\n\n⚠️ 주의: 이 작업은 되돌릴 수 없습니다!\n\nArgs:\n    collection_name: 초기화할 컬렉션 이름\n    confirm: 삭제 확인 (true로 설정해야 실행)","operationId":"clear_collection_api_v1_admin_vector_db_collection__collection_name__clear_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"collection_name","in":"path","required":true,"schema":{"type":"string","title":"Collection Name"}},{"name":"confirm","in":"query","required":false,"schema":{"type":"boolean","description":"삭제 확인","default":false,"title":"Confirm"},"description":"삭제 확인"},{"name":"require_mfa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Require Mfa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/vector-db/collection/{collection_name}/search":{"post":{"tags":["admin","Admin - Vector Database"],"summary":"Debug Search","description":"벡터 검색 디버깅 도구\n\nArgs:\n    collection_name: 검색할 컬렉션\n    query_vector: 쿼리 벡터 (크기는 컬렉션 설정과 일치해야 함)\n    limit: 반환할 결과 수","operationId":"debug_search_api_v1_admin_vector_db_collection__collection_name__search_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"collection_name","in":"path","required":true,"schema":{"type":"string","title":"Collection Name"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":5,"title":"Limit"}},{"name":"require_mfa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Require Mfa"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"number"},"title":"Query Vector"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/vector-db/stats":{"get":{"tags":["admin","Admin - Vector Database"],"summary":"Get Vector Db Stats","description":"벡터 DB 전체 통계 조회 (프론트엔드 호환)\n\nReturns:\n    총 컬렉션 수, 총 문서 수, DB 크기, 경로 등","operationId":"get_vector_db_stats_api_v1_admin_vector_db_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"require_mfa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Require Mfa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/vector-db/health":{"get":{"tags":["admin","Admin - Vector Database"],"summary":"Check Vector Db Health","description":"Qdrant 벡터 DB 헬스체크\n\nReturns:\n    Qdrant 서비스의 전반적인 상태","operationId":"check_vector_db_health_api_v1_admin_vector_db_health_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"require_mfa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Require Mfa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/vector-db/stats/by-character":{"get":{"tags":["admin","Admin - Vector Database"],"summary":"Get Vector Stats By Character","description":"캐릭터별 벡터 사용량 통계\n\nReturns:\n    각 캐릭터의 지식 베이스 벡터 수","operationId":"get_vector_stats_by_character_api_v1_admin_vector_db_stats_by_character_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}},{"name":"require_mfa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Require Mfa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/sdk/deploy":{"post":{"tags":["admin","Admin - SDK"],"summary":"Deploy Sdk","description":"Widget SDK를 CDN에 배포\n\n- 번들된 SDK 또는 커스텀 SDK 내용을 R2 CDN에 업로드\n- 최신 버전(widget.js)과 버전별 파일(widget.v{timestamp}.js) 생성","operationId":"deploy_sdk_api_v1_admin_sdk_deploy_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SDKUploadRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SDKUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/sdk/versions":{"get":{"tags":["admin","Admin - SDK"],"summary":"List Sdk Versions","description":"배포된 SDK 버전 목록 조회","operationId":"list_sdk_versions_api_v1_admin_sdk_versions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/sdk/current":{"get":{"tags":["admin","Admin - SDK"],"summary":"Get Current Sdk Url","description":"현재 SDK URL 조회 (인증 불필요)","operationId":"get_current_sdk_url_api_v1_admin_sdk_current_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/organizations/plans":{"get":{"tags":["admin","Admin - Organizations"],"summary":"List Plans","description":"모든 요금제 목록 조회","operationId":"list_plans_api_v1_admin_organizations_plans_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(creator|buyer)$"},{"type":"null"}],"title":"Org Type"}},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin","Admin - Organizations"],"summary":"Create Plan","description":"새 요금제 생성 (슈퍼관리자 전용)","operationId":"create_plan_api_v1_admin_organizations_plans_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/organizations/plans/{plan_id}":{"put":{"tags":["admin","Admin - Organizations"],"summary":"Update Plan","description":"요금제 수정 (슈퍼관리자 전용)","operationId":"update_plan_api_v1_admin_organizations_plans__plan_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Plan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin","Admin - Organizations"],"summary":"Delete Plan","description":"요금제 삭제 (슈퍼관리자 전용)\n\n사용 중인 플랜은 삭제 불가","operationId":"delete_plan_api_v1_admin_organizations_plans__plan_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/organizations/organizations":{"get":{"tags":["admin","Admin - Organizations"],"summary":"List All Organizations","description":"모든 조직 목록 조회 (관리자용)","operationId":"list_all_organizations_api_v1_admin_organizations_organizations_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(creator|buyer)$"},{"type":"null"}],"title":"Org Type"}},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},{"name":"is_verified","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Verified"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/organizations/organizations/{org_id}":{"get":{"tags":["admin","Admin - Organizations"],"summary":"Get Organization Detail","description":"조직 상세 조회 (관리자용)","operationId":"get_organization_detail_api_v1_admin_organizations_organizations__org_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["admin","Admin - Organizations"],"summary":"Update Organization Admin","description":"조직 수정 (슈퍼관리자 전용)","operationId":"update_organization_admin_api_v1_admin_organizations_organizations__org_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationAdminUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/organizations/organizations/{org_id}/plan":{"put":{"tags":["admin","Admin - Organizations"],"summary":"Change Organization Plan","description":"조직 요금제 변경 (슈퍼관리자 전용)","operationId":"change_organization_plan_api_v1_admin_organizations_organizations__org_id__plan_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"plan_code","in":"query","required":true,"schema":{"type":"string","title":"Plan Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/organizations/organizations/{org_id}/quota":{"put":{"tags":["admin","Admin - Organizations"],"summary":"Override Organization Quota","description":"조직 쿼터 오버라이드 (슈퍼관리자 전용)\n\ncustom_limits로 플랜 한도를 개별 조정","operationId":"override_organization_quota_api_v1_admin_organizations_organizations__org_id__quota_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuotaOverride"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/organizations/feature-overrides":{"get":{"tags":["admin","Admin - Organizations"],"summary":"List Feature Overrides","description":"기능 오버라이드 목록 조회","operationId":"list_feature_overrides_api_v1_admin_organizations_feature_overrides_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"organization_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Organization Id"}},{"name":"character_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Character Id"}},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"}},{"name":"feature_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Feature Type"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin","Admin - Organizations"],"summary":"Create Feature Override","description":"기능 오버라이드 생성 (슈퍼관리자 전용)\n\n특정 조직/캐릭터/사용자에 대해 기능을 강제 활성화/비활성화","operationId":"create_feature_override_api_v1_admin_organizations_feature_overrides_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureOverrideCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/organizations/feature-overrides/{override_id}":{"delete":{"tags":["admin","Admin - Organizations"],"summary":"Delete Feature Override","description":"기능 오버라이드 삭제 (슈퍼관리자 전용)","operationId":"delete_feature_override_api_v1_admin_organizations_feature_overrides__override_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"override_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Override Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/organizations/stats":{"get":{"tags":["admin","Admin - Organizations"],"summary":"Get Organization Stats","description":"조직 관련 통계 조회","operationId":"get_organization_stats_api_v1_admin_organizations_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/admin-roles/roles":{"get":{"tags":["admin","Admin - Roles & Permissions"],"summary":"List Admin Roles","description":"모든 관리자 역할 조회 (슈퍼관리자 전용)","operationId":"list_admin_roles_api_v1_admin_admin_roles_roles_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Inactive"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin","Admin - Roles & Permissions"],"summary":"Create Admin Role","description":"새 관리자 역할 생성","operationId":"create_admin_role_api_v1_admin_admin_roles_roles_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminRoleCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/admin-roles/roles/{role_id}":{"put":{"tags":["admin","Admin - Roles & Permissions"],"summary":"Update Admin Role","description":"관리자 역할 수정","operationId":"update_admin_role_api_v1_admin_admin_roles_roles__role_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"role_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Role Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminRoleUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin","Admin - Roles & Permissions"],"summary":"Delete Admin Role","description":"관리자 역할 삭제","operationId":"delete_admin_role_api_v1_admin_admin_roles_roles__role_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"role_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Role Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/admin-roles/assignments":{"get":{"tags":["admin","Admin - Roles & Permissions"],"summary":"List Role Assignments","description":"역할 할당 목록 조회","operationId":"list_role_assignments_api_v1_admin_admin_roles_assignments_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"}},{"name":"role_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Role Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin","Admin - Roles & Permissions"],"summary":"Assign Role","description":"사용자에게 역할 할당","operationId":"assign_role_api_v1_admin_admin_roles_assignments_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleAssignmentCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/admin-roles/assignments/{assignment_id}":{"delete":{"tags":["admin","Admin - Roles & Permissions"],"summary":"Revoke Role","description":"역할 할당 해제","operationId":"revoke_role_api_v1_admin_admin_roles_assignments__assignment_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"assignment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Assignment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/admin-roles/admins":{"get":{"tags":["admin","Admin - Roles & Permissions"],"summary":"List Admin Users","description":"관리자 사용자 목록","operationId":"list_admin_users_api_v1_admin_admin_roles_admins_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/admin-roles/my-permissions":{"get":{"tags":["admin","Admin - Roles & Permissions"],"summary":"Get My Admin Permissions","description":"현재 관리자의 권한 조회 (프론트엔드 메뉴 렌더링용)","operationId":"get_my_admin_permissions_api_v1_admin_admin_roles_my_permissions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/admin-roles/audit-logs":{"get":{"tags":["admin","Admin - Roles & Permissions"],"summary":"List Audit Logs","description":"관리자 활동 로그 조회","operationId":"list_audit_logs_api_v1_admin_admin_roles_audit_logs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"admin_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Admin Id"}},{"name":"action","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action"}},{"name":"resource_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resource Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/admin-roles/menus":{"get":{"tags":["admin","Admin - Roles & Permissions"],"summary":"List Admin Menus","description":"관리자 메뉴 구성 조회","operationId":"list_admin_menus_api_v1_admin_admin_roles_menus_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/admin-roles/menus/sync":{"post":{"tags":["admin","Admin - Roles & Permissions"],"summary":"Sync Default Menus","description":"기본 메뉴 구성 동기화 (초기 설정용)","operationId":"sync_default_menus_api_v1_admin_admin_roles_menus_sync_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/admin-roles/roles/init-defaults":{"post":{"tags":["admin","Admin - Roles & Permissions"],"summary":"Init Default Roles","description":"기본 관리자 역할 초기화","operationId":"init_default_roles_api_v1_admin_admin_roles_roles_init_defaults_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/homepage-content/testimonials":{"get":{"tags":["admin","Admin - Homepage Content"],"summary":"Get Testimonials","description":"고객 후기 목록 조회 (관리자)","operationId":"get_testimonials_api_v1_admin_homepage_content_testimonials_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"locale","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locale"}},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TestimonialResponse"},"title":"Response Get Testimonials Api V1 Admin Homepage Content Testimonials Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin","Admin - Homepage Content"],"summary":"Create Testimonial","description":"고객 후기 생성","operationId":"create_testimonial_api_v1_admin_homepage_content_testimonials_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestimonialCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestimonialResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/homepage-content/testimonials/{testimonial_id}":{"get":{"tags":["admin","Admin - Homepage Content"],"summary":"Get Testimonial","description":"고객 후기 상세 조회","operationId":"get_testimonial_api_v1_admin_homepage_content_testimonials__testimonial_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"testimonial_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Testimonial Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestimonialResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["admin","Admin - Homepage Content"],"summary":"Update Testimonial","description":"고객 후기 수정","operationId":"update_testimonial_api_v1_admin_homepage_content_testimonials__testimonial_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"testimonial_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Testimonial Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestimonialUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestimonialResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin","Admin - Homepage Content"],"summary":"Delete Testimonial","description":"고객 후기 삭제","operationId":"delete_testimonial_api_v1_admin_homepage_content_testimonials__testimonial_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"testimonial_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Testimonial Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/homepage-content/press":{"get":{"tags":["admin","Admin - Homepage Content"],"summary":"Get Press Features","description":"언론 보도 목록 조회 (관리자)","operationId":"get_press_features_api_v1_admin_homepage_content_press_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PressFeatureResponse"},"title":"Response Get Press Features Api V1 Admin Homepage Content Press Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin","Admin - Homepage Content"],"summary":"Create Press Feature","description":"언론 보도 생성","operationId":"create_press_feature_api_v1_admin_homepage_content_press_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PressFeatureCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PressFeatureResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/homepage-content/press/{press_id}":{"get":{"tags":["admin","Admin - Homepage Content"],"summary":"Get Press Feature","description":"언론 보도 상세 조회","operationId":"get_press_feature_api_v1_admin_homepage_content_press__press_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"press_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Press Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PressFeatureResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["admin","Admin - Homepage Content"],"summary":"Update Press Feature","description":"언론 보도 수정","operationId":"update_press_feature_api_v1_admin_homepage_content_press__press_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"press_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Press Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PressFeatureUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PressFeatureResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin","Admin - Homepage Content"],"summary":"Delete Press Feature","description":"언론 보도 삭제","operationId":"delete_press_feature_api_v1_admin_homepage_content_press__press_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"press_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Press Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/memory/statistics":{"get":{"tags":["admin","Admin - Memory Management"],"summary":"Get Memory Statistics","description":"메모리 시스템 전체 통계 조회","operationId":"get_memory_statistics_api_v1_admin_memory_statistics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Memory Statistics Api V1 Admin Memory Statistics Get"}}}}}}},"/api/v1/admin/memory/decay-config":{"get":{"tags":["admin","Admin - Memory Management"],"summary":"Get Decay Config","description":"현재 망각 곡선 설정 조회","operationId":"get_decay_config_api_v1_admin_memory_decay_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Decay Config Api V1 Admin Memory Decay Config Get"}}}}}},"put":{"tags":["admin","Admin - Memory Management"],"summary":"Update Decay Config","description":"망각 곡선 설정 업데이트\n\n주의: 서버 재시작 시 기본값으로 리셋됨\n영구 저장이 필요하면 DB 설정 테이블 사용 권장","operationId":"update_decay_config_api_v1_admin_memory_decay_config_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecayConfigUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Update Decay Config Api V1 Admin Memory Decay Config Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/memory/batch-jobs/run":{"post":{"tags":["admin","Admin - Memory Management"],"summary":"Run Batch Job","description":"배치 작업 수동 실행\n\njob_type:\n- decay: 망각 곡선 적용\n- consolidate: 세션 메모리 통합\n- cleanup_expired: 만료된 세션 메모리 정리\n- cleanup_qdrant: Qdrant 고아 벡터 정리\n- retention: 메모리 보존 상태 업데이트","operationId":"run_batch_job_api_v1_admin_memory_batch_jobs_run_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchJobRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Run Batch Job Api V1 Admin Memory Batch Jobs Run Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/memory/batch-jobs/status/{task_id}":{"get":{"tags":["admin","Admin - Memory Management"],"summary":"Get Batch Job Status","description":"배치 작업 상태 조회","operationId":"get_batch_job_status_api_v1_admin_memory_batch_jobs_status__task_id__get","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Batch Job Status Api V1 Admin Memory Batch Jobs Status  Task Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/memory/batch-jobs/scheduled":{"get":{"tags":["admin","Admin - Memory Management"],"summary":"Get Scheduled Jobs","description":"예약된 배치 작업 목록 조회","operationId":"get_scheduled_jobs_api_v1_admin_memory_batch_jobs_scheduled_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Scheduled Jobs Api V1 Admin Memory Batch Jobs Scheduled Get"}}}}}}},"/api/v1/admin/memory/memories/inactive":{"delete":{"tags":["admin","Admin - Memory Management"],"summary":"Purge Inactive Memories","description":"비활성 메모리 영구 삭제 (soft delete된 것들)\n\n주의: 이 작업은 되돌릴 수 없습니다!","operationId":"purge_inactive_memories_api_v1_admin_memory_memories_inactive_delete","parameters":[{"name":"days_old","in":"query","required":false,"schema":{"type":"integer","default":90,"title":"Days Old"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Purge Inactive Memories Api V1 Admin Memory Memories Inactive Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/memory/decay-preview":{"get":{"tags":["admin","Admin - Memory Management"],"summary":"Preview Decay Effect","description":"망각 곡선 적용 시뮬레이션 (실제 적용 없이 미리보기)","operationId":"preview_decay_effect_api_v1_admin_memory_decay_preview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Preview Decay Effect Api V1 Admin Memory Decay Preview Get"}}}}}}},"/api/v1/admin/rag/evaluate-japanese-purity":{"post":{"tags":["admin","Admin - RAG"],"summary":"Evaluate Japanese Purity Endpoint","description":"일본어 순도 평가 — 사업계획서 [별첨 4] 모델 비교 표 생성용.\n\n5개 캐릭터 페르소나 프롬프트로 모델 응답을 받아 가나·한자 비율 측정.","operationId":"evaluate_japanese_purity_endpoint_api_v1_admin_rag_evaluate_japanese_purity_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model","in":"query","required":false,"schema":{"type":"string","description":"평가 대상 모델","default":"ollama/gemma3:4b","title":"Model"},"description":"평가 대상 모델"},{"name":"require_mfa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Require Mfa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/rag/evaluate-60ep-recall":{"post":{"tags":["admin","Admin - RAG"],"summary":"Evaluate 60Ep Recall Endpoint","description":"60화 회상 평가 — 사업계획서 [1-1 ②] \"60화+ 회상 75~85%\" 검증용.\n\n60턴 합성 대화 후 10개 시드 사실에 대한 회수율 측정.","operationId":"evaluate_60ep_recall_endpoint_api_v1_admin_rag_evaluate_60ep_recall_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model","in":"query","required":false,"schema":{"type":"string","description":"평가 대상 모델","default":"ollama/gemma3:4b","title":"Model"},"description":"평가 대상 모델"},{"name":"require_mfa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Require Mfa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/rag/cache-stats":{"get":{"tags":["admin","Admin - RAG"],"summary":"Get Cache Stats","description":"시맨틱 캐시 통계 (in-process 카운터).\n\n히트율이 낮은 컬렉션은:\n- 해당 컬렉션의 cache_ttl_seconds가 너무 짧은가?\n- 무효화가 자주 일어나는가?\n- 쿼리 분포가 too-unique한가? → 정규화/표준화 검토","operationId":"get_cache_stats_api_v1_admin_rag_cache_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"require_mfa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Require Mfa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CacheStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/rag/collection-configs":{"get":{"tags":["admin","Admin - RAG"],"summary":"List Collection Configs","description":"모든 컬렉션의 RAG 설정 (검색 임계치, MMR/시간감쇠 활성화 등) 조회.\n\n런타임 환경변수(`BESTCHAR_RAG_<COLL>_<FIELD>`) 오버라이드도 반영됨.","operationId":"list_collection_configs_api_v1_admin_rag_collection_configs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"require_mfa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Require Mfa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CollectionConfigResponse"},"title":"Response List Collection Configs Api V1 Admin Rag Collection Configs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/rag/invalidate/{collection}":{"post":{"tags":["admin","Admin - RAG"],"summary":"Invalidate Cache","description":"컬렉션 단위 캐시 무효화. 대량 데이터 보정/마이그레이션 후 호출.\n\n단순히 컬렉션의 invalidation 버전을 +1 → 기존 캐시 키는 자연 만료.","operationId":"invalidate_cache_api_v1_admin_rag_invalidate__collection__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"collection","in":"path","required":true,"schema":{"type":"string","title":"Collection"}},{"name":"require_mfa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Require Mfa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvalidateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/rag/evaluate":{"post":{"tags":["admin","Admin - RAG"],"summary":"Trigger Evaluation","description":"RAG 평가 하네스 즉시 실행. 골든 셋이 작은 경우에만 호출 권장 (LLM/임베딩 비용 발생).\n\n기본 골든 셋: backend/app/services/rag/evaluation/golden_sets/{collection}.jsonl","operationId":"trigger_evaluation_api_v1_admin_rag_evaluate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"collection","in":"query","required":true,"schema":{"type":"string","description":"평가할 컬렉션","title":"Collection"},"description":"평가할 컬렉션"},{"name":"golden_set_path","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"JSONL 경로 (없으면 기본 위치 시도)","title":"Golden Set Path"},"description":"JSONL 경로 (없으면 기본 위치 시도)"},{"name":"top_k","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Top K"}},{"name":"require_mfa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Require Mfa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvaluationRunResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/rag/health":{"get":{"tags":["admin","Admin - RAG"],"summary":"Rag Health Check","description":"RAG 서브시스템 종합 헬스 체크.\n\n검사 항목:\n- Qdrant 연결 + 컬렉션 존재\n- Redis 연결 (시맨틱 캐시 백엔드)\n- OpenAI 임베딩 1회 ping (지연 측정)\n- In-process 캐시 상태 요약\n\n각 서브시스템 latency를 ms로 보고. 운영자가 한 화면에서 모든 의존성 상태 파악.","operationId":"rag_health_check_api_v1_admin_rag_health_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"require_mfa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Require Mfa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RAGHealthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/llm/models":{"get":{"tags":["admin-llm","admin-llm"],"summary":"Get Available Models","description":"사용 가능한 LLM 모델 목록 조회\n\n- **관리자 전용**\n- 모든 사용 가능한 모델과 가격 정보 반환","operationId":"get_available_models_api_v1_admin_llm_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response Get Available Models Api V1 Admin Llm Models Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/llm/models/recommended":{"get":{"tags":["admin-llm","admin-llm"],"summary":"Get Recommended Llm Models","description":"추천 모델 목록\n\n- **관리자 전용**\n- 성능, 가격, 속도 균형이 좋은 모델들","operationId":"get_recommended_llm_models_api_v1_admin_llm_models_recommended_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response Get Recommended Llm Models Api V1 Admin Llm Models Recommended Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/llm/models/replika-compatible":{"get":{"tags":["admin-llm","admin-llm"],"summary":"Get Replika Compatible Llm Models","description":"Replika 벤치마크(2000ms) 호환 모델\n\n- **관리자 전용**\n- 응답 속도가 2000ms 이하인 모델들","operationId":"get_replika_compatible_llm_models_api_v1_admin_llm_models_replika_compatible_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response Get Replika Compatible Llm Models Api V1 Admin Llm Models Replika Compatible Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/llm/settings":{"get":{"tags":["admin-llm","admin-llm"],"summary":"Get Llm Settings","description":"현재 LLM 설정 조회\n\n- **관리자 전용**\n- 현재 적용된 모델과 설정 반환","operationId":"get_llm_settings_api_v1_admin_llm_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMSettingResponse"}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["admin-llm","admin-llm"],"summary":"Update Llm Settings","description":"LLM 설정 업데이트\n\n- **관리자 전용**\n- 모델, Temperature, Max Tokens 변경","operationId":"update_llm_settings_api_v1_admin_llm_settings_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMSettingUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/signup/status":{"get":{"tags":["admin-signup","admin-signup"],"summary":"Status","operationId":"status_api_v1_admin_signup_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Status Api V1 Admin Signup Status Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/signup/waitlist":{"get":{"tags":["admin-signup","admin-signup"],"summary":"List Waitlist","operationId":"list_waitlist_api_v1_admin_signup_waitlist_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response List Waitlist Api V1 Admin Signup Waitlist Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/signup/invites":{"get":{"tags":["admin-signup","admin-signup"],"summary":"List Invites","operationId":"list_invites_api_v1_admin_signup_invites_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response List Invites Api V1 Admin Signup Invites Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["admin-signup","admin-signup"],"summary":"Create Invite","operationId":"create_invite_api_v1_admin_signup_invites_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Invite Api V1 Admin Signup Invites Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/signup/invites/{invite_id}":{"delete":{"tags":["admin-signup","admin-signup"],"summary":"Revoke Invite","operationId":"revoke_invite_api_v1_admin_signup_invites__invite_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"invite_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Invite Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Revoke Invite Api V1 Admin Signup Invites  Invite Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ops/kpis":{"get":{"tags":["admin-ops","admin-ops"],"summary":"Get Ops Kpis","operationId":"get_ops_kpis_api_v1_admin_ops_kpis_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"default":7,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Ops Kpis Api V1 Admin Ops Kpis Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/user/llm/settings":{"get":{"tags":["user-llm","user-llm"],"summary":"Get User Llm Settings","description":"사용자 LLM 설정 조회\n\n- 사용자가 개인 모델을 설정했으면 그것 사용\n- 없으면 전역 설정 사용","operationId":"get_user_llm_settings_api_v1_user_llm_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserLLMSettingResponse"}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["user-llm","user-llm"],"summary":"Update User Llm Settings","description":"사용자 LLM 설정 업데이트\n\n- **개인 모델 선택**: 전역 설정과 다른 모델 사용 가능\n- **override_global=True**: 개인 설정 활성화\n- **override_global=False**: 전역 설정 사용 (개인 설정 비활성화)","operationId":"update_user_llm_settings_api_v1_user_llm_settings_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserLLMSettingUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/user/llm/reset":{"post":{"tags":["user-llm","user-llm"],"summary":"Reset User Llm Settings","description":"사용자 LLM 설정 초기화\n\n- 개인 설정 삭제\n- 전역 설정 사용으로 복원","operationId":"reset_user_llm_settings_api_v1_user_llm_reset_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/ai-models":{"get":{"tags":["admin-ai-models","admin-ai-models"],"summary":"Get All Ai Models","description":"AI 모델 정보 조회 (Pricing Models 페이지용)\n\n- **관리자 전용**\n- models: 모든 AI 모델 목록","operationId":"get_all_ai_models_api_v1_admin_ai_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get All Ai Models Api V1 Admin Ai Models Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/ai-models/functions":{"get":{"tags":["admin-ai-models","admin-ai-models"],"summary":"Get Function Models","description":"모든 기능별 AI 모델 설정 조회\n\n- **관리자 전용**\n- chat: 일반 텍스트 채팅 모델\n- chat_multimodal: 이미지 분석 채팅 모델\n- analysis: 대화 분석, 키워드/엔티티 추출\n- summary: 대화 요약\n- memory_preprocessing: 메모리 전처리\n- knowledge_preprocessing: 지식 전처리\n- emotion_detection: 감정 감지\n- daily_quote: 일일 명언\n- image_generation: 이미지 생성\n- text_to_speech: TTS","operationId":"get_function_models_api_v1_admin_ai_models_functions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response Get Function Models Api V1 Admin Ai Models Functions Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/ai-models/available-models":{"get":{"tags":["admin-ai-models","admin-ai-models"],"summary":"Get Available Models","description":"선택 가능한 모델 목록 조회\n\n- **multimodal_only=True**: 멀티모달 모델만 (이미지 분석 가능)\n- **multimodal_only=False**: 모든 모델","operationId":"get_available_models_api_v1_admin_ai_models_available_models_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"multimodal_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Multimodal Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get Available Models Api V1 Admin Ai Models Available Models Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ai-models/functions/{function_name}":{"put":{"tags":["admin-ai-models","admin-ai-models"],"summary":"Update Function Model","description":"기능별 AI 모델 업데이트\n\n- **관리자 전용**\n- function_name: 모든 기능 지원 (chat, chat_multimodal, analysis, summary 등)\n- model_id: 새로운 모델 ID","operationId":"update_function_model_api_v1_admin_ai_models_functions__function_name__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"function_name","in":"path","required":true,"schema":{"type":"string","title":"Function Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FunctionModelUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ai-models/cost-estimate":{"get":{"tags":["admin-ai-models","admin-ai-models"],"summary":"Get Cost Estimate","description":"비용 추정\n\n- **daily_chats**: 하루 채팅 수\n- **image_percentage**: 이미지 채팅 비율 (%)","operationId":"get_cost_estimate_api_v1_admin_ai_models_cost_estimate_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"daily_chats","in":"query","required":false,"schema":{"type":"integer","default":10000,"title":"Daily Chats"}},{"name":"image_percentage","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Image Percentage"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ai-models/quality-settings":{"get":{"tags":["admin-ai-models","admin-ai-models"],"summary":"Get Chat Quality Settings","description":"채팅 품질 설정 조회 (다중 레벨 지원)\n\n**관리자 전용**\n- scope: platform (플랫폼 전역) / seller (판매자) / buyer (구매자) / api_key (외부 서비스)\n- scope_id: 해당 scope의 ID (platform은 생략)\n- inherit: True면 우선순위 기반 계단식 상속, False면 해당 scope만 조회\n\n반복 방지, 자연스러움 등 채팅 품질 관련 설정","operationId":"get_chat_quality_settings_api_v1_admin_ai_models_quality_settings_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"scope","in":"query","required":false,"schema":{"type":"string","default":"platform","title":"Scope"}},{"name":"scope_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope Id"}},{"name":"inherit","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Inherit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["admin-ai-models","admin-ai-models"],"summary":"Update Chat Quality Settings","description":"채팅 품질 설정 업데이트 (다중 레벨 지원)\n\n**관리자 전용**\n- scope: platform / seller / buyer / api_key\n- scope_id: 해당 scope의 ID (platform은 null)\n- 반복 방지 임계값, 응답 길이, 감정 감지 등 설정 변경","operationId":"update_chat_quality_settings_api_v1_admin_ai_models_quality_settings_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"scope","in":"query","required":false,"schema":{"type":"string","default":"platform","title":"Scope"}},{"name":"scope_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Updates"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ai-models/quality-settings/reset":{"post":{"tags":["admin-ai-models","admin-ai-models"],"summary":"Reset Chat Quality Settings","description":"채팅 품질 설정 초기화\n\n**관리자 전용**\n- 모든 설정을 기본값으로 되돌립니다","operationId":"reset_chat_quality_settings_api_v1_admin_ai_models_quality_settings_reset_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/ai-models/quality-presets":{"get":{"tags":["admin-ai-models","admin-ai-models"],"summary":"Get Quality Presets","description":"채팅 품질 프리셋 목록\n\n**관리자 전용**\n- 사전 정의된 품질 설정 프리셋","operationId":"get_quality_presets_api_v1_admin_ai_models_quality_presets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/ai-models/quality-presets/{preset_id}/apply":{"post":{"tags":["admin-ai-models","admin-ai-models"],"summary":"Apply Quality Preset","description":"프리셋 적용\n\n**관리자 전용**\n- 선택한 프리셋을 현재 설정에 적용","operationId":"apply_quality_preset_api_v1_admin_ai_models_quality_presets__preset_id__apply_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"preset_id","in":"path","required":true,"schema":{"type":"string","title":"Preset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/database/tables":{"get":{"tags":["admin-database"],"summary":"Get Database Tables","description":"데이터베이스의 모든 테이블 목록 조회\n\nReturns:\n    {\n        \"tables\": [\n            {\n                \"name\": \"users\",\n                \"column_count\": 15,\n                \"row_count\": 1234\n            },\n            ...\n        ]\n    }","operationId":"get_database_tables_api_v1_admin_database_tables_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"require_mfa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Require Mfa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/database/stats":{"get":{"tags":["admin-database"],"summary":"Get Database Stats","description":"데이터베이스 통계 정보 조회\n\nReturns:\n    {\n        \"database_size\": \"50.2 MB\",\n        \"table_count\": 25,\n        \"total_records\": 10000\n    }","operationId":"get_database_stats_api_v1_admin_database_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"require_mfa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Require Mfa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/database/tables/{table_name}/schema":{"get":{"tags":["admin-database"],"summary":"Get Table Schema","description":"특정 테이블의 스키마 정보 조회\n\nReturns:\n    {\n        \"table_name\": \"users\",\n        \"columns\": [\n            {\n                \"name\": \"id\",\n                \"type\": \"uuid\",\n                \"nullable\": false,\n                \"default\": \"uuid_generate_v4()\",\n                \"max_length\": null,\n                \"precision\": null,\n                \"scale\": null,\n                \"comment\": \"User ID\"\n            },\n            ...\n        ],\n        \"primary_keys\": [\"id\"],\n        \"foreign_keys\": [...]\n    }","operationId":"get_table_schema_api_v1_admin_database_tables__table_name__schema_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"table_name","in":"path","required":true,"schema":{"type":"string","title":"Table Name"}},{"name":"require_mfa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Require Mfa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/database/tables/{table_name}/data":{"get":{"tags":["admin-database"],"summary":"Get Table Data","description":"특정 테이블의 데이터 조회 (페이지네이션)\n\nReturns:\n    {\n        \"records\": [...],\n        \"pagination\": {\n            \"page\": 1,\n            \"limit\": 20,\n            \"total_records\": 100,\n            \"total_pages\": 5,\n            \"has_next\": true,\n            \"has_prev\": false\n        }\n    }","operationId":"get_table_data_api_v1_admin_database_tables__table_name__data_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"table_name","in":"path","required":true,"schema":{"type":"string","title":"Table Name"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"require_mfa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Require Mfa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/database/tables/{table_name}/records/{record_id}":{"put":{"tags":["admin-database"],"summary":"Update Table Record","description":"특정 레코드 업데이트","operationId":"update_table_record_api_v1_admin_database_tables__table_name__records__record_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"table_name","in":"path","required":true,"schema":{"type":"string","title":"Table Name"}},{"name":"record_id","in":"path","required":true,"schema":{"type":"string","title":"Record Id"}},{"name":"require_mfa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Require Mfa"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Updates"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin-database"],"summary":"Delete Table Record","description":"특정 레코드 삭제","operationId":"delete_table_record_api_v1_admin_database_tables__table_name__records__record_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"table_name","in":"path","required":true,"schema":{"type":"string","title":"Table Name"}},{"name":"record_id","in":"path","required":true,"schema":{"type":"string","title":"Record Id"}},{"name":"require_mfa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Require Mfa"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/database/tables/{table_name}/records":{"post":{"tags":["admin-database"],"summary":"Insert Table Record","description":"새 레코드 삽입","operationId":"insert_table_record_api_v1_admin_database_tables__table_name__records_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"table_name","in":"path","required":true,"schema":{"type":"string","title":"Table Name"}},{"name":"require_mfa","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Require Mfa"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users":{"get":{"tags":["user-admin"],"summary":"Get Users List","description":"사용자 목록 조회 (관리자 전용)\n- 페이지네이션 지원\n- 검색 필터 지원 (이름, 이메일)\n- 역할, 상태, 플랜 필터 지원","operationId":"get_users_list_api_v1_admin_users_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"role","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"plan","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/stats":{"get":{"tags":["user-admin"],"summary":"Get User Stats","description":"사용자 통계 조회 (관리자 이상)","operationId":"get_user_stats_api_v1_admin_users_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/users/{user_id}":{"get":{"tags":["user-admin"],"summary":"Get User Detail","description":"사용자 상세 정보 조회 (관리자 전용)","operationId":"get_user_detail_api_v1_admin_users__user_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["user-admin"],"summary":"Delete User By Id","description":"사용자 소프트 삭제 (슈퍼유저, MFA 불요) - /admin/users/{user_id}","operationId":"delete_user_by_id_api_v1_admin_users__user_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/users":{"get":{"tags":["user-admin"],"summary":"Get All Users","description":"모든 사용자 목록 조회 (슈퍼유저만)","operationId":"get_all_users_api_v1_admin_users_users_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"include_deleted","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"title":"Include Deleted"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserListResponse"},"title":"Response Get All Users Api V1 Admin Users Users Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/admins":{"get":{"tags":["user-admin"],"summary":"Get Admin Users","description":"관리자 사용자 목록 조회 (관리자 이상)","operationId":"get_admin_users_api_v1_admin_users_admins_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/UserListResponse"},"type":"array","title":"Response Get Admin Users Api V1 Admin Users Admins Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/users/users/{user_id}/admin-status":{"put":{"tags":["user-admin"],"summary":"Update User Admin Status","description":"사용자의 관리자 권한 업데이트 (슈퍼유저만)","operationId":"update_user_admin_status_api_v1_admin_users_users__user_id__admin_status_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/users/{user_id}":{"delete":{"tags":["user-admin"],"summary":"Soft Delete User","description":"사용자 소프트 삭제 (슈퍼유저, MFA 불요) - 레거시 경로","operationId":"soft_delete_user_api_v1_admin_users_users__user_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/users/{user_id}/restore":{"post":{"tags":["user-admin"],"summary":"Restore User","description":"사용자 복구 (슈퍼유저만)","operationId":"restore_user_api_v1_admin_users_users__user_id__restore_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/permissions/users-permissions":{"get":{"tags":["user-permissions"],"summary":"Get Users Permissions","description":"모든 사용자의 권한 목록 조회 (슈퍼유저만 가능)","operationId":"get_users_permissions_api_v1_admin_permissions_users_permissions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/UserPermissionResponse"},"type":"array","title":"Response Get Users Permissions Api V1 Admin Permissions Users Permissions Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/permissions/user-permissions":{"put":{"tags":["user-permissions"],"summary":"Update User Permissions","description":"사용자 권한 업데이트 (슈퍼유저만 가능)","operationId":"update_user_permissions_api_v1_admin_permissions_user_permissions_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPermissionUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPermissionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/permissions/user/{user_id}":{"delete":{"tags":["user-permissions"],"summary":"Delete User Completely","description":"사용자 완전 삭제 (슈퍼유저만 가능)","operationId":"delete_user_completely_api_v1_admin_permissions_user__user_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/system/overview":{"get":{"tags":["system-operations"],"summary":"Get System Overview","description":"시스템 운영 개요","operationId":"get_system_overview_api_v1_admin_system_overview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/system/announcements":{"get":{"tags":["system-operations"],"summary":"Get Announcements","description":"공지사항 목록","operationId":"get_announcements_api_v1_admin_system_announcements_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Active Only"}},{"name":"announcement_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Announcement Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["system-operations"],"summary":"Create Announcement","description":"공지사항 생성","operationId":"create_announcement_api_v1_admin_system_announcements_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemAnnouncementCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/system/announcements/{announcement_id}":{"put":{"tags":["system-operations"],"summary":"Update Announcement","description":"공지사항 업데이트","operationId":"update_announcement_api_v1_admin_system_announcements__announcement_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"announcement_id","in":"path","required":true,"schema":{"type":"string","title":"Announcement Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemAnnouncementUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["system-operations"],"summary":"Delete Announcement","description":"공지사항 완전 삭제 (관리자 전용)","operationId":"delete_announcement_api_v1_admin_system_announcements__announcement_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"announcement_id","in":"path","required":true,"schema":{"type":"string","title":"Announcement Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/system/public/announcements":{"get":{"tags":["system-operations"],"summary":"Get Public Announcements","description":"공개 공지사항 목록 (사이트 배너/팝업 표시용)","operationId":"get_public_announcements_api_v1_admin_system_public_announcements_get","parameters":[{"name":"locale","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locale"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/system/public/announcements/list":{"get":{"tags":["system-operations"],"summary":"Get Announcements List","description":"공지사항 게시판 목록 (전체 공지사항)","operationId":"get_announcements_list_api_v1_admin_system_public_announcements_list_get","parameters":[{"name":"locale","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locale"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/system/maintenance":{"get":{"tags":["system-operations"],"summary":"Get Maintenance Status","description":"유지보수 모드 상태","operationId":"get_maintenance_status_api_v1_admin_system_maintenance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/system/maintenance/activate":{"post":{"tags":["system-operations"],"summary":"Activate Maintenance Mode","description":"유지보수 모드 활성화","operationId":"activate_maintenance_mode_api_v1_admin_system_maintenance_activate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MaintenanceModeCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/system/maintenance/{maintenance_id}/deactivate":{"post":{"tags":["system-operations"],"summary":"Deactivate Maintenance Mode","description":"유지보수 모드 비활성화","operationId":"deactivate_maintenance_mode_api_v1_admin_system_maintenance__maintenance_id__deactivate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"maintenance_id","in":"path","required":true,"schema":{"type":"string","title":"Maintenance Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/system/configs":{"get":{"tags":["system-operations"],"summary":"Get System Configs","description":"시스템 설정 목록","operationId":"get_system_configs_api_v1_admin_system_configs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["system-operations"],"summary":"Update System Config","description":"시스템 설정 업데이트","operationId":"update_system_config_api_v1_admin_system_configs_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemConfigUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/system/feature-flags":{"get":{"tags":["system-operations"],"summary":"Get Feature Flags","description":"기능 플래그 목록","operationId":"get_feature_flags_api_v1_admin_system_feature_flags_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["system-operations"],"summary":"Create Feature Flag","description":"기능 플래그 생성","operationId":"create_feature_flag_api_v1_admin_system_feature_flags_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureFlagCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/system/feature-flags/{flag_key}/toggle":{"post":{"tags":["system-operations"],"summary":"Toggle Feature Flag","description":"기능 플래그 토글","operationId":"toggle_feature_flag_api_v1_admin_system_feature_flags__flag_key__toggle_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"flag_key","in":"path","required":true,"schema":{"type":"string","title":"Flag Key"}},{"name":"enabled","in":"query","required":true,"schema":{"type":"boolean","title":"Enabled"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/system/feature-flags/{flag_key}":{"put":{"tags":["system-operations"],"summary":"Update Feature Flag","description":"기능 플래그 업데이트","operationId":"update_feature_flag_api_v1_admin_system_feature_flags__flag_key__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"flag_key","in":"path","required":true,"schema":{"type":"string","title":"Flag Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureFlagUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["system-operations"],"summary":"Delete Feature Flag","description":"기능 플래그 삭제","operationId":"delete_feature_flag_api_v1_admin_system_feature_flags__flag_key__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"flag_key","in":"path","required":true,"schema":{"type":"string","title":"Flag Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/system/alerts":{"get":{"tags":["system-operations"],"summary":"Get System Alerts","description":"시스템 알림 목록","operationId":"get_system_alerts_api_v1_admin_system_alerts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"alert_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alert Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/system/alerts/{alert_id}/acknowledge":{"post":{"tags":["system-operations"],"summary":"Acknowledge Alert","description":"알림 확인","operationId":"acknowledge_alert_api_v1_admin_system_alerts__alert_id__acknowledge_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/system/alerts/{alert_id}/resolve":{"post":{"tags":["system-operations"],"summary":"Resolve Alert","description":"알림 해결","operationId":"resolve_alert_api_v1_admin_system_alerts__alert_id__resolve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/system/jobs":{"get":{"tags":["system-operations"],"summary":"Get System Jobs","description":"시스템 작업 목록","operationId":"get_system_jobs_api_v1_admin_system_jobs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"job_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/security-mgmt/overview":{"get":{"tags":["security-admin"],"summary":"Get Security Overview","description":"보안 개요 - /dashboard alias","operationId":"get_security_overview_api_v1_admin_security_mgmt_overview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecurityDashboardResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/security-mgmt/dashboard":{"get":{"tags":["security-admin"],"summary":"Get Security Dashboard","description":"보안 대시보드 데이터 조회","operationId":"get_security_dashboard_api_v1_admin_security_mgmt_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecurityDashboardResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/security-mgmt/audit":{"post":{"tags":["security-admin"],"summary":"Perform Security Audit","description":"보안 감사 수행","operationId":"perform_security_audit_api_v1_admin_security_mgmt_audit_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecurityAuditRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecurityAuditResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/security-mgmt/compliance-report":{"get":{"tags":["security-admin"],"summary":"Get Compliance Report","description":"컴플라이언스 리포트 생성","operationId":"get_compliance_report_api_v1_admin_security_mgmt_compliance_report_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComplianceReportResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/monitoring/metrics":{"get":{"tags":["monitoring"],"summary":"Get Monitoring Metrics","description":"모니터링 메트릭 - /dashboard alias","operationId":"get_monitoring_metrics_api_v1_admin_monitoring_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/monitoring/dashboard":{"get":{"tags":["monitoring"],"summary":"Get Monitoring Dashboard","description":"종합 모니터링 대시보드 데이터","operationId":"get_monitoring_dashboard_api_v1_admin_monitoring_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/monitoring/alerts":{"get":{"tags":["monitoring"],"summary":"Get System Alerts","description":"시스템 알림 조회","operationId":"get_system_alerts_api_v1_admin_monitoring_alerts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/monitoring/real-time-stats":{"get":{"tags":["monitoring"],"summary":"Get Real Time Stats","description":"실시간 통계 데이터","operationId":"get_real_time_stats_api_v1_admin_monitoring_real_time_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/alert-settings/channels":{"get":{"tags":["alert-settings"],"summary":"Get All Channels","description":"모든 알림 채널 조회","operationId":"get_all_channels_api_v1_admin_alert_settings_channels_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ChannelResponse"},"type":"array","title":"Response Get All Channels Api V1 Admin Alert Settings Channels Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["alert-settings"],"summary":"Create Channel","description":"새 알림 채널 생성","operationId":"create_channel_api_v1_admin_alert_settings_channels_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Channel Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChannelResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/alert-settings/channels/{channel_id}":{"put":{"tags":["alert-settings"],"summary":"Update Channel","description":"알림 채널 수정","operationId":"update_channel_api_v1_admin_alert_settings_channels__channel_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Channel Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChannelUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChannelResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["alert-settings"],"summary":"Delete Channel","description":"알림 채널 삭제","operationId":"delete_channel_api_v1_admin_alert_settings_channels__channel_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Channel Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/alert-settings/channels/{channel_id}/test":{"post":{"tags":["alert-settings"],"summary":"Test Channel","description":"테스트 알림 발송","operationId":"test_channel_api_v1_admin_alert_settings_channels__channel_id__test_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Channel Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/alert-settings/logs":{"get":{"tags":["alert-settings"],"summary":"Get Notification Logs","description":"알림 발송 로그 조회","operationId":"get_notification_logs_api_v1_admin_alert_settings_logs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get Notification Logs Api V1 Admin Alert Settings Logs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/announcements":{"get":{"tags":["public-announcements"],"summary":"Get Public Announcements","description":"공개 공지사항 목록 (사이트에 표시할 용도, 인증 불필요)","operationId":"get_public_announcements_api_v1_public_announcements_get","parameters":[{"name":"locale","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locale"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/community":{"get":{"tags":["community-public","community-public"],"summary":"Get Community Info","description":"공개 커뮤니티 정보 조회\n\n인증 불필요 - 누구나 접근 가능\n활성화된 항목만 반환\n캐시: 30분 (커뮤니티 정보는 자주 변경되지 않음)","operationId":"get_community_info_api_v1_community_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunityPublicResponse"}}}}}}},"/api/v1/admin/content/reports":{"get":{"tags":["content-management"],"summary":"Get Content Reports","description":"콘텐츠 신고 목록 조회","operationId":"get_content_reports_api_v1_admin_content_reports_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"pending, reviewing, resolved, dismissed","title":"Status"},"description":"pending, reviewing, resolved, dismissed"},{"name":"content_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Type"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["content-management"],"summary":"Create Content Report","description":"콘텐츠 신고 생성","operationId":"create_content_report_api_v1_admin_content_reports_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentReportCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/content/reports/{report_id}":{"get":{"tags":["content-management"],"summary":"Get Content Report","description":"특정 신고 상세 조회","operationId":"get_content_report_api_v1_admin_content_reports__report_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/content/reports/{report_id}/action":{"post":{"tags":["content-management"],"summary":"Take Content Action","description":"신고에 대한 조치 실행","operationId":"take_content_action_api_v1_admin_content_reports__report_id__action_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentAction"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/content/moderation-rules":{"get":{"tags":["content-management"],"summary":"Get Moderation Rules","description":"모더레이션 규칙 목록 조회","operationId":"get_moderation_rules_api_v1_admin_content_moderation_rules_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},{"name":"rule_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rule Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["content-management"],"summary":"Create Moderation Rule","description":"모더레이션 규칙 생성","operationId":"create_moderation_rule_api_v1_admin_content_moderation_rules_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModerationRuleCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/content/moderation-rules/{rule_id}":{"put":{"tags":["content-management"],"summary":"Update Moderation Rule","description":"모더레이션 규칙 업데이트","operationId":"update_moderation_rule_api_v1_admin_content_moderation_rules__rule_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModerationRuleCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["content-management"],"summary":"Delete Moderation Rule","description":"모더레이션 규칙 삭제","operationId":"delete_moderation_rule_api_v1_admin_content_moderation_rules__rule_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/content/moderation-rules/{rule_id}/toggle":{"post":{"tags":["content-management"],"summary":"Toggle Moderation Rule","description":"모더레이션 규칙 활성화/비활성화","operationId":"toggle_moderation_rule_api_v1_admin_content_moderation_rules__rule_id__toggle_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}},{"name":"enabled","in":"query","required":true,"schema":{"type":"boolean","title":"Enabled"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/content/stats":{"get":{"tags":["content-management"],"summary":"Get Content Stats","description":"콘텐츠 관리 통계","operationId":"get_content_stats_api_v1_admin_content_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/content/flagged":{"get":{"tags":["content-management"],"summary":"Get Flagged Content","description":"자동 검열로 플래그된 콘텐츠 조회","operationId":"get_flagged_content_api_v1_admin_content_flagged_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"content_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"character, message, image","title":"Content Type"},"description":"character, message, image"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/content/flagged/{content_id}/review":{"post":{"tags":["content-management"],"summary":"Review Flagged Content","description":"플래그된 콘텐츠 검토","operationId":"review_flagged_content_api_v1_admin_content_flagged__content_id__review_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"content_id","in":"path","required":true,"schema":{"type":"string","title":"Content Id"}},{"name":"action_type","in":"query","required":true,"schema":{"type":"string","description":"approve, remove, escalate","title":"Action Type"},"description":"approve, remove, escalate"},{"name":"reason","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/content/banners":{"get":{"tags":["content-admin"],"summary":"Get Banners","description":"배너 목록 조회","operationId":"get_banners_api_v1_admin_content_banners_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"position","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Position"}},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["content-admin"],"summary":"Create Banner","description":"배너 생성","operationId":"create_banner_api_v1_admin_content_banners_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BannerCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/content/banners/{banner_id}":{"get":{"tags":["content-admin"],"summary":"Get Banner","description":"배너 상세 조회","operationId":"get_banner_api_v1_admin_content_banners__banner_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"banner_id","in":"path","required":true,"schema":{"type":"string","title":"Banner Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["content-admin"],"summary":"Update Banner","description":"배너 수정","operationId":"update_banner_api_v1_admin_content_banners__banner_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"banner_id","in":"path","required":true,"schema":{"type":"string","title":"Banner Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BannerUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["content-admin"],"summary":"Delete Banner","description":"배너 삭제","operationId":"delete_banner_api_v1_admin_content_banners__banner_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"banner_id","in":"path","required":true,"schema":{"type":"string","title":"Banner Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/content/announcements":{"get":{"tags":["content-admin"],"summary":"Get Announcements","description":"공지사항 목록 조회","operationId":"get_announcements_api_v1_admin_content_announcements_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"}},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},{"name":"is_pinned","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Pinned"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["content-admin"],"summary":"Create Announcement","description":"공지사항 생성","operationId":"create_announcement_api_v1_admin_content_announcements_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__admin__content_admin__AnnouncementCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/content/announcements/{announcement_id}":{"get":{"tags":["content-admin"],"summary":"Get Announcement","description":"공지사항 상세 조회","operationId":"get_announcement_api_v1_admin_content_announcements__announcement_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"announcement_id","in":"path","required":true,"schema":{"type":"string","title":"Announcement Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["content-admin"],"summary":"Update Announcement","description":"공지사항 수정","operationId":"update_announcement_api_v1_admin_content_announcements__announcement_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"announcement_id","in":"path","required":true,"schema":{"type":"string","title":"Announcement Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__admin__content_admin__AnnouncementUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["content-admin"],"summary":"Delete Announcement","description":"공지사항 삭제","operationId":"delete_announcement_api_v1_admin_content_announcements__announcement_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"announcement_id","in":"path","required":true,"schema":{"type":"string","title":"Announcement Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/content/public/banners":{"get":{"tags":["content-admin"],"summary":"Get Public Banners","description":"활성화된 배너 목록 조회 (공개)","operationId":"get_public_banners_api_v1_admin_content_public_banners_get","parameters":[{"name":"position","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Position"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/content/public/announcements":{"get":{"tags":["content-admin"],"summary":"Get Public Announcements","description":"활성화된 공지사항 목록 조회 (공개)","operationId":"get_public_announcements_api_v1_admin_content_public_announcements_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ai/chat":{"post":{"tags":["ai-router","ai-router"],"summary":"Chat With Character","description":"캐릭터와 채팅","operationId":"chat_with_character_api_v1_ai_chat_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/ai/models":{"get":{"tags":["ai-router","ai-router"],"summary":"Get Available Models","description":"사용 가능한 AI 모델 목록","operationId":"get_available_models_api_v1_ai_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ModelInfo"},"type":"array","title":"Response Get Available Models Api V1 Ai Models Get"}}}}}}},"/api/v1/ai/stats":{"get":{"tags":["ai-router","ai-router"],"summary":"Get Router Stats","description":"라우터 통계 (관리자 전용)","operationId":"get_router_stats_api_v1_ai_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouterStats"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/ai/health":{"get":{"tags":["ai-router","ai-router"],"summary":"Health Check","description":"헬스 체크","operationId":"health_check_api_v1_ai_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/ai/test-model":{"post":{"tags":["ai-router","ai-router"],"summary":"Test Model","description":"특정 모델 테스트 (관리자 전용)","operationId":"test_model_api_v1_ai_test_model_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"query","required":true,"schema":{"$ref":"#/components/schemas/ModelProvider"}},{"name":"model_key","in":"query","required":true,"schema":{"type":"string","title":"Model Key"}},{"name":"test_message","in":"query","required":false,"schema":{"type":"string","default":"Hello, how are you?","title":"Test Message"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ai-admin/analytics":{"get":{"tags":["ai-admin","ai-admin"],"summary":"Get Usage Analytics","description":"AI 사용량 분석 데이터 조회","operationId":"get_usage_analytics_api_v1_admin_ai_admin_analytics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"시작 날짜","title":"Start Date"},"description":"시작 날짜"},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"종료 날짜","title":"End Date"},"description":"종료 날짜"},{"name":"granularity","in":"query","required":false,"schema":{"type":"string","description":"데이터 세분화 (hourly, daily, weekly)","default":"daily","title":"Granularity"},"description":"데이터 세분화 (hourly, daily, weekly)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AIUsageAnalyticsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ai-admin/users/top-usage":{"get":{"tags":["ai-admin","ai-admin"],"summary":"Get Top Users By Usage","description":"사용량 상위 사용자 목록","operationId":"get_top_users_by_usage_api_v1_admin_ai_admin_users_top_usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ai-admin/characters/top-usage":{"get":{"tags":["ai-admin","ai-admin"],"summary":"Get Top Characters By Usage","description":"사용량 상위 캐릭터 목록","operationId":"get_top_characters_by_usage_api_v1_admin_ai_admin_characters_top_usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ai-admin/providers/status":{"get":{"tags":["ai-admin","ai-admin"],"summary":"Get Provider Statuses","description":"AI 제공업체 상태 조회","operationId":"get_provider_statuses_api_v1_admin_ai_admin_providers_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ProviderStatusResponse"},"type":"array","title":"Response Get Provider Statuses Api V1 Admin Ai Admin Providers Status Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/ai-admin/providers/health-check":{"post":{"tags":["ai-admin","ai-admin"],"summary":"Trigger Health Check","description":"모든 제공업체 헬스 체크 실행","operationId":"trigger_health_check_api_v1_admin_ai_admin_providers_health_check_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/ai-admin/budgets":{"post":{"tags":["ai-admin","ai-admin"],"summary":"Create Cost Budget","description":"비용 예산 생성","operationId":"create_cost_budget_api_v1_admin_ai_admin_budgets_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBudgetRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/ai-admin/budgets/alerts":{"get":{"tags":["ai-admin","ai-admin"],"summary":"Get Budget Alerts","description":"예산 초과 알림 목록","operationId":"get_budget_alerts_api_v1_admin_ai_admin_budgets_alerts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/BudgetAlertResponse"},"type":"array","title":"Response Get Budget Alerts Api V1 Admin Ai Admin Budgets Alerts Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/ai-admin/budgets/update-usage":{"post":{"tags":["ai-admin","ai-admin"],"summary":"Update Budget Usage","description":"모든 예산 사용량 업데이트","operationId":"update_budget_usage_api_v1_admin_ai_admin_budgets_update_usage_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/ai-admin/benchmark":{"post":{"tags":["ai-admin","ai-admin"],"summary":"Run Model Benchmark","description":"모델 성능 벤치마크 실행","operationId":"run_model_benchmark_api_v1_admin_ai_admin_benchmark_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkTestRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/ai-admin/benchmark/results/{category}":{"get":{"tags":["ai-admin","ai-admin"],"summary":"Get Benchmark Results","description":"벤치마크 결과 조회","operationId":"get_benchmark_results_api_v1_admin_ai_admin_benchmark_results__category__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"category","in":"path","required":true,"schema":{"type":"string","title":"Category"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"default":7,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ai-admin/routing-rules":{"get":{"tags":["ai-admin","ai-admin"],"summary":"Get Routing Rules","description":"라우팅 규칙 목록","operationId":"get_routing_rules_api_v1_admin_ai_admin_routing_rules_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["ai-admin","ai-admin"],"summary":"Create Routing Rule","description":"라우팅 규칙 생성","operationId":"create_routing_rule_api_v1_admin_ai_admin_routing_rules_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoutingRuleRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/ai-admin/models/config":{"get":{"tags":["ai-admin","ai-admin"],"summary":"Get Model Configurations","description":"모델 설정 조회","operationId":"get_model_configurations_api_v1_admin_ai_admin_models_config_get","security":[{"HTTPBearer":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["ai-admin","ai-admin"],"summary":"Update Model Configuration","description":"모델 설정 업데이트 (동적 적용)","operationId":"update_model_configuration_api_v1_admin_ai_admin_models_config_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_key","in":"query","required":true,"schema":{"type":"string","title":"Model Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelConfigRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ai-admin/dashboard":{"get":{"tags":["ai-admin","ai-admin"],"summary":"Get Admin Dashboard","description":"관리자 대시보드 데이터","operationId":"get_admin_dashboard_api_v1_admin_ai_admin_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/ai-admin/emergency/disable-provider":{"post":{"tags":["ai-admin","ai-admin"],"summary":"Emergency Disable Provider","description":"긴급 제공업체 비활성화","operationId":"emergency_disable_provider_api_v1_admin_ai_admin_emergency_disable_provider_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"query","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"reason","in":"query","required":true,"schema":{"type":"string","title":"Reason"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ai-admin/emergency/enable-provider":{"post":{"tags":["ai-admin","ai-admin"],"summary":"Emergency Enable Provider","description":"긴급 제공업체 재활성화","operationId":"emergency_enable_provider_api_v1_admin_ai_admin_emergency_enable_provider_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"query","required":true,"schema":{"type":"string","title":"Provider"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ai-admin/logs/errors":{"get":{"tags":["ai-admin","ai-admin"],"summary":"Get Error Logs","description":"에러 로그 조회","operationId":"get_error_logs_api_v1_admin_ai_admin_logs_errors_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":168,"minimum":1,"default":24,"title":"Hours"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ai-admin/exports/usage-report":{"get":{"tags":["ai-admin","ai-admin"],"summary":"Export Usage Report","description":"사용량 리포트 내보내기","operationId":"export_usage_report_api_v1_admin_ai_admin_exports_usage_report_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date-time","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date-time","title":"End Date"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: json, csv","default":"json","title":"Format"},"description":"Export format: json, csv"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/upload":{"post":{"tags":["documents","documents"],"summary":"Upload Document","description":"문서 업로드 및 처리 (QdrantRAGService 사용)\n\nArgs:\n    chatbot_id: 대상 챗봇 ID\n    file: 업로드할 파일\n    description: 문서 설명\n    category: 문서 카테고리\n    knowledge_scope: 지식 범위 ('base' = 판매자 기본 지식, 'custom' = 구매자 커스텀 지식)\n    current_user: 현재 사용자\n    db: 데이터베이스 세션\n    rag_service: RAG 서비스","operationId":"upload_document_api_v1_documents_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_document_api_v1_documents_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/documents/{chatbot_id}/list":{"get":{"tags":["documents","documents"],"summary":"List Documents","description":"챗봇의 문서 목록 조회","operationId":"list_documents_api_v1_documents__chatbot_id__list_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"chatbot_id","in":"path","required":true,"schema":{"type":"string","title":"Chatbot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/{chatbot_id}/search":{"post":{"tags":["documents","documents"],"summary":"Search Documents","description":"문서 검색 (QdrantRAGService 사용)","operationId":"search_documents_api_v1_documents__chatbot_id__search_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"chatbot_id","in":"path","required":true,"schema":{"type":"string","title":"Chatbot Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentFileSearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/{chatbot_id}/documents/{knowledge_id}":{"delete":{"tags":["documents","documents"],"summary":"Delete Document","description":"문서 삭제 (QdrantRAGService 사용)","operationId":"delete_document_api_v1_documents__chatbot_id__documents__knowledge_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"chatbot_id","in":"path","required":true,"schema":{"type":"string","title":"Chatbot Id"}},{"name":"knowledge_id","in":"path","required":true,"schema":{"type":"string","title":"Knowledge Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/{chatbot_id}/stats":{"get":{"tags":["documents","documents"],"summary":"Get Document Stats","description":"챗봇 문서 통계","operationId":"get_document_stats_api_v1_documents__chatbot_id__stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"chatbot_id","in":"path","required":true,"schema":{"type":"string","title":"Chatbot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/processing-status/{task_id}":{"get":{"tags":["documents","documents"],"summary":"Get Processing Status","description":"문서 처리 상태 조회 (백그라운드 작업)","operationId":"get_processing_status_api_v1_documents_processing_status__task_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/{chatbot_id}/analyze/{filename}":{"post":{"tags":["documents","documents"],"summary":"Analyze Document","description":"문서 고급 분석","operationId":"analyze_document_api_v1_documents__chatbot_id__analyze__filename__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"chatbot_id","in":"path","required":true,"schema":{"type":"string","title":"Chatbot Id"}},{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/{chatbot_id}/analysis-summary":{"get":{"tags":["documents","documents"],"summary":"Get Analysis Summary","description":"챗봇의 전체 문서 분석 요약","operationId":"get_analysis_summary_api_v1_documents__chatbot_id__analysis_summary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"chatbot_id","in":"path","required":true,"schema":{"type":"string","title":"Chatbot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/vector-billing/quota":{"get":{"tags":["vector-billing"],"summary":"Get User Quota","description":"사용자 벡터 DB 할당량 조회","operationId":"get_user_quota_api_v1_vector_billing_quota_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/vector-billing/usage":{"get":{"tags":["vector-billing"],"summary":"Get Monthly Usage","description":"월간 벡터 DB 사용량 조회","operationId":"get_monthly_usage_api_v1_vector_billing_usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"month","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"YYYY-MM format, defaults to current month","title":"Month"},"description":"YYYY-MM format, defaults to current month"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/vector-billing/usage/history":{"get":{"tags":["vector-billing"],"summary":"Get Usage History","description":"최근 N개월 사용량 이력 조회","operationId":"get_usage_history_api_v1_vector_billing_usage_history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"months","in":"query","required":false,"schema":{"type":"integer","maximum":12,"minimum":1,"description":"Number of months to retrieve","default":3,"title":"Months"},"description":"Number of months to retrieve"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/vector-billing/upgrade":{"post":{"tags":["vector-billing"],"summary":"Upgrade Plan","description":"플랜 업그레이드","operationId":"upgrade_plan_api_v1_vector_billing_upgrade_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanUpgradeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Upgrade Plan Api V1 Vector Billing Upgrade Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/vector-billing/billing/{month}":{"get":{"tags":["vector-billing"],"summary":"Get Monthly Bill","description":"월간 청구서 조회","operationId":"get_monthly_bill_api_v1_vector_billing_billing__month__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"month","in":"path","required":true,"schema":{"type":"string","title":"Month"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VectorBillingResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/vector-billing/pricing":{"get":{"tags":["vector-billing"],"summary":"Get Pricing Info","description":"가격 정보 조회","operationId":"get_pricing_info_api_v1_vector_billing_pricing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/vector-billing/stats":{"get":{"tags":["vector-billing"],"summary":"Get User Stats","description":"사용자 벡터 DB 통계 조회","operationId":"get_user_stats_api_v1_vector_billing_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/enhanced-vector-billing/realtime-stats":{"get":{"tags":["enhanced-vector-billing"],"summary":"Get Realtime Stats","description":"실시간 사용량 통계 조회","operationId":"get_realtime_stats_api_v1_enhanced_vector_billing_realtime_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/enhanced-vector-billing/predictions":{"get":{"tags":["enhanced-vector-billing"],"summary":"Get Usage Predictions","description":"사용량 예측","operationId":"get_usage_predictions_api_v1_enhanced_vector_billing_predictions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days_ahead","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"description":"예측할 일수","default":30,"title":"Days Ahead"},"description":"예측할 일수"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UsagePredictionResponse"},"title":"Response Get Usage Predictions Api V1 Enhanced Vector Billing Predictions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/enhanced-vector-billing/optimization-suggestions":{"get":{"tags":["enhanced-vector-billing"],"summary":"Get Optimization Suggestions","description":"AI 기반 최적화 제안","operationId":"get_optimization_suggestions_api_v1_enhanced_vector_billing_optimization_suggestions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/OptimizationSuggestionResponse"},"type":"array","title":"Response Get Optimization Suggestions Api V1 Enhanced Vector Billing Optimization Suggestions Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/enhanced-vector-billing/smart-auto-billing":{"post":{"tags":["enhanced-vector-billing"],"summary":"Setup Smart Auto Billing","description":"스마트 자동 결제 설정","operationId":"setup_smart_auto_billing_api_v1_enhanced_vector_billing_smart_auto_billing_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SmartAutoBillingRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/enhanced-vector-billing/advanced-analytics":{"get":{"tags":["enhanced-vector-billing"],"summary":"Get Advanced Analytics","description":"고급 분석 데이터","operationId":"get_advanced_analytics_api_v1_enhanced_vector_billing_advanced_analytics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":30,"description":"분석할 일수","default":90,"title":"Days"},"description":"분석할 일수"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/enhanced-vector-billing/enterprise-discount":{"post":{"tags":["enhanced-vector-billing"],"summary":"Calculate Enterprise Discount","description":"기업 할인 계산","operationId":"calculate_enterprise_discount_api_v1_enhanced_vector_billing_enterprise_discount_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnterpriseDiscountRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/enhanced-vector-billing/cost-optimization-dashboard":{"get":{"tags":["enhanced-vector-billing"],"summary":"Get Cost Optimization Dashboard","description":"비용 최적화 대시보드","operationId":"get_cost_optimization_dashboard_api_v1_enhanced_vector_billing_cost_optimization_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/enhanced-vector-billing/admin/usage-analytics":{"get":{"tags":["enhanced-vector-billing"],"summary":"Get System Usage Analytics","description":"시스템 전체 사용량 분석 (관리자용)","operationId":"get_system_usage_analytics_api_v1_enhanced_vector_billing_admin_usage_analytics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"분석할 일수","default":30,"title":"Days"},"description":"분석할 일수"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/enhanced-vector-billing/admin/send-optimization-alerts":{"post":{"tags":["enhanced-vector-billing"],"summary":"Send Optimization Alerts","description":"모든 사용자에게 최적화 알림 전송 (관리자용)","operationId":"send_optimization_alerts_api_v1_enhanced_vector_billing_admin_send_optimization_alerts_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/pricing/plans":{"get":{"tags":["pricing-admin"],"summary":"Get All Plans","description":"모든 요금제 조회 (슈퍼관리자)","operationId":"get_all_plans_api_v1_admin_pricing_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PricingPlanResponse"},"type":"array","title":"Response Get All Plans Api V1 Admin Pricing Plans Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["pricing-admin"],"summary":"Create Plan","description":"새 요금제 생성","operationId":"create_plan_api_v1_admin_pricing_plans_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PricingPlanCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Plan Api V1 Admin Pricing Plans Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/pricing/plans/{plan_id}":{"put":{"tags":["pricing-admin"],"summary":"Update Plan","description":"요금제 수정","operationId":"update_plan_api_v1_admin_pricing_plans__plan_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Plan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PricingPlanUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["pricing-admin"],"summary":"Delete Plan","description":"요금제 비활성화 (삭제)","operationId":"delete_plan_api_v1_admin_pricing_plans__plan_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/pricing/models":{"get":{"tags":["pricing-admin"],"summary":"Get All Models","description":"모든 AI 모델 과금 설정 조회","operationId":"get_all_models_api_v1_admin_pricing_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/AIModelPricingResponse"},"type":"array","title":"Response Get All Models Api V1 Admin Pricing Models Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["pricing-admin"],"summary":"Create Model Pricing","description":"AI 모델 과금 설정 생성","operationId":"create_model_pricing_api_v1_admin_pricing_models_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AIModelPricingCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Model Pricing Api V1 Admin Pricing Models Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/pricing/models/{model_id}":{"put":{"tags":["pricing-admin"],"summary":"Update Model Pricing","description":"AI 모델 과금 설정 수정","operationId":"update_model_pricing_api_v1_admin_pricing_models__model_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Model Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AIModelPricingUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/pricing/models/{model_id}/multiplier":{"post":{"tags":["pricing-admin"],"summary":"Update Pricing Multiplier","description":"모델 가격 배율 조정 (Copilot 스타일)","operationId":"update_pricing_multiplier_api_v1_admin_pricing_models__model_id__multiplier_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Model Id"}},{"name":"multiplier","in":"query","required":true,"schema":{"type":"number","description":"Pricing multiplier (e.g., 1.0, 0.3, 2.0)","title":"Multiplier"},"description":"Pricing multiplier (e.g., 1.0, 0.3, 2.0)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/pricing/credits/{user_id}":{"get":{"tags":["pricing-admin"],"summary":"Get User Credits","description":"사용자 크레딧 조회","operationId":"get_user_credits_api_v1_admin_pricing_credits__user_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreditResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/pricing/credits/{user_id}/adjust":{"post":{"tags":["pricing-admin"],"summary":"Adjust User Credits","description":"사용자 크레딧 조정","operationId":"adjust_user_credits_api_v1_admin_pricing_credits__user_id__adjust_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreditAdjustment"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/pricing/credits/bulk-grant":{"post":{"tags":["pricing-admin"],"summary":"Bulk Grant Credits","description":"여러 사용자에게 크레딧 일괄 지급","operationId":"bulk_grant_credits_api_v1_admin_pricing_credits_bulk_grant_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"credits","in":"query","required":true,"schema":{"type":"integer","exclusiveMaximum":1000000000000,"exclusiveMinimum":0,"description":"Credits to grant each user","title":"Credits"},"description":"Credits to grant each user"},{"name":"reason","in":"query","required":true,"schema":{"type":"string","description":"Reason for credit grant","title":"Reason"},"description":"Reason for credit grant"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"string","format":"uuid"},"title":"User Ids"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/pricing/users-with-credits":{"get":{"tags":["pricing-admin"],"summary":"Get All Users With Credits","description":"모든 사용자와 크레딧 정보를 한 번에 조회 (성능 최적화)\n\nN+1 문제 해결:\n- Before: 1 + N번 API 호출 (698번)\n- After: 1번 JOIN 쿼리\n- 성능: 70초 → 1초 (70배 빠름)","operationId":"get_all_users_with_credits_api_v1_admin_pricing_users_with_credits_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Skip N users","default":0,"title":"Skip"},"description":"Skip N users"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"description":"Max users per request","default":500,"title":"Limit"},"description":"Max users per request"},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","description":"Include inactive users","default":false,"title":"Include Inactive"},"description":"Include inactive users"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/pricing/stats/revenue":{"get":{"tags":["pricing-admin"],"summary":"Get Revenue Stats","description":"수익 통계 조회","operationId":"get_revenue_stats_api_v1_admin_pricing_stats_revenue_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"months","in":"query","required":false,"schema":{"type":"integer","maximum":24,"minimum":1,"description":"Number of months to analyze","default":6,"title":"Months"},"description":"Number of months to analyze"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevenueStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/pricing/stats/usage":{"get":{"tags":["pricing-admin"],"summary":"Get Usage Analytics","description":"사용량 분석 (실제 구현)","operationId":"get_usage_analytics_api_v1_admin_pricing_stats_usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"service_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by service type","title":"Service Type"},"description":"Filter by service type"},{"name":"period","in":"query","required":false,"schema":{"type":"string","description":"Analysis period (week/month/quarter)","default":"month","title":"Period"},"description":"Analysis period (week/month/quarter)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/pricing/presets/copilot-style":{"post":{"tags":["pricing-admin"],"summary":"Setup Copilot Style Pricing","description":"GitHub Copilot 스타일 요금제 프리셋 생성","operationId":"setup_copilot_style_pricing_api_v1_admin_pricing_presets_copilot_style_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/pricing/calculator":{"get":{"tags":["pricing-admin"],"summary":"Pricing Calculator","description":"요금 계산기 (테스트용)","operationId":"pricing_calculator_api_v1_admin_pricing_calculator_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"plan_name","in":"query","required":true,"schema":{"type":"string","description":"Plan name to calculate","title":"Plan Name"},"description":"Plan name to calculate"},{"name":"ai_input_tokens","in":"query","required":false,"schema":{"type":"integer","description":"AI input tokens","default":0,"title":"Ai Input Tokens"},"description":"AI input tokens"},{"name":"ai_output_tokens","in":"query","required":false,"schema":{"type":"integer","description":"AI output tokens","default":0,"title":"Ai Output Tokens"},"description":"AI output tokens"},{"name":"vector_documents","in":"query","required":false,"schema":{"type":"integer","description":"Vector documents","default":0,"title":"Vector Documents"},"description":"Vector documents"},{"name":"vector_searches","in":"query","required":false,"schema":{"type":"integer","description":"Vector searches","default":0,"title":"Vector Searches"},"description":"Vector searches"},{"name":"characters_created","in":"query","required":false,"schema":{"type":"integer","description":"Characters created","default":0,"title":"Characters Created"},"description":"Characters created"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/pricing/packages":{"get":{"tags":["pricing-admin"],"summary":"Get All Credit Packages","description":"모든 크레딧 패키지 조회 (관리자)","operationId":"get_all_credit_packages_api_v1_admin_pricing_packages_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CreditPackageResponse"},"type":"array","title":"Response Get All Credit Packages Api V1 Admin Pricing Packages Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["pricing-admin"],"summary":"Create Credit Package","description":"새 크레딧 패키지 생성","operationId":"create_credit_package_api_v1_admin_pricing_packages_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditPackageCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Credit Package Api V1 Admin Pricing Packages Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/pricing/packages/{package_id}":{"put":{"tags":["pricing-admin"],"summary":"Update Credit Package","description":"크레딧 패키지 수정","operationId":"update_credit_package_api_v1_admin_pricing_packages__package_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"package_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Package Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditPackageUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["pricing-admin"],"summary":"Delete Credit Package","description":"크레딧 패키지 비활성화 (삭제)","operationId":"delete_credit_package_api_v1_admin_pricing_packages__package_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"package_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Package Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ai-cost/dashboard":{"get":{"tags":["ai-cost-management"],"summary":"Get Ai Cost Dashboard","description":"AI 비용 관리 대시보드 데이터","operationId":"get_ai_cost_dashboard_api_v1_admin_ai_cost_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/ai-cost/summary":{"get":{"tags":["ai-cost-management"],"summary":"Get Ai Cost Summary","description":"AI 비용 요약 - /dashboard의 alias","operationId":"get_ai_cost_summary_api_v1_admin_ai_cost_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/ai-cost/model-config":{"post":{"tags":["ai-cost-management"],"summary":"Save Model Config","description":"모델 설정 저장","operationId":"save_model_config_api_v1_admin_ai_cost_model_config_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelConfigCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/ai-cost/usage-limits":{"post":{"tags":["ai-cost-management"],"summary":"Save Usage Limits","description":"사용량 제한 저장","operationId":"save_usage_limits_api_v1_admin_ai_cost_usage_limits_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageLimitCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["ai-cost-management"],"summary":"Get Usage Limits","description":"저장된 사용량 제한 조회 (N+1 fix: pagination 추가)","operationId":"get_usage_limits_api_v1_admin_ai_cost_usage_limits_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ai-cost/cost-alerts":{"post":{"tags":["ai-cost-management"],"summary":"Save Cost Alerts","description":"비용 경고 저장","operationId":"save_cost_alerts_api_v1_admin_ai_cost_cost_alerts_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CostAlertCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["ai-cost-management"],"summary":"Get Cost Alerts","description":"저장된 비용 경고 조회 (N+1 fix: pagination 추가)","operationId":"get_cost_alerts_api_v1_admin_ai_cost_cost_alerts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ai-cost/optimization-rules":{"post":{"tags":["ai-cost-management"],"summary":"Save Optimization Rules","description":"최적화 규칙 저장","operationId":"save_optimization_rules_api_v1_admin_ai_cost_optimization_rules_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptimizationRuleCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["ai-cost-management"],"summary":"Get Optimization Rules","description":"저장된 최적화 규칙 조회 (N+1 fix: pagination 추가)","operationId":"get_optimization_rules_api_v1_admin_ai_cost_optimization_rules_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ai-cost/model-configs":{"get":{"tags":["ai-cost-management"],"summary":"Get Model Configs","description":"저장된 모델 설정 조회 (N+1 fix: pagination 추가)","operationId":"get_model_configs_api_v1_admin_ai_cost_model_configs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ai-cost/models":{"get":{"tags":["ai-cost-management"],"summary":"Get Model Configs","description":"AI 모델 설정 목록","operationId":"get_model_configs_api_v1_admin_ai_cost_models_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Active Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["ai-cost-management"],"summary":"Create Model Config","description":"AI 모델 설정 생성","operationId":"create_model_config_api_v1_admin_ai_cost_models_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelConfigCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ai-cost/alerts":{"get":{"tags":["ai-cost-management"],"summary":"Get Cost Alerts","description":"비용 경고 목록","operationId":"get_cost_alerts_api_v1_admin_ai_cost_alerts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["ai-cost-management"],"summary":"Create Cost Alert","description":"비용 경고 생성","operationId":"create_cost_alert_api_v1_admin_ai_cost_alerts_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CostAlertCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ai-cost/limits":{"get":{"tags":["ai-cost-management"],"summary":"Get Usage Limits","description":"사용량 제한 목록","operationId":"get_usage_limits_api_v1_admin_ai_cost_limits_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["ai-cost-management"],"summary":"Create Usage Limit","description":"사용량 제한 생성","operationId":"create_usage_limit_api_v1_admin_ai_cost_limits_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageLimitCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ai-cost/forecast":{"get":{"tags":["ai-cost-management"],"summary":"Get Cost Forecast","description":"비용 예측 (실제 구현)","operationId":"get_cost_forecast_api_v1_admin_ai_cost_forecast_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"}},{"name":"model_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ai-cost/performance":{"get":{"tags":["ai-cost-management"],"summary":"Get Model Performance","description":"모델 성능 메트릭","operationId":"get_model_performance_api_v1_admin_ai_cost_performance_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/image-models/":{"get":{"tags":["image-model-config"],"summary":"Get All Image Models","description":"모든 이미지 모델 설정 조회","operationId":"get_all_image_models_api_v1_admin_image_models__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ImageModelConfigResponse"},"type":"array","title":"Response Get All Image Models Api V1 Admin Image Models  Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["image-model-config"],"summary":"Create Image Model","description":"이미지 모델 설정 생성","operationId":"create_image_model_api_v1_admin_image_models__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageModelConfigCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageModelConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/image-models/{model_id}":{"put":{"tags":["image-model-config"],"summary":"Update Image Model","description":"이미지 모델 설정 업데이트","operationId":"update_image_model_api_v1_admin_image_models__model_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageModelConfigUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageModelConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["image-model-config"],"summary":"Delete Image Model","description":"이미지 모델 설정 삭제","operationId":"delete_image_model_api_v1_admin_image_models__model_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/image-models/test-cost":{"post":{"tags":["image-model-config"],"summary":"Test Cost Calculation","description":"비용 계산 테스트","operationId":"test_cost_calculation_api_v1_admin_image_models_test_cost_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"query","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"model_name","in":"query","required":true,"schema":{"type":"string","title":"Model Name"}},{"name":"resolution","in":"query","required":false,"schema":{"type":"string","default":"normal","title":"Resolution"}},{"name":"quality","in":"query","required":false,"schema":{"type":"string","default":"standard","title":"Quality"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/image-models/seed-defaults":{"post":{"tags":["image-model-config"],"summary":"Seed Default Models","description":"기본 이미지 모델 설정 초기화","operationId":"seed_default_models_api_v1_admin_image_models_seed_defaults_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/function-ai-models/models":{"get":{"tags":["function-ai-models"],"summary":"Get All Function Models","description":"모든 기능별 AI 모델 설정 조회","operationId":"get_all_function_models_api_v1_admin_function_ai_models_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/function-ai-models/models/active":{"get":{"tags":["function-ai-models"],"summary":"Get Active Function Models","description":"활성화된 기능별 AI 모델만 조회","operationId":"get_active_function_models_api_v1_admin_function_ai_models_models_active_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/function-ai-models/models/{function_name}":{"get":{"tags":["function-ai-models"],"summary":"Get Function Model","description":"특정 기능의 AI 모델 설정 조회","operationId":"get_function_model_api_v1_admin_function_ai_models_models__function_name__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"function_name","in":"path","required":true,"schema":{"type":"string","title":"Function Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["function-ai-models"],"summary":"Update Function Model","description":"기능별 AI 모델 설정 업데이트 (관리자 전용)","operationId":"update_function_model_api_v1_admin_function_ai_models_models__function_name__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"function_name","in":"path","required":true,"schema":{"type":"string","title":"Function Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FunctionAIModelUpdateNew"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/function-ai-models/usage-stats":{"get":{"tags":["function-ai-models"],"summary":"Get Usage Statistics","description":"기능별 AI 모델 사용 통계 조회 (관리자 전용)","operationId":"get_usage_statistics_api_v1_admin_function_ai_models_usage_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/function-ai-models/models/{function_name}/increment-usage":{"post":{"tags":["function-ai-models"],"summary":"Increment Usage","description":"AI 모델 사용량 증가 (내부 API)\n실제 채팅/생성 작업 후 호출되어 통계 업데이트","operationId":"increment_usage_api_v1_admin_function_ai_models_models__function_name__increment_usage_post","parameters":[{"name":"function_name","in":"path","required":true,"schema":{"type":"string","title":"Function Name"}},{"name":"tokens_used","in":"query","required":true,"schema":{"type":"integer","title":"Tokens Used"}},{"name":"cost","in":"query","required":true,"schema":{"type":"number","title":"Cost"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dashboard/comprehensive":{"get":{"tags":["dashboard-analytics"],"summary":"Get Comprehensive Dashboard","description":"종합 대시보드 데이터","operationId":"get_comprehensive_dashboard_api_v1_dashboard_comprehensive_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"분석 기간 (일)","default":30,"title":"Days"},"description":"분석 기간 (일)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dashboard/analytics/revenue":{"get":{"tags":["dashboard-analytics"],"summary":"Get Revenue Analytics","description":"매출 분석 데이터","operationId":"get_revenue_analytics_api_v1_dashboard_analytics_revenue_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"분석 기간 (일)","default":30,"title":"Days"},"description":"분석 기간 (일)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dashboard/analytics/user-behavior":{"get":{"tags":["dashboard-analytics"],"summary":"Get User Behavior Analytics","description":"사용자 행동 분석","operationId":"get_user_behavior_analytics_api_v1_dashboard_analytics_user_behavior_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"분석 기간 (일)","default":30,"title":"Days"},"description":"분석 기간 (일)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dashboard/analytics/character-performance":{"get":{"tags":["dashboard-analytics"],"summary":"Get Character Performance","description":"캐릭터 성과 분석","operationId":"get_character_performance_api_v1_dashboard_analytics_character_performance_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"분석 기간 (일)","default":30,"title":"Days"},"description":"분석 기간 (일)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dashboard/analytics/cohort":{"get":{"tags":["dashboard-analytics"],"summary":"Get Cohort Analysis","description":"코호트 분석","operationId":"get_cohort_analysis_api_v1_dashboard_analytics_cohort_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"weeks","in":"query","required":false,"schema":{"type":"integer","maximum":52,"minimum":4,"description":"분석 기간 (주)","default":12,"title":"Weeks"},"description":"분석 기간 (주)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dashboard/analytics/predictions":{"get":{"tags":["dashboard-analytics"],"summary":"Get Predictive Analytics","description":"예측 분석","operationId":"get_predictive_analytics_api_v1_dashboard_analytics_predictions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":7,"description":"예측 기준 기간 (일)","default":30,"title":"Days"},"description":"예측 기준 기간 (일)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/monitoring/alerts/active":{"get":{"tags":["system-monitoring","system_monitoring"],"summary":"Get Active Alerts","description":"활성 알람 조회","operationId":"get_active_alerts_api_v1_admin_monitoring_alerts_active_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/monitoring/alerts/history":{"get":{"tags":["system-monitoring","system_monitoring"],"summary":"Get Alert History","description":"알람 히스토리 조회","operationId":"get_alert_history_api_v1_admin_monitoring_alerts_history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","default":24,"title":"Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/monitoring/alerts/check":{"post":{"tags":["system-monitoring","system_monitoring"],"summary":"Force Alert Check","description":"수동 알람 체크 실행","operationId":"force_alert_check_api_v1_admin_monitoring_alerts_check_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/monitoring/notifications/test":{"post":{"tags":["system-monitoring","system_monitoring"],"summary":"Test Notifications","description":"알림 시스템 테스트","operationId":"test_notifications_api_v1_admin_monitoring_notifications_test_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/monitoring/notifications/config":{"get":{"tags":["system-monitoring","system_monitoring"],"summary":"Get Notification Config","description":"알림 설정 조회","operationId":"get_notification_config_api_v1_admin_monitoring_notifications_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/monitoring/test-alert":{"post":{"tags":["system-monitoring","system_monitoring"],"summary":"Create Test Alert","description":"테스트 알람 생성","operationId":"create_test_alert_api_v1_admin_monitoring_test_alert_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"alert_type","in":"query","required":false,"schema":{"type":"string","default":"test","title":"Alert Type"}},{"name":"severity","in":"query","required":false,"schema":{"type":"string","default":"medium","title":"Severity"}},{"name":"message","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/monitoring/status":{"get":{"tags":["system-monitoring","system_monitoring"],"summary":"Get Monitoring Status","description":"모니터링 시스템 상태","operationId":"get_monitoring_status_api_v1_admin_monitoring_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/monitoring/thresholds/update":{"post":{"tags":["system-monitoring","system_monitoring"],"summary":"Update Alert Thresholds","description":"알람 임계값 업데이트\n\n지원하는 임계값:\n- cpu_warning: CPU 경고 임계값 (%) - 기본값 70\n- cpu_critical: CPU 심각 임계값 (%) - 기본값 90\n- memory_warning: 메모리 경고 임계값 (%) - 기본값 80\n- memory_critical: 메모리 심각 임계값 (%) - 기본값 90\n- disk_warning: 디스크 경고 임계값 (%) - 기본값 80\n- disk_critical: 디스크 심각 임계값 (%) - 기본값 90\n- error_rate_warning: 에러율 경고 임계값 (%) - 기본값 1\n- error_rate_critical: 에러율 심각 임계값 (%) - 기본값 5","operationId":"update_alert_thresholds_api_v1_admin_monitoring_thresholds_update_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":{"type":"number"},"type":"object","title":"Thresholds"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/monitoring/thresholds":{"get":{"tags":["system-monitoring","system_monitoring"],"summary":"Get Alert Thresholds","description":"현재 알람 임계값 조회","operationId":"get_alert_thresholds_api_v1_admin_monitoring_thresholds_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/monitoring/metrics/real-time":{"get":{"tags":["system-monitoring","system_monitoring"],"summary":"Get Real Time Metrics","description":"실시간 메트릭 조회","operationId":"get_real_time_metrics_api_v1_admin_monitoring_metrics_real_time_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/monitoring/logs/recent":{"get":{"tags":["system-monitoring","system_monitoring"],"summary":"Get Recent System Logs","description":"최근 시스템 로그 조회 (실제 구현)","operationId":"get_recent_system_logs_api_v1_admin_monitoring_logs_recent_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"level","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Level"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/enhanced-dashboard/metrics/comprehensive":{"get":{"tags":["enhanced-dashboard","enhanced_dashboard"],"summary":"Get Comprehensive Metrics","description":"종합 시스템 메트릭 조회","operationId":"get_comprehensive_metrics_api_v1_admin_enhanced_dashboard_metrics_comprehensive_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/enhanced-dashboard/metrics/system":{"get":{"tags":["enhanced-dashboard","enhanced_dashboard"],"summary":"Get System Metrics","description":"시스템 메트릭만 조회","operationId":"get_system_metrics_api_v1_admin_enhanced_dashboard_metrics_system_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/enhanced-dashboard/metrics/business":{"get":{"tags":["enhanced-dashboard","enhanced_dashboard"],"summary":"Get Business Metrics","description":"비즈니스 메트릭 조회","operationId":"get_business_metrics_api_v1_admin_enhanced_dashboard_metrics_business_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/enhanced-dashboard/metrics/database":{"get":{"tags":["enhanced-dashboard","enhanced_dashboard"],"summary":"Get Database Metrics","description":"데이터베이스 메트릭 조회","operationId":"get_database_metrics_api_v1_admin_enhanced_dashboard_metrics_database_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/enhanced-dashboard/metrics/redis":{"get":{"tags":["enhanced-dashboard","enhanced_dashboard"],"summary":"Get Redis Metrics","description":"Redis 메트릭 조회","operationId":"get_redis_metrics_api_v1_admin_enhanced_dashboard_metrics_redis_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/enhanced-dashboard/metrics/historical":{"get":{"tags":["enhanced-dashboard","enhanced_dashboard"],"summary":"Get Historical Metrics","description":"과거 메트릭 데이터 조회","operationId":"get_historical_metrics_api_v1_admin_enhanced_dashboard_metrics_historical_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":168,"minimum":1,"default":24,"title":"Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/enhanced-dashboard/analytics/trends":{"get":{"tags":["enhanced-dashboard","enhanced_dashboard"],"summary":"Get Performance Trends","description":"성능 트렌드 분석","operationId":"get_performance_trends_api_v1_admin_enhanced_dashboard_analytics_trends_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/enhanced-dashboard/dashboard/overview":{"get":{"tags":["enhanced-dashboard","enhanced_dashboard"],"summary":"Get Dashboard Overview","description":"대시보드 개요 정보","operationId":"get_dashboard_overview_api_v1_admin_enhanced_dashboard_dashboard_overview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/enhanced-dashboard/metrics/snapshot":{"post":{"tags":["enhanced-dashboard","enhanced_dashboard"],"summary":"Create Metrics Snapshot","description":"현재 시점의 메트릭 스냅샷 생성 및 저장","operationId":"create_metrics_snapshot_api_v1_admin_enhanced_dashboard_metrics_snapshot_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/enhanced-dashboard/health-score":{"get":{"tags":["enhanced-dashboard","enhanced_dashboard"],"summary":"Get System Health Score","description":"시스템 전반적인 건강도 점수 계산","operationId":"get_system_health_score_api_v1_admin_enhanced_dashboard_health_score_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/logs/analysis":{"get":{"tags":["log-analysis","log_analysis"],"summary":"Get Log Analysis","description":"로그 분석 결과 조회","operationId":"get_log_analysis_api_v1_admin_logs_analysis_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":24,"minimum":1,"description":"분석할 시간 범위 (시간)","default":1,"title":"Hours"},"description":"분석할 시간 범위 (시간)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/logs/search":{"get":{"tags":["log-analysis","log_analysis"],"summary":"Search Logs","description":"로그 검색","operationId":"search_logs_api_v1_admin_logs_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","description":"검색 쿼리","title":"Query"},"description":"검색 쿼리"},{"name":"level","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"로그 레벨 필터 (DEBUG, INFO, WARNING, ERROR, CRITICAL)","title":"Level"},"description":"로그 레벨 필터 (DEBUG, INFO, WARNING, ERROR, CRITICAL)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"카테고리 필터","title":"Category"},"description":"카테고리 필터"},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":24,"minimum":1,"description":"검색 시간 범위 (시간)","default":1,"title":"Hours"},"description":"검색 시간 범위 (시간)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"최대 결과 수","default":100,"title":"Limit"},"description":"최대 결과 수"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/logs/statistics":{"get":{"tags":["log-analysis","log_analysis"],"summary":"Get Log Statistics","description":"로그 통계 정보 조회","operationId":"get_log_statistics_api_v1_admin_logs_statistics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/logs/patterns":{"get":{"tags":["log-analysis","log_analysis"],"summary":"Get Error Patterns","description":"에러 패턴 정보 조회","operationId":"get_error_patterns_api_v1_admin_logs_patterns_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/logs/trends":{"get":{"tags":["log-analysis","log_analysis"],"summary":"Get Log Trends","description":"로그 트렌드 분석","operationId":"get_log_trends_api_v1_admin_logs_trends_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":168,"minimum":1,"description":"트렌드 분석 시간 범위 (시간)","default":24,"title":"Hours"},"description":"트렌드 분석 시간 범위 (시간)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/logs/categories":{"get":{"tags":["log-analysis","log_analysis"],"summary":"Get Log Categories","description":"로그 카테고리별 통계 조회","operationId":"get_log_categories_api_v1_admin_logs_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/logs/process-sample":{"post":{"tags":["log-analysis","log_analysis"],"summary":"Process Sample Logs","description":"샘플 로그 처리 (테스트용)","operationId":"process_sample_logs_api_v1_admin_logs_process_sample_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/logs/dashboard":{"get":{"tags":["log-analysis","log_analysis"],"summary":"Get Log Dashboard","description":"종합 로그 대시보드","operationId":"get_log_dashboard_api_v1_admin_logs_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/notifications/":{"get":{"tags":["notifications"],"summary":"Get Notifications Root","description":"알림 목록 조회 - /alerts alias","operationId":"get_notifications_root_api_v1_notifications__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notifications":{"get":{"tags":["notifications"],"summary":"Get Notifications Root","description":"알림 목록 조회 - /alerts alias","operationId":"get_notifications_root_api_v1_notifications_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notifications/alerts":{"get":{"tags":["notifications"],"summary":"Get User Alerts","description":"사용자의 알림 설정 목록 조회 (페이지네이션 지원)","operationId":"get_user_alerts_api_v1_notifications_alerts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AlertResponse"},"title":"Response Get User Alerts Api V1 Notifications Alerts Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["notifications"],"summary":"Create Alert","description":"새 알림 설정 생성","operationId":"create_alert_api_v1_notifications_alerts_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notifications/alerts/{alert_id}":{"put":{"tags":["notifications"],"summary":"Update Alert","description":"알림 설정 업데이트","operationId":"update_alert_api_v1_notifications_alerts__alert_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["notifications"],"summary":"Delete Alert","description":"알림 설정 삭제","operationId":"delete_alert_api_v1_notifications_alerts__alert_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notifications/check-usage-alerts":{"post":{"tags":["notifications"],"summary":"Trigger Usage Alerts Check","description":"사용량 알림 확인 수동 트리거 (관리자 전용)","operationId":"trigger_usage_alerts_check_api_v1_notifications_check_usage_alerts_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/notifications/test-email":{"post":{"tags":["notifications"],"summary":"Send Test Email","description":"테스트 이메일 발송","operationId":"send_test_email_api_v1_notifications_test_email_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestEmailRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/notifications/settings":{"get":{"tags":["notifications"],"summary":"Get Notification Settings","description":"사용자 알림 설정 조회","operationId":"get_notification_settings_api_v1_notifications_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["notifications"],"summary":"Update Notification Settings","description":"사용자 알림 설정 업데이트","operationId":"update_notification_settings_api_v1_notifications_settings_put","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Settings"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/notifications/history":{"get":{"tags":["notifications"],"summary":"Get Notification History","description":"알림 발송 이력 조회 (N+1 최적화: selectinload로 API 키 정보 미리 로드)","operationId":"get_notification_history_api_v1_notifications_history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/payments/plans":{"get":{"tags":["payments"],"summary":"Get Available Plans","description":"사용 가능한 요금제 목록 조회","operationId":"get_available_plans_api_v1_payments_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ExternalPricingPlan"},"type":"array","title":"Response Get Available Plans Api V1 Payments Plans Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/payments/subscriptions":{"get":{"tags":["payments"],"summary":"Get User Subscriptions","description":"사용자의 구독 목록 조회 (Direct SQL to avoid ORM mapping issues)","operationId":"get_user_subscriptions_api_v1_payments_subscriptions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PaymentSubscriptionResponse"},"type":"array","title":"Response Get User Subscriptions Api V1 Payments Subscriptions Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["payments"],"summary":"Create Subscription","description":"새 구독 생성","operationId":"create_subscription_api_v1_payments_subscriptions_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentSubscriptionCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Subscription Api V1 Payments Subscriptions Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/payments/subscriptions/{subscription_id}":{"delete":{"tags":["payments"],"summary":"Cancel Subscription","description":"구독 취소","operationId":"cancel_subscription_api_v1_payments_subscriptions__subscription_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/payments/payment-intents":{"post":{"tags":["payments"],"summary":"Create Payment Intent","description":"결제 의도 생성 (일회성 결제용)","operationId":"create_payment_intent_api_v1_payments_payment_intents_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentIntentCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Payment Intent Api V1 Payments Payment Intents Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/payments/payment-methods":{"get":{"tags":["payments"],"summary":"Get Payment Methods","description":"사용자의 결제 방법 목록 조회","operationId":"get_payment_methods_api_v1_payments_payment_methods_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PaymentMethodResponse"},"type":"array","title":"Response Get Payment Methods Api V1 Payments Payment Methods Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/payments/payment-methods/{payment_method_id}/set-default":{"post":{"tags":["payments"],"summary":"Set Default Payment Method","description":"기본 결제 방법 설정","operationId":"set_default_payment_method_api_v1_payments_payment_methods__payment_method_id__set_default_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"payment_method_id","in":"path","required":true,"schema":{"type":"string","title":"Payment Method Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/payments/webhooks/stripe":{"post":{"tags":["payments"],"summary":"Stripe Webhook","description":"Stripe 웹훅 엔드포인트","operationId":"stripe_webhook_api_v1_payments_webhooks_stripe_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/payments/billing-history":{"get":{"tags":["payments"],"summary":"Get Billing History","description":"청구 내역 조회","operationId":"get_billing_history_api_v1_payments_billing_history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/payments/usage-summary/{subscription_id}":{"get":{"tags":["payments"],"summary":"Get Subscription Usage Summary","description":"구독별 사용량 요약","operationId":"get_subscription_usage_summary_api_v1_payments_usage_summary__subscription_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/docs/generate":{"post":{"tags":["documentation"],"summary":"Generate Api Documentation","description":"API 문서 생성 (관리자 전용)","operationId":"generate_api_documentation_api_v1_docs_generate_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/docs/openapi.json":{"get":{"tags":["documentation"],"summary":"Get Openapi Schema","description":"OpenAPI 스키마 조회","operationId":"get_openapi_schema_api_v1_docs_openapi_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/docs/markdown":{"get":{"tags":["documentation"],"summary":"Get Markdown Documentation","description":"Markdown 형식 API 문서 조회","operationId":"get_markdown_documentation_api_v1_docs_markdown_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/docs/postman":{"get":{"tags":["documentation"],"summary":"Get Postman Collection","description":"Postman 컬렉션 조회","operationId":"get_postman_collection_api_v1_docs_postman_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/docs/sdk-examples/{language}":{"get":{"tags":["documentation"],"summary":"Get Sdk Examples","description":"SDK 예제 코드 조회","operationId":"get_sdk_examples_api_v1_docs_sdk_examples__language__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"language","in":"path","required":true,"schema":{"type":"string","title":"Language"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/docs/stats":{"get":{"tags":["documentation"],"summary":"Get Documentation Stats","description":"API 문서 통계 조회 (관리자 전용)","operationId":"get_documentation_stats_api_v1_docs_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/docs/interactive":{"get":{"tags":["documentation"],"summary":"Get Interactive Docs Url","description":"대화형 API 문서 URL 조회","operationId":"get_interactive_docs_url_api_v1_docs_interactive_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/rate-limits/quota-status/{api_key_id}":{"get":{"tags":["rate-limiting"],"summary":"Get Quota Status","description":"API 키의 할당량 상태 조회","operationId":"get_quota_status_api_v1_rate_limits_quota_status__api_key_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","title":"Api Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuotaStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/rate-limits/usage-stats/{api_key_id}":{"get":{"tags":["rate-limiting"],"summary":"Get Usage Statistics","description":"API 키의 사용량 통계 조회","operationId":"get_usage_statistics_api_v1_rate_limits_usage_stats__api_key_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","title":"Api Key Id"}},{"name":"time_range","in":"query","required":false,"schema":{"type":"string","pattern":"^(1h|24h|7d|30d)$","default":"1h","title":"Time Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitUsageStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/rate-limits/custom-limits/{api_key_id}":{"post":{"tags":["rate-limiting"],"summary":"Set Custom Limits","description":"사용자 정의 제한 설정 (프로/엔터프라이즈 플랜만)","operationId":"set_custom_limits_api_v1_rate_limits_custom_limits__api_key_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","title":"Api Key Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CustomLimitRequest"},"title":"Limits"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["rate-limiting"],"summary":"Reset Custom Limits","description":"사용자 정의 제한 초기화","operationId":"reset_custom_limits_api_v1_rate_limits_custom_limits__api_key_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","title":"Api Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/rate-limits/test-rate-limit":{"post":{"tags":["rate-limiting"],"summary":"Test Rate Limit","description":"사용량 제한 테스트 (관리자 또는 API 키 소유자만)","operationId":"test_rate_limit_api_v1_rate_limits_test_rate_limit_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitTestRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/rate-limits/system-metrics":{"get":{"tags":["rate-limiting"],"summary":"Get System Metrics","description":"시스템 메트릭 조회 (관리자 전용)","operationId":"get_system_metrics_api_v1_rate_limits_system_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/rate-limits/plans":{"get":{"tags":["rate-limiting"],"summary":"Get Rate Limit Plans","description":"사용 가능한 요금제별 제한 정보 조회","operationId":"get_rate_limit_plans_api_v1_rate_limits_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/rate-limits/clear-usage/{api_key_id}":{"post":{"tags":["rate-limiting"],"summary":"Clear Usage History","description":"사용량 이력 초기화 (관리자 전용)","operationId":"clear_usage_history_api_v1_rate_limits_clear_usage__api_key_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","title":"Api Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/analytics/usage-analytics":{"post":{"tags":["analytics"],"summary":"Get Usage Analytics","description":"종합 사용량 분석 조회","operationId":"get_usage_analytics_api_v1_analytics_usage_analytics_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/analytics/executive-dashboard":{"get":{"tags":["analytics"],"summary":"Get Executive Dashboard","description":"대시보드 데이터 조회 (모든 사용자)","operationId":"get_executive_dashboard_api_v1_analytics_executive_dashboard_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"time_range","in":"query","required":false,"schema":{"type":"string","pattern":"^(7d|30d|90d)$","default":"30d","title":"Time Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/analytics/kpi-summary":{"get":{"tags":["analytics"],"summary":"Get Kpi Summary","description":"핵심 KPI 요약 조회","operationId":"get_kpi_summary_api_v1_analytics_kpi_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/analytics/supported-metrics":{"get":{"tags":["analytics"],"summary":"Get Supported Metrics","description":"지원되는 분석 메트릭 목록 조회","operationId":"get_supported_metrics_api_v1_analytics_supported_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/analytics/export-report":{"post":{"tags":["analytics"],"summary":"Export Analytics Report","description":"분석 리포트 내보내기","operationId":"export_analytics_report_api_v1_analytics_export_report_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportExportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/analytics/trends":{"get":{"tags":["analytics"],"summary":"Get Analytics Trends","description":"분석 트렌드 조회","operationId":"get_analytics_trends_api_v1_analytics_trends_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"metric","in":"query","required":true,"schema":{"type":"string","description":"분석할 메트릭","title":"Metric"},"description":"분석할 메트릭"},{"name":"period","in":"query","required":false,"schema":{"type":"string","pattern":"^(7d|30d|90d)$","default":"7d","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/analytics/cohort-analysis":{"get":{"tags":["analytics"],"summary":"Get Cohort Analysis","description":"코호트 분석 (관리자 전용)","operationId":"get_cohort_analysis_api_v1_analytics_cohort_analysis_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cohort_type","in":"query","required":false,"schema":{"type":"string","pattern":"^(weekly|monthly)$","default":"monthly","title":"Cohort Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/realtime-monitoring/dashboard/current":{"get":{"tags":["realtime-monitoring"],"summary":"Get Current Dashboard Data","description":"현재 대시보드 데이터 조회\n\nReturns:\n    현재 시스템 및 API 메트릭, 알람, 성능 요약","operationId":"get_current_dashboard_data_api_v1_realtime_monitoring_dashboard_current_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/realtime-monitoring/metrics/history":{"get":{"tags":["realtime-monitoring"],"summary":"Get Metric History","description":"특정 메트릭의 히스토리 조회\n\nArgs:\n    metric_type: 조회할 메트릭 타입\n    hours: 조회할 시간 범위 (1-24시간)\n\nReturns:\n    메트릭 히스토리 데이터","operationId":"get_metric_history_api_v1_realtime_monitoring_metrics_history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"metric_type","in":"query","required":true,"schema":{"type":"string","description":"메트릭 타입","title":"Metric Type"},"description":"메트릭 타입"},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":24,"minimum":1,"description":"조회할 시간 범위 (시간)","default":1,"title":"Hours"},"description":"조회할 시간 범위 (시간)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/realtime-monitoring/alerts":{"get":{"tags":["realtime-monitoring"],"summary":"Get Alerts","description":"알람 목록 조회\n\nArgs:\n    level: 알람 레벨 필터 (선택사항)\n    limit: 최대 조회 수\n    acknowledged: 확인 여부 필터 (선택사항)\n\nReturns:\n    필터링된 알람 목록","operationId":"get_alerts_api_v1_realtime_monitoring_alerts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"level","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"알람 레벨 필터","title":"Level"},"description":"알람 레벨 필터"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"최대 조회 수","default":50,"title":"Limit"},"description":"최대 조회 수"},{"name":"acknowledged","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"확인 여부 필터","title":"Acknowledged"},"description":"확인 여부 필터"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/realtime-monitoring/alerts/{alert_id}/acknowledge":{"post":{"tags":["realtime-monitoring"],"summary":"Acknowledge Alert","description":"알람 확인 처리\n\nArgs:\n    alert_id: 확인할 알람 ID\n\nReturns:\n    확인 처리 결과","operationId":"acknowledge_alert_api_v1_realtime_monitoring_alerts__alert_id__acknowledge_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/realtime-monitoring/system/health":{"get":{"tags":["realtime-monitoring"],"summary":"Get System Health","description":"시스템 건강도 조회 (인증 불필요 - 모니터링 목적)\n\nReturns:\n    시스템 전반적인 건강도","operationId":"get_system_health_api_v1_realtime_monitoring_system_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/realtime-monitoring/connections/stats":{"get":{"tags":["realtime-monitoring"],"summary":"Get Connection Stats","description":"WebSocket 연결 통계 조회\n\nReturns:\n    현재 WebSocket 연결 통계","operationId":"get_connection_stats_api_v1_realtime_monitoring_connections_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/realtime-monitoring/monitoring/config":{"post":{"tags":["realtime-monitoring"],"summary":"Update Monitoring Config","description":"모니터링 설정 업데이트\n\nArgs:\n    config: 업데이트할 설정\n        - monitoring_interval: 모니터링 간격 (초)\n        - alert_thresholds: 알람 임계값 설정\n\nReturns:\n    설정 업데이트 결과","operationId":"update_monitoring_config_api_v1_realtime_monitoring_monitoring_config_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Config"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/security-fraud/analyze-request":{"post":{"tags":["security-fraud"],"summary":"Analyze Request Security","description":"요청 보안 분석\n\n실시간으로 요청의 위험도를 분석하고 보안 조치를 제안합니다.","operationId":"analyze_request_security_api_v1_security_fraud_analyze_request_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"}},{"name":"api_key_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key Id"}},{"name":"endpoint","in":"query","required":false,"schema":{"type":"string","default":"","title":"Endpoint"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"default":{},"title":"Request Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/security-fraud/events":{"get":{"tags":["security-fraud"],"summary":"Get Security Events","description":"보안 이벤트 목록 조회\n\n다양한 필터를 사용하여 보안 이벤트를 조회합니다.","operationId":"get_security_events_api_v1_security_fraud_events_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"threat_level","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/ThreatLevel"},{"type":"null"}],"description":"위협 레벨 필터","title":"Threat Level"},"description":"위협 레벨 필터"},{"name":"fraud_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/FraudType"},{"type":"null"}],"description":"사기 유형 필터","title":"Fraud Type"},"description":"사기 유형 필터"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"시작 날짜","title":"Start Date"},"description":"시작 날짜"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"종료 날짜","title":"End Date"},"description":"종료 날짜"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"최대 조회 수","default":100,"title":"Limit"},"description":"최대 조회 수"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"오프셋","default":0,"title":"Offset"},"description":"오프셋"},{"name":"resolved","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"해결 여부 필터","title":"Resolved"},"description":"해결 여부 필터"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/security-fraud/events/{event_id}":{"get":{"tags":["security-fraud"],"summary":"Get Security Event","description":"특정 보안 이벤트 상세 조회\n\nArgs:\n    event_id: 조회할 보안 이벤트 ID\n\nReturns:\n    보안 이벤트 상세 정보","operationId":"get_security_event_api_v1_security_fraud_events__event_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/security-fraud/events/{event_id}/resolve":{"post":{"tags":["security-fraud"],"summary":"Resolve Security Event","description":"보안 이벤트 해결 처리\n\nArgs:\n    event_id: 해결할 보안 이벤트 ID\n    resolution_note: 해결 메모\n\nReturns:\n    해결 처리 결과","operationId":"resolve_security_event_api_v1_security_fraud_events__event_id__resolve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}},{"name":"resolution_note","in":"query","required":false,"schema":{"type":"string","default":"","title":"Resolution Note"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/security-fraud/dashboard":{"get":{"tags":["security-fraud"],"summary":"Get Security Dashboard","description":"보안 대시보드 데이터 조회\n\nArgs:\n    days: 조회할 기간 (일)\n\nReturns:\n    보안 대시보드 정보 (통계, 트렌드, 위험 지표)","operationId":"get_security_dashboard_api_v1_security_fraud_dashboard_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"description":"조회 기간 (일)","default":7,"title":"Days"},"description":"조회 기간 (일)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/security-fraud/ip-analysis/{ip_address}":{"get":{"tags":["security-fraud"],"summary":"Analyze Ip Address","description":"특정 IP 주소 보안 분석\n\nArgs:\n    ip_address: 분석할 IP 주소\n\nReturns:\n    IP 주소의 위험도 및 관련 정보","operationId":"analyze_ip_address_api_v1_security_fraud_ip_analysis__ip_address__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"ip_address","in":"path","required":true,"schema":{"type":"string","title":"Ip Address"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/security-fraud/blacklist/ip":{"post":{"tags":["security-fraud"],"summary":"Add Ip To Blacklist","description":"IP 주소를 블랙리스트에 추가\n\nArgs:\n    ip_address: 블랙리스트에 추가할 IP 주소\n    reason: 추가 사유\n\nReturns:\n    블랙리스트 추가 결과","operationId":"add_ip_to_blacklist_api_v1_security_fraud_blacklist_ip_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"ip_address","in":"query","required":true,"schema":{"type":"string","title":"Ip Address"}},{"name":"reason","in":"query","required":false,"schema":{"type":"string","default":"","title":"Reason"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/security-fraud/blacklist/ip/{ip_address}":{"delete":{"tags":["security-fraud"],"summary":"Remove Ip From Blacklist","description":"IP 주소를 블랙리스트에서 제거\n\nArgs:\n    ip_address: 블랙리스트에서 제거할 IP 주소\n\nReturns:\n    블랙리스트 제거 결과","operationId":"remove_ip_from_blacklist_api_v1_security_fraud_blacklist_ip__ip_address__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"ip_address","in":"path","required":true,"schema":{"type":"string","title":"Ip Address"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/security-fraud/settings":{"get":{"tags":["security-fraud"],"summary":"Get Security Settings","description":"보안 설정 조회\n\nReturns:\n    현재 보안 설정 및 임계값","operationId":"get_security_settings_api_v1_security_fraud_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/performance/system/status":{"get":{"tags":["performance-optimization"],"summary":"Get System Performance Status","description":"시스템 성능 상태 조회\n\nReturns:\n    현재 시스템 성능 지표 및 상태","operationId":"get_system_performance_status_api_v1_performance_system_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/performance/stress-test/run":{"post":{"tags":["performance-optimization"],"summary":"Run Stress Test","description":"압력 테스트 실행\n\nArgs:\n    test_type: 테스트 타입\n    endpoint: 테스트할 엔드포인트\n    concurrent_users: 동시 사용자 수\n    requests_per_user: 사용자당 요청 수\n    duration: 테스트 지속 시간 (초)\n\nReturns:\n    테스트 ID 및 실행 정보","operationId":"run_stress_test_api_v1_performance_stress_test_run_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"test_type","in":"query","required":false,"schema":{"type":"string","description":"테스트 유형","default":"load_test","title":"Test Type"},"description":"테스트 유형"},{"name":"endpoint","in":"query","required":false,"schema":{"type":"string","default":"/api/v1/health","title":"Endpoint"}},{"name":"concurrent_users","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":10,"title":"Concurrent Users"}},{"name":"requests_per_user","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":50,"title":"Requests Per User"}},{"name":"duration","in":"query","required":false,"schema":{"type":"integer","maximum":3600,"minimum":10,"default":60,"title":"Duration"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/performance/stress-test/run-all":{"post":{"tags":["performance-optimization"],"summary":"Run All Default Tests","description":"모든 기본 압력 테스트 실행\n\nReturns:\n    시작된 모든 테스트 ID 목록","operationId":"run_all_default_tests_api_v1_performance_stress_test_run_all_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/performance/stress-test/{test_id}":{"get":{"tags":["performance-optimization"],"summary":"Get Test Result","description":"특정 테스트 결과 조회\n\nArgs:\n    test_id: 조회할 테스트 ID\n\nReturns:\n    테스트 결과 및 상세 정보","operationId":"get_test_result_api_v1_performance_stress_test__test_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"test_id","in":"path","required":true,"schema":{"type":"string","title":"Test Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["performance-optimization"],"summary":"Abort Test","description":"실행 중인 테스트 중단\n\nArgs:\n    test_id: 중단할 테스트 ID\n\nReturns:\n    중단 처리 결과","operationId":"abort_test_api_v1_performance_stress_test__test_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"test_id","in":"path","required":true,"schema":{"type":"string","title":"Test Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/performance/stress-test":{"get":{"tags":["performance-optimization"],"summary":"List Test Results","description":"테스트 결과 목록 조회\n\nArgs:\n    status: 테스트 상태 필터 (pending, running, completed, failed, aborted)\n    limit: 최대 조회 수\n\nReturns:\n    테스트 결과 목록","operationId":"list_test_results_api_v1_performance_stress_test_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"test_type","in":"query","required":true,"schema":{"type":"string","description":"테스트 유형","title":"Test Type"},"description":"테스트 유형"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"테스트 상태 필터 (pending, running, completed, failed, aborted)","title":"Status"},"description":"테스트 상태 필터 (pending, running, completed, failed, aborted)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/performance/cache/statistics":{"get":{"tags":["performance-optimization"],"summary":"Get Cache Statistics","description":"캐시 통계 조회\n\nReturns:\n    상세한 캐시 성능 통계","operationId":"get_cache_statistics_api_v1_performance_cache_statistics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/performance/cache/clear":{"post":{"tags":["performance-optimization"],"summary":"Clear Cache","description":"캐시 초기화\n\nArgs:\n    cache_type: 초기화할 캐시 타입 (없으면 전체)\n\nReturns:\n    캐시 초기화 결과","operationId":"clear_cache_api_v1_performance_cache_clear_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cache_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"캐시 타입 (전체 또는 특정 타입)","title":"Cache Type"},"description":"캐시 타입 (전체 또는 특정 타입)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/performance/report/performance":{"get":{"tags":["performance-optimization"],"summary":"Generate Performance Report","description":"성능 보고서 생성\n\nArgs:\n    days: 보고서 생성 기간 (일)\n\nReturns:\n    종합 성능 분석 보고서","operationId":"generate_performance_report_api_v1_performance_report_performance_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"description":"보고서 기간 (일)","default":7,"title":"Days"},"description":"보고서 기간 (일)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/performance/optimization/auto-tune":{"post":{"tags":["performance-optimization"],"summary":"Auto Tune Performance","description":"자동 성능 튜닝 실행\n\n시스템 분석 후 자동으로 성능 최적화를 수행합니다.","operationId":"auto_tune_performance_api_v1_performance_optimization_auto_tune_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/monitoring/health":{"get":{"tags":["monitoring","monitoring"],"summary":"Health Check","description":"Public health check endpoint","operationId":"health_check_api_v1_monitoring_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/monitoring/metrics":{"get":{"tags":["monitoring","monitoring"],"summary":"Get System Metrics","description":"Get system performance metrics (admin only)","operationId":"get_system_metrics_api_v1_monitoring_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get System Metrics Api V1 Monitoring Metrics Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/monitoring/database/stats":{"get":{"tags":["monitoring","monitoring"],"summary":"Get Database Stats","description":"Get database statistics (admin only)","operationId":"get_database_stats_api_v1_monitoring_database_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Database Stats Api V1 Monitoring Database Stats Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/monitoring/logs/recent":{"get":{"tags":["monitoring","monitoring"],"summary":"Get Recent Logs","description":"Get recent log entries (admin only)","operationId":"get_recent_logs_api_v1_monitoring_logs_recent_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Recent Logs Api V1 Monitoring Logs Recent Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/monitoring/celery/status":{"get":{"tags":["monitoring","monitoring"],"summary":"Get Celery Status","description":"Get Celery worker status (admin only)","operationId":"get_celery_status_api_v1_monitoring_celery_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Celery Status Api V1 Monitoring Celery Status Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/monitoring/alerts/test":{"post":{"tags":["monitoring","monitoring"],"summary":"Test Alert System","description":"Test the alert system (admin only)","operationId":"test_alert_system_api_v1_monitoring_alerts_test_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Test Alert System Api V1 Monitoring Alerts Test Post"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/external/api-keys":{"get":{"tags":["external-api-v1"],"summary":"Get Api Keys","description":"사용자의 API 키 목록 조회","operationId":"get_api_keys_api_v1_external_api_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ExternalApiKeyResponse"},"type":"array","title":"Response Get Api Keys Api V1 External Api Keys Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["external-api-v1"],"summary":"Create Api Key","description":"새 API 키 생성","operationId":"create_api_key_api_v1_external_api_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalApiKeyCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalApiKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/external/api-keys/{api_key_id}":{"delete":{"tags":["external-api-v1"],"summary":"Deactivate Api Key","description":"API 키 비활성화","operationId":"deactivate_api_key_api_v1_external_api_keys__api_key_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","title":"Api Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/api-keys/{api_key_id}/usage":{"get":{"tags":["external-api-v1"],"summary":"Get Api Key Usage","description":"API 키 사용량 통계 조회","operationId":"get_api_key_usage_api_v1_external_api_keys__api_key_id__usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","title":"Api Key Id"}},{"name":"period_type","in":"query","required":false,"schema":{"type":"string","default":"daily","title":"Period Type"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UsageStatsResponse"},"title":"Response Get Api Key Usage Api V1 External Api Keys  Api Key Id  Usage Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/partnership/apply":{"post":{"tags":["external-api-v1"],"summary":"Apply For Partnership","description":"파트너십 신청","operationId":"apply_for_partnership_api_v1_external_partnership_apply_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnershipApplicationCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnershipApplicationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/external/partnership/status":{"get":{"tags":["external-api-v1"],"summary":"Get Partnership Status","description":"파트너십 신청 상태 조회","operationId":"get_partnership_status_api_v1_external_partnership_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/PartnershipApplicationResponse"},{"type":"null"}],"title":"Response Get Partnership Status Api V1 External Partnership Status Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/external/public/characters/{character_id}":{"get":{"tags":["external-api-v1"],"summary":"Get Character For External Api","description":"외부 API용 캐릭터 정보 조회 (API 키 필요)","operationId":"get_character_for_external_api_api_v1_external_public_characters__character_id__get","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}},{"name":"api_key","in":"query","required":false,"schema":{"type":"string","title":"Api Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/public/characters/{character_id}/chat":{"post":{"tags":["external-api-v1"],"summary":"Chat With Character External Api","description":"외부 API용 캐릭터 채팅 (API 키 필요)","operationId":"chat_with_character_external_api_api_v1_external_public_characters__character_id__chat_post","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}},{"name":"api_key","in":"query","required":true,"schema":{"type":"string","title":"Api Key"}},{"name":"message","in":"query","required":true,"schema":{"type":"string","title":"Message"}},{"name":"session_id","in":"query","required":false,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/public/characters/{character_id}/chat/stream":{"post":{"tags":["external-api-v1"],"summary":"Chat With Character Stream","description":"외부 API용 SSE 스트리밍 채팅\n\nGET /api/v1/external/public/characters/{character_id}/chat/stream?api_key=xxx&message=hello\nAccept: text/event-stream","operationId":"chat_with_character_stream_api_v1_external_public_characters__character_id__chat_stream_post","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}},{"name":"api_key","in":"query","required":true,"schema":{"type":"string","title":"Api Key"}},{"name":"message","in":"query","required":true,"schema":{"type":"string","title":"Message"}},{"name":"session_id","in":"query","required":false,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/pricing/plans":{"get":{"tags":["external-api-v1"],"summary":"Get Pricing Plans","description":"사용 가능한 요금제 목록 조회","operationId":"get_pricing_plans_api_v1_external_pricing_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/external/subscriptions":{"get":{"tags":["external-api-v1"],"summary":"Get User Subscriptions","description":"사용자의 구독 목록 조회","operationId":"get_user_subscriptions_api_v1_external_subscriptions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SubscriptionResponse"},"type":"array","title":"Response Get User Subscriptions Api V1 External Subscriptions Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["external-api-v1"],"summary":"Create Subscription","description":"구독 생성","operationId":"create_subscription_api_v1_external_subscriptions_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/external/subscriptions/{subscription_id}":{"delete":{"tags":["external-api-v1"],"summary":"Cancel Subscription","description":"구독 취소","operationId":"cancel_subscription_api_v1_external_subscriptions__subscription_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}},{"name":"reason","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/subscriptions/{subscription_id}/invoices":{"get":{"tags":["external-api-v1"],"summary":"Get Subscription Invoices","description":"구독의 청구서 목록 조회","operationId":"get_subscription_invoices_api_v1_external_subscriptions__subscription_id__invoices_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InvoiceResponse"},"title":"Response Get Subscription Invoices Api V1 External Subscriptions  Subscription Id  Invoices Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/usage-limits/{api_key_id}":{"get":{"tags":["external-api-v1"],"summary":"Check Api Usage Limits","description":"API 키의 사용량 제한 확인","operationId":"check_api_usage_limits_api_v1_external_usage_limits__api_key_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","title":"Api Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/admin/analytics":{"get":{"tags":["external-api-v1"],"summary":"Get Analytics Dashboard","description":"분석 대시보드 데이터 조회 (어드민 전용) - Error handling for missing tables","operationId":"get_analytics_dashboard_api_v1_external_admin_analytics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","default":"7d","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/api-keys":{"post":{"tags":["character-external-api"],"summary":"Create Character Api Key","description":"캐릭터용 API 키 생성 (캐릭터 소유자만)","operationId":"create_character_api_key_api_v1_characters__character_id__api_keys_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKeyCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__external_api__APIKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/characters/{character_id}/chat":{"post":{"tags":["character-external-api"],"summary":"External Character Chat","description":"외부 서비스용 캐릭터 채팅 API\n\nHeaders:\n  Authorization: Bearer {api_key}\n\nBody:\n  {\n    \"message\": \"사용자 메시지\",\n    \"external_user_id\": \"외부_서비스_사용자_ID\",\n    \"session_id\": \"선택적_세션_ID\",\n    \"context\": {...}\n  }","operationId":"external_character_chat_api_v1_external_characters__character_id__chat_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalChatRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalChatResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/characters/{character_id}/memory/search":{"post":{"tags":["character-external-api"],"summary":"External Memory Search","description":"외부 서비스용 메모리 검색 API","operationId":"external_memory_search_api_v1_external_characters__character_id__memory_search_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalMemorySearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalMemorySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/characters/{character_id}/info":{"get":{"tags":["character-external-api"],"summary":"External Character Info","description":"외부 서비스용 캐릭터 기본 정보 API","operationId":"external_character_info_api_v1_external_characters__character_id__info_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/health":{"get":{"tags":["character-external-api"],"summary":"External Api Health","description":"외부 API 헬스체크","operationId":"external_api_health_api_v1_external_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/external/characters/{character_id}/knowledge":{"post":{"tags":["character-external-api"],"summary":"External Add Knowledge","description":"외부 API로 캐릭터에 지식 추가 (프로젝트별 격리)\n\n프로젝트 기반 격리:\n- knowledge_scope=\"project\" 자동 설정 (project_id 있을 때)\n- project_id로 격리된 컬렉션에 저장 (API Key 재발급해도 데이터 유지)\n- 레거시 호환: project_id 없으면 api_key_id로 격리\n\nHeaders:\n  Authorization: Bearer {api_key}\n\nBody:\n  {\n    \"title\": \"지식 제목\",\n    \"content\": \"지식 내용\",\n    \"content_type\": \"document\",\n    \"tags\": [\"tag1\", \"tag2\"],\n    \"metadata\": {...}\n  }","operationId":"external_add_knowledge_api_v1_external_characters__character_id__knowledge_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalKnowledgeAddRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["character-external-api"],"summary":"External List Knowledge","description":"외부 API 사용자가 추가한 지식 목록 조회\n\n프로젝트 기반 격리:\n- project_id가 있으면 프로젝트 지식만 조회 (knowledge_scope='project')\n- 없으면 캐릭터 지식 조회 (knowledge_scope='character')\n\nHeaders:\n  Authorization: Bearer {api_key}\n\nReturns:\n  {\n    \"knowledge\": [...],\n    \"total_count\": 10,\n    \"api_key_id\": \"...\",\n    \"project_id\": \"...\",\n    \"character_id\": \"...\"\n  }","operationId":"external_list_knowledge_api_v1_external_characters__character_id__knowledge_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/characters/{character_id}/knowledge/{knowledge_id}":{"delete":{"tags":["character-external-api"],"summary":"External Delete Knowledge","description":"외부 API 사용자가 추가한 지식 삭제\n\n- 자신이 추가한 지식만 삭제 가능 (owner_id 검증)\n\nHeaders:\n  Authorization: Bearer {api_key}\n\nReturns:\n  {\n    \"message\": \"Knowledge deleted successfully\",\n    \"knowledge_id\": \"...\",\n    \"character_id\": \"...\"\n  }","operationId":"external_delete_knowledge_api_v1_external_characters__character_id__knowledge__knowledge_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"knowledge_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Knowledge Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/characters/{character_id}/knowledge/search":{"post":{"tags":["character-external-api"],"summary":"External Search Knowledge","description":"외부 API 지식 검색 (seller + external_api)\n\n- 판매자의 seller 지식 + 자신의 external_api 지식 검색\n- API 키별로 격리된 검색\n\nHeaders:\n  Authorization: Bearer {api_key}\n\nBody:\n  {\n    \"query\": \"검색 쿼리\",\n    \"limit\": 5,\n    \"min_similarity\": 0.0\n  }\n\nReturns:\n  {\n    \"query\": \"...\",\n    \"character_id\": \"...\",\n    \"results\": [...],\n    \"total_results\": 5,\n    \"search_duration_ms\": 123,\n    \"scopes_searched\": [\"character\", \"project\"]\n  }","operationId":"external_search_knowledge_api_v1_external_characters__character_id__knowledge_search_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalKnowledgeSearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/seller/earnings":{"get":{"tags":["seller-dashboard"],"summary":"Get My Earnings","description":"내 판매 수익 조회","operationId":"get_my_earnings_api_v1_seller_earnings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/seller/payouts":{"get":{"tags":["seller-dashboard"],"summary":"Get My Payouts","description":"내 정산 내역 조회","operationId":"get_my_payouts_api_v1_seller_payouts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/seller/sales":{"get":{"tags":["seller-dashboard"],"summary":"Get My Sales","description":"내 판매 내역 조회","operationId":"get_my_sales_api_v1_seller_sales_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/seller/seller-settings":{"get":{"tags":["seller-dashboard"],"summary":"Get Seller Settings","description":"판매자 설정 조회","operationId":"get_seller_settings_api_v1_seller_seller_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["seller-dashboard"],"summary":"Update Seller Settings","description":"판매자 설정 업데이트","operationId":"update_seller_settings_api_v1_seller_seller_settings_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Settings"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/seller/payout-settings":{"get":{"tags":["seller-dashboard"],"summary":"Get Payout Settings","description":"정산 계좌 설정 조회","operationId":"get_payout_settings_api_v1_seller_payout_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["seller-dashboard"],"summary":"Update Payout Settings","description":"정산 계좌 설정 업데이트","operationId":"update_payout_settings_api_v1_seller_payout_settings_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Settings"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/seller/payouts/request":{"post":{"tags":["seller-dashboard"],"summary":"Request Payout","description":"정산 요청","operationId":"request_payout_api_v1_seller_payouts_request_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Request Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/seller/stats":{"get":{"tags":["seller-dashboard"],"summary":"Get Seller Stats","description":"판매자 통계 (최근 30일)","operationId":"get_seller_stats_api_v1_seller_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/marketplace/listings":{"post":{"tags":["marketplace","Marketplace"],"summary":"Create Character Listing","description":"캐릭터 마켓플레이스 리스팅 생성","operationId":"create_character_listing_api_v1_marketplace_listings_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterListingCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterListingResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["marketplace","Marketplace"],"summary":"Get Marketplace Listings","description":"마켓플레이스 리스팅 목록 조회","operationId":"get_marketplace_listings_api_v1_marketplace_listings_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"카테고리 필터","title":"Category"},"description":"카테고리 필터"},{"name":"search_query","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"검색어","title":"Search Query"},"description":"검색어"},{"name":"pricing_model","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"가격 모델 필터","title":"Pricing Model"},"description":"가격 모델 필터"},{"name":"min_price","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"최소 가격","title":"Min Price"},"description":"최소 가격"},{"name":"max_price","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"최대 가격","title":"Max Price"},"description":"최대 가격"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"description":"결과 개수","default":20,"title":"Limit"},"description":"결과 개수"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"시작 위치","default":0,"title":"Offset"},"description":"시작 위치"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CharacterListingResponse"},"title":"Response Get Marketplace Listings Api V1 Marketplace Listings Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/marketplace/listings/{listing_id}/purchase":{"post":{"tags":["marketplace","Marketplace"],"summary":"Purchase Character","description":"캐릭터 구매","operationId":"purchase_character_api_v1_marketplace_listings__listing_id__purchase_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Listing Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PurchaseRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PurchaseResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/marketplace/purchases":{"get":{"tags":["marketplace","Marketplace"],"summary":"Get User Purchases","description":"사용자 구매 기록 조회","operationId":"get_user_purchases_api_v1_marketplace_purchases_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PurchaseResponse"},"type":"array","title":"Response Get User Purchases Api V1 Marketplace Purchases Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/marketplace/sales":{"get":{"tags":["marketplace","Marketplace"],"summary":"Get Seller Sales","description":"판매자 판매 기록 조회","operationId":"get_seller_sales_api_v1_marketplace_sales_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PurchaseResponse"},"type":"array","title":"Response Get Seller Sales Api V1 Marketplace Sales Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/marketplace/purchases/{purchase_id}/review":{"post":{"tags":["marketplace","Marketplace"],"summary":"Create Purchase Review","description":"구매 후기 작성","operationId":"create_purchase_review_api_v1_marketplace_purchases__purchase_id__review_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"purchase_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Purchase Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PurchaseReviewCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PurchaseReviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/marketplace/characters/{character_id}/access":{"get":{"tags":["marketplace","Marketplace"],"summary":"Check Character Access","description":"캐릭터 액세스 권한 확인 (로그인 선택)","operationId":"check_character_access_api_v1_marketplace_characters__character_id__access_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/seller/revenue":{"get":{"tags":["revenue-usage"],"summary":"Get Seller Revenue","description":"판매자 수익 조회\n\nArgs:\n    period: 조회 기간 (this_month, last_month, this_year)\n\nReturns:\n    {\n        total_revenue: float,\n        platform_fee: float,\n        net_earnings: float,\n        by_character: [...]\n    }","operationId":"get_seller_revenue_api_v1_seller_revenue_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","pattern":"^(this_month|last_month|this_year)$","default":"this_month","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/my/usage":{"get":{"tags":["revenue-usage"],"summary":"Get My Usage","description":"구매자 사용량 조회\n\nArgs:\n    period: 조회 기간 (this_month, last_month, this_year)\n\nReturns:\n    {\n        total_messages: int,\n        total_cost: float,\n        byok_enabled: bool,\n        byok_saved: float,\n        by_character: [...]\n    }","operationId":"get_my_usage_api_v1_my_usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","pattern":"^(this_month|last_month|this_year)$","default":"this_month","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dashboard/overview":{"get":{"tags":["user-dashboard"],"summary":"Get Dashboard Overview","description":"통합 대시보드 개요\n\nCreator(판매자)와 Consumer(구매자) 통계를 모두 반환.","operationId":"get_dashboard_overview_api_v1_dashboard_overview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/dashboard/my/characters":{"get":{"tags":["user-dashboard"],"summary":"Get My Characters","description":"내가 만든 캐릭터 목록\n\n- status: public (공개), private (비공개), for_sale (판매 중)\n(N+1 최적화: selectinload로 관련 데이터 미리 로드)","operationId":"get_my_characters_api_v1_dashboard_my_characters_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dashboard/my/purchased":{"get":{"tags":["user-dashboard"],"summary":"Get Purchased Characters","description":"구매한 캐릭터 목록","operationId":"get_purchased_characters_api_v1_dashboard_my_purchased_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dashboard/my/projects":{"get":{"tags":["user-dashboard"],"summary":"Get My Projects","description":"내 프로젝트 목록 (다중 캐릭터 지원)","operationId":"get_my_projects_api_v1_dashboard_my_projects_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dashboard/my/revenue":{"get":{"tags":["user-dashboard"],"summary":"Get My Revenue","description":"수익 통계 (기존 seller_dashboard/earnings 대체)","operationId":"get_my_revenue_api_v1_dashboard_my_revenue_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","pattern":"^(today|this_week|this_month|this_year|all)$","default":"this_month","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dashboard/my/usage":{"get":{"tags":["user-dashboard"],"summary":"Get My Usage","description":"사용량 통계 (API 호출, 크레딧 등)","operationId":"get_my_usage_api_v1_dashboard_my_usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","pattern":"^(today|this_week|this_month|this_year|all)$","default":"this_month","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dashboard/profile":{"get":{"tags":["user-dashboard"],"summary":"Get My Profile","description":"내 통합 프로필 조회","operationId":"get_my_profile_api_v1_dashboard_profile_get","security":[{"HTTPBearer":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"tags":["user-dashboard"],"summary":"Update My Profile","description":"내 프로필 업데이트","operationId":"update_my_profile_api_v1_dashboard_profile_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"business_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Name"}},{"name":"bio","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bio"}},{"name":"vacation_mode","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Vacation Mode"}},{"name":"vacation_message","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vacation Message"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Expertise Areas"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects":{"get":{"tags":["project-characters"],"summary":"List Projects","description":"내 프로젝트 목록 조회","operationId":"list_projects_api_v1_projects_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ProjectResponse"},"type":"array","title":"Response List Projects Api V1 Projects Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["project-characters"],"summary":"Create Project","description":"새 프로젝트 생성","operationId":"create_project_api_v1_projects_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProjectRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/projects/{project_id}":{"get":{"tags":["project-characters"],"summary":"Get Project","description":"프로젝트 상세 조회","operationId":"get_project_api_v1_projects__project_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["project-characters"],"summary":"Update Project","description":"프로젝트 수정","operationId":"update_project_api_v1_projects__project_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProjectRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["project-characters"],"summary":"Delete Project","description":"프로젝트 삭제","operationId":"delete_project_api_v1_projects__project_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/characters":{"get":{"tags":["project-characters"],"summary":"List Project Characters","description":"프로젝트에 배치된 캐릭터 목록 조회","operationId":"list_project_characters_api_v1_projects__project_id__characters_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProjectCharacterResponse"},"title":"Response List Project Characters Api V1 Projects  Project Id  Characters Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["project-characters"],"summary":"Add Character To Project","description":"프로젝트에 캐릭터 추가\n\n- 자신이 만든 캐릭터: access_type='owned'\n- 구매한 캐릭터: access_type='purchased'","operationId":"add_character_to_project_api_v1_projects__project_id__characters_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddCharacterRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/characters/{character_id}":{"put":{"tags":["project-characters"],"summary":"Update Project Character","description":"프로젝트 내 캐릭터 설정 업데이트","operationId":"update_project_character_api_v1_projects__project_id__characters__character_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCharacterRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["project-characters"],"summary":"Remove Character From Project","description":"프로젝트에서 캐릭터 제거","operationId":"remove_character_from_project_api_v1_projects__project_id__characters__character_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/characters/{character_id}/set-primary":{"post":{"tags":["project-characters"],"summary":"Set Primary Character","description":"기본 캐릭터 설정 (위젯에서 기본으로 표시될 캐릭터)","operationId":"set_primary_character_api_v1_projects__project_id__characters__character_id__set_primary_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/available-characters":{"get":{"tags":["project-characters"],"summary":"Get Available Characters","description":"프로젝트에 추가 가능한 캐릭터 목록\n\n- 내가 만든 캐릭터\n- 구매한 캐릭터\n- 이미 추가된 캐릭터 제외","operationId":"get_available_characters_api_v1_projects__project_id__available_characters_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/knowledge/text":{"post":{"tags":["project-knowledge"],"summary":"Add Text Knowledge","description":"프로젝트에 텍스트 지식 추가\n- 프로젝트 하위 모든 캐릭터가 이 지식을 상속받아 검색 가능","operationId":"add_text_knowledge_api_v1_projects__project_id__knowledge_text_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddTextKnowledgeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/knowledge/document":{"post":{"tags":["project-knowledge"],"summary":"Upload Document Knowledge","description":"프로젝트에 문서 업로드하여 지식 추가\n- PDF, DOCX, TXT 등 지원","operationId":"upload_document_knowledge_api_v1_projects__project_id__knowledge_document_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_document_knowledge_api_v1_projects__project_id__knowledge_document_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/knowledge":{"get":{"tags":["project-knowledge"],"summary":"List Project Knowledge","description":"프로젝트의 지식 목록 조회","operationId":"list_project_knowledge_api_v1_projects__project_id__knowledge_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectKnowledgeListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/knowledge/{knowledge_id}":{"get":{"tags":["project-knowledge"],"summary":"Get Project Knowledge","description":"프로젝트 지식 상세 조회","operationId":"get_project_knowledge_api_v1_projects__project_id__knowledge__knowledge_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"knowledge_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Knowledge Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["project-knowledge"],"summary":"Delete Project Knowledge","description":"프로젝트 지식 삭제\n- PostgreSQL과 Qdrant에서 모두 삭제","operationId":"delete_project_knowledge_api_v1_projects__project_id__knowledge__knowledge_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"knowledge_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Knowledge Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/knowledge/{knowledge_id}/retry":{"post":{"tags":["project-knowledge"],"summary":"Retry Knowledge Processing","description":"실패한 프로젝트 지식의 처리를 재시도\n- 벡터화 실패한 문서를 다시 처리","operationId":"retry_knowledge_processing_api_v1_projects__project_id__knowledge__knowledge_id__retry_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"knowledge_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Knowledge Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/knowledge/crawl":{"post":{"tags":["project-knowledge"],"summary":"Crawl Website For Project","description":"프로젝트에 웹사이트 크롤링하여 지식 추가\n\n- 웹사이트를 크롤링하여 프로젝트 지식으로 저장\n- 백그라운드 태스크로 실행되어 진행 상황 추적 가능\n- 크롤링된 콘텐츠는 LLM 전처리 후 벡터화","operationId":"crawl_website_for_project_api_v1_projects__project_id__knowledge_crawl_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlWebsiteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/knowledge/crawl/{task_id}/status":{"get":{"tags":["project-knowledge"],"summary":"Get Crawl Status","description":"크롤링 태스크 상태 조회\n\n- PENDING: 대기 중\n- PROGRESS: 진행 중 (current/total 페이지 정보 포함)\n- SUCCESS: 완료\n- FAILURE: 실패","operationId":"get_crawl_status_api_v1_projects__project_id__knowledge_crawl__task_id__status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/knowledge/crawl/{task_id}":{"delete":{"tags":["project-knowledge"],"summary":"Cancel Crawl Task","description":"진행 중인 크롤링 태스크 취소","operationId":"cancel_crawl_task_api_v1_projects__project_id__knowledge_crawl__task_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/sellers/payouts":{"get":{"tags":["seller-admin"],"summary":"Get Seller Payouts","description":"판매자 정산 목록 조회 (관리자)","operationId":"get_seller_payouts_api_v1_admin_sellers_payouts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"seller_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Seller Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/sellers/payouts/{payout_id}/approve":{"post":{"tags":["seller-admin"],"summary":"Approve Seller Payout","description":"판매자 정산 승인","operationId":"approve_seller_payout_api_v1_admin_sellers_payouts__payout_id__approve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"payout_id","in":"path","required":true,"schema":{"type":"string","title":"Payout Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/sellers/payouts/{payout_id}/reject":{"post":{"tags":["seller-admin"],"summary":"Reject Seller Payout","description":"판매자 정산 거부","operationId":"reject_seller_payout_api_v1_admin_sellers_payouts__payout_id__reject_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"payout_id","in":"path","required":true,"schema":{"type":"string","title":"Payout Id"}},{"name":"reason","in":"query","required":true,"schema":{"type":"string","minLength":10,"maxLength":500,"title":"Reason"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/sellers/payouts/batch-approve":{"post":{"tags":["seller-admin"],"summary":"Batch Approve Payouts","description":"여러 정산 일괄 승인","operationId":"batch_approve_payouts_api_v1_admin_sellers_payouts_batch_approve_post","requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array","title":"Payout Ids"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/sellers/payouts/trigger-monthly":{"post":{"tags":["seller-admin"],"summary":"Trigger Monthly Payouts","description":"월간 정산 수동 실행 (테스트/수동 트리거용)","operationId":"trigger_monthly_payouts_api_v1_admin_sellers_payouts_trigger_monthly_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/sellers/payouts/stats":{"get":{"tags":["seller-admin"],"summary":"Get Payout Stats","description":"정산 통계 조회","operationId":"get_payout_stats_api_v1_admin_sellers_payouts_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/rate-limits/":{"get":{"tags":["rate-limit-admin"],"summary":"Get Rate Limit Configs Root","description":"Rate Limit 설정 루트 - /configs와 동일","operationId":"get_rate_limit_configs_root_api_v1_admin_rate_limits__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/rate-limits":{"get":{"tags":["rate-limit-admin"],"summary":"Get Rate Limit Configs Root","description":"Rate Limit 설정 루트 - /configs와 동일","operationId":"get_rate_limit_configs_root_api_v1_admin_rate_limits_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/rate-limits/configs":{"get":{"tags":["rate-limit-admin"],"summary":"Get Rate Limit Configs","description":"모든 Rate Limit 설정 조회","operationId":"get_rate_limit_configs_api_v1_admin_rate_limits_configs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/RateLimitConfigResponse"},"type":"array","title":"Response Get Rate Limit Configs Api V1 Admin Rate Limits Configs Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["rate-limit-admin"],"summary":"Create Rate Limit Config","description":"Rate Limit 설정 생성/업데이트","operationId":"create_rate_limit_config_api_v1_admin_rate_limits_configs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitConfigRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/rate-limits/client-stats/{client_id}":{"get":{"tags":["rate-limit-admin"],"summary":"Get Client Stats","description":"클라이언트 통계 조회","operationId":"get_client_stats_api_v1_admin_rate_limits_client_stats__client_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":168,"minimum":1,"description":"통계 기간 (시간)","default":24,"title":"Hours"},"description":"통계 기간 (시간)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/rate-limits/initialize-defaults":{"post":{"tags":["rate-limit-admin"],"summary":"Initialize Default Configs","description":"기본 Rate Limit 설정 초기화","operationId":"initialize_default_configs_api_v1_admin_rate_limits_initialize_defaults_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/rate-limits/configs/{limit_type}":{"delete":{"tags":["rate-limit-admin"],"summary":"Delete Rate Limit Config","description":"Rate Limit 설정 삭제","operationId":"delete_rate_limit_config_api_v1_admin_rate_limits_configs__limit_type__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit_type","in":"path","required":true,"schema":{"type":"string","title":"Limit Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/rate-limits/logs":{"get":{"tags":["rate-limit-admin"],"summary":"Get Rate Limit Logs","description":"Rate Limit 로그 조회","operationId":"get_rate_limit_logs_api_v1_admin_rate_limits_logs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"client_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"클라이언트 ID 필터","title":"Client Id"},"description":"클라이언트 ID 필터"},{"name":"limit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Rate Limit 타입 필터","title":"Limit Type"},"description":"Rate Limit 타입 필터"},{"name":"blocked_only","in":"query","required":false,"schema":{"type":"boolean","description":"차단된 요청만 조회","default":false,"title":"Blocked Only"},"description":"차단된 요청만 조회"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"결과 수 제한","default":100,"title":"Limit"},"description":"결과 수 제한"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reviews/":{"post":{"tags":["reviews"],"summary":"Create Review","description":"리뷰 작성","operationId":"create_review_api_v1_reviews__post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["reviews"],"summary":"Get Reviews","description":"리뷰 목록 조회","operationId":"get_reviews_api_v1_reviews__get","parameters":[{"name":"character_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"캐릭터 ID","title":"Character Id"},"description":"캐릭터 ID"},{"name":"marketplace_listing_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"마켓플레이스 리스팅 ID","title":"Marketplace Listing Id"},"description":"마켓플레이스 리스팅 ID"},{"name":"review_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"리뷰 타입","title":"Review Type"},"description":"리뷰 타입"},{"name":"min_rating","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":5.0,"minimum":1.0},{"type":"null"}],"description":"최소 평점","title":"Min Rating"},"description":"최소 평점"},{"name":"max_rating","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":5.0,"minimum":1.0},{"type":"null"}],"description":"최대 평점","title":"Max Rating"},"description":"최대 평점"},{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"언어","title":"Language"},"description":"언어"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"정렬 기준","default":"created_at","title":"Sort By"},"description":"정렬 기준"},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","description":"정렬 순서","default":"desc","title":"Sort Order"},"description":"정렬 순서"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"조회 개수","default":20,"title":"Limit"},"description":"조회 개수"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"오프셋","default":0,"title":"Offset"},"description":"오프셋"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ReviewResponse"},"title":"Response Get Reviews Api V1 Reviews  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reviews/summary":{"get":{"tags":["reviews"],"summary":"Get Review Summary","description":"리뷰 요약 조회","operationId":"get_review_summary_api_v1_reviews_summary_get","parameters":[{"name":"character_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"캐릭터 ID","title":"Character Id"},"description":"캐릭터 ID"},{"name":"marketplace_listing_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"마켓플레이스 리스팅 ID","title":"Marketplace Listing Id"},"description":"마켓플레이스 리스팅 ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ReviewSummaryResponse"},{"type":"null"}],"title":"Response Get Review Summary Api V1 Reviews Summary Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reviews/{review_id}/helpful":{"post":{"tags":["reviews"],"summary":"Mark Review Helpful","description":"리뷰 도움됨 표시","operationId":"mark_review_helpful_api_v1_reviews__review_id__helpful_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"review_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Review Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewHelpfulnessRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reviews/{review_id}/report":{"post":{"tags":["reviews"],"summary":"Report Review","description":"리뷰 신고","operationId":"report_review_api_v1_reviews__review_id__report_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"review_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Review Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewReportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reviews/{review_id}/respond":{"post":{"tags":["reviews"],"summary":"Respond To Review","description":"리뷰에 응답","operationId":"respond_to_review_api_v1_reviews__review_id__respond_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"review_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Review Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewResponseRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reviews/analytics":{"get":{"tags":["reviews"],"summary":"Get Review Analytics","description":"리뷰 분석","operationId":"get_review_analytics_api_v1_reviews_analytics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"캐릭터 ID","title":"Character Id"},"description":"캐릭터 ID"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"분석 기간 (일)","default":30,"title":"Days"},"description":"분석 기간 (일)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reviews/{review_id}":{"get":{"tags":["reviews"],"summary":"Get Review Detail","description":"리뷰 상세 조회","operationId":"get_review_detail_api_v1_reviews__review_id__get","parameters":[{"name":"review_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Review Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/messages/{message_id}/feedback":{"post":{"tags":["message-feedback"],"summary":"메시지 피드백 제출","description":"특정 메시지에 대한 피드백을 제출합니다","operationId":"create_message_feedback_api_v1_characters__character_id__messages__message_id__feedback_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"message_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Message Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageFeedbackCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageFeedbackResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["message-feedback"],"summary":"메시지 피드백 조회","description":"특정 메시지의 모든 피드백 조회 (자신의 피드백만)","operationId":"get_message_feedbacks_api_v1_characters__character_id__messages__message_id__feedback_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"message_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Message Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MessageFeedbackResponse"},"title":"Response Get Message Feedbacks Api V1 Characters  Character Id  Messages  Message Id  Feedback Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/feedback":{"post":{"tags":["message-feedback"],"summary":"캐릭터 피드백 제출","description":"캐릭터 전체에 대한 종합 피드백을 제출합니다","operationId":"create_character_feedback_api_v1_characters__character_id__feedback_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterFeedbackCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterFeedbackResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["message-feedback"],"summary":"캐릭터 피드백 목록 조회","description":"캐릭터의 공개 피드백 목록 조회","operationId":"get_character_feedbacks_api_v1_characters__character_id__feedback_get","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}},{"name":"public_only","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Public Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CharacterFeedbackResponse"},"title":"Response Get Character Feedbacks Api V1 Characters  Character Id  Feedback Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/feedback/stats":{"get":{"tags":["message-feedback"],"summary":"캐릭터 피드백 통계","description":"캐릭터 피드백 통계 조회","operationId":"get_character_feedback_stats_api_v1_characters__character_id__feedback_stats_get","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterFeedbackStats"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/widget/character/{character_id}":{"get":{"tags":["widget"],"summary":"Get Widget Character Info","description":"위젯용 캐릭터 정보 조회 (이름, 이미지)\nAPI 키로 인증 - 직접 연결 또는 프로젝트 접근 지원","operationId":"get_widget_character_info_api_v1_widget_character__character_id__get","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/widget/api-keys":{"get":{"tags":["widget"],"summary":"Get User Api Keys","description":"사용자의 API 키 목록 조회","operationId":"get_user_api_keys_api_v1_widget_api_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response Get User Api Keys Api V1 Widget Api Keys Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/public-chat/{character_id}/stream":{"post":{"tags":["public-chat-sse"],"summary":"Public Chat Sse","description":"공개 캐릭터 SSE 채팅 엔드포인트\n\nPOST /api/v1/public-chat/{character_id}/stream\nBody: {\"message\": \"...\", \"session_id\": \"optional\", \"conversation_id\": \"optional\"}\nResponse: text/event-stream (connected | chunk | response | done | error)\n\n- Authorization 헤더가 있으면 **로그인 사용자 채팅**: user_id 귀속 + 크레딧 차감.\n- 없으면 **비로그인 데모**: 세션당/IP당 한도(DEMO_CHAT_*) 초과 시 402 → 회원가입 유도.\n  과거엔 이 경로가 로그인 여부와 무관하게 무제한·무과금으로 열려 있었다.","operationId":"public_chat_sse_api_v1_public_chat__character_id__stream_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicChatRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/widget-settings":{"get":{"tags":["widget-settings"],"summary":"Get Widget Settings","description":"캐릭터 위젯 설정 조회\n\n- 캐릭터 소유자 또는 구매자 조회 가능\n- 설정이 없으면 기본값으로 새로 생성하여 반환","operationId":"get_widget_settings_api_v1_characters__character_id__widget_settings_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetSettings"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["widget-settings"],"summary":"Update Widget Settings","description":"캐릭터 위젯 설정 생성/업데이트\n\n- 캐릭터 소유자 또는 구매자 수정 가능\n- 설정이 없으면 새로 생성, 있으면 업데이트","operationId":"update_widget_settings_api_v1_characters__character_id__widget_settings_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetSettingsUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetSettings"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["widget-settings"],"summary":"Delete Widget Settings","description":"캐릭터 위젯 설정 삭제 (기본값으로 복원)\n\n- 캐릭터 소유자만 삭제 가능\n- 설정 삭제 후 다음 조회 시 기본값으로 재생성됨","operationId":"delete_widget_settings_api_v1_characters__character_id__widget_settings_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/widget/settings/{character_id}":{"get":{"tags":["widget-settings"],"summary":"Get Widget Settings Public","description":"공개 위젯 설정 조회 (외부 위젯에서 사용)\n\n- API 키로 인증 필요\n- 캐릭터가 존재하지 않으면 404\n- 설정이 없으면 기본값 반환","operationId":"get_widget_settings_public_api_v1_widget_settings__character_id__get","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetSettingsPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/widget-settings/analyze":{"post":{"tags":["widget-settings"],"summary":"Analyze Widget Settings","description":"쇼핑몰 URL을 분석하여 위젯 디자인 제안\n\n- 입력된 URL의 사이트를 분석하여 어울리는 테마와 색상을 제안합니다.\n- 제안된 설정값은 즉시 저장되지 않고 반환만 됩니다.\n- 캐릭터 소유자 또는 구매자 사용 가능","operationId":"analyze_widget_settings_api_v1_characters__character_id__widget_settings_analyze_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetAnalysisRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetSettingsUpdate"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/widget/buyer-theme/{character_id}":{"get":{"tags":["widget-settings"],"summary":"Get Buyer Widget Theme","description":"위젯용 구매자 테마 조회 (API 키로 인증)\n\n구매자가 설정한 위젯 테마를 반환합니다.\n테마가 없으면 기본 설정을 반환합니다.","operationId":"get_buyer_widget_theme_api_v1_widget_buyer_theme__character_id__get","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Buyer Widget Theme Api V1 Widget Buyer Theme  Character Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/widget/character-detail/{character_id}":{"get":{"tags":["widget-settings"],"summary":"Get Widget Character Detail","description":"위젯용 캐릭터 상세 정보 조회 (API 키로 인증)\n\n캐릭터의 상세 정보를 팝업에서 보여주기 위한 API입니다.","operationId":"get_widget_character_detail_api_v1_widget_character_detail__character_id__get","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Widget Character Detail Api V1 Widget Character Detail  Character Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/widget/group-chat/stream":{"post":{"tags":["widget-group-chat-sse"],"summary":"Group Chat Sse","description":"그룹 채팅 SSE 엔드포인트\n\nPOST /api/v1/widget/group-chat/stream\nContent-Type: application/json\nAccept: text/event-stream\nX-API-Key: your-project-api-key\nX-External-User-ID: user-123\n\nBody:\n{\n    \"message\": \"안녕하세요\",\n    \"character_ids\": [\"uuid1\", \"uuid2\"],\n    \"session_id\": \"optional\",\n    \"conversation_id\": \"optional\"\n}\n\nEvents:\n- connected: 연결 성공\n- typing_start: 타이핑 시작\n- character_start: 캐릭터 응답 시작\n- chunk: 스트리밍 청크\n- character_response: 캐릭터 응답 완료\n- done: 그룹 채팅 완료\n- error: 오류","operationId":"group_chat_sse_api_v1_widget_group_chat_stream_post","parameters":[{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}},{"name":"X-External-User-ID","in":"header","required":true,"schema":{"type":"string","title":"X-External-User-Id"}},{"name":"X-User-Hash","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-User-Hash"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupChatSSERequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/widget/group-chat/{conversation_id}/history":{"get":{"tags":["widget-group-chat-sse"],"summary":"Get Group Chat History","description":"그룹 채팅 히스토리 조회","operationId":"get_group_chat_history_api_v1_widget_group_chat__conversation_id__history_get","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}},{"name":"X-External-User-ID","in":"header","required":true,"schema":{"type":"string","title":"X-External-User-Id"}},{"name":"X-User-Hash","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-User-Hash"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/widget/{character_id}/buyer-token":{"post":{"tags":["widget-chat-sse"],"summary":"Create Widget Buyer Token","operationId":"create_widget_buyer_token_api_v1_widget__character_id__buyer_token_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}},{"name":"X-External-User-ID","in":"header","required":true,"schema":{"type":"string","title":"X-External-User-Id"}},{"name":"X-User-Hash","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-User-Hash"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/widget/{character_id}/stream":{"post":{"tags":["widget-chat-sse"],"summary":"Widget Chat Sse","description":"위젯 SSE 채팅\n\nPOST /api/v1/widget/{character_id}/stream\nHeaders: X-API-Key, X-External-User-ID\nBody: {\"message\": \"...\", \"conversation_id\": \"optional\"}","operationId":"widget_chat_sse_api_v1_widget__character_id__stream_post","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-External-User-ID","in":"header","required":true,"schema":{"type":"string","title":"X-External-User-Id"}},{"name":"X-User-Hash","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-User-Hash"}},{"name":"X-Widget-Buyer-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Widget-Buyer-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetChatRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/widget/info":{"get":{"tags":["widget-project"],"summary":"Get Info By Api Key","description":"API 키만으로 프로젝트 정보 조회 (원라인 위젯용)\n\nAPI 키에 연결된 프로젝트를 자동으로 찾아서 반환\nproject_id 없이 API 키만으로 위젯 초기화 가능\nlang 파라미터로 언어 선택 가능 (ko/ja/en)","operationId":"get_info_by_api_key_api_v1_widget_info_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"enum":["ko","ja","en"],"type":"string","description":"언어 선택 (ko/ja/en)","default":"ko","title":"Lang"},"description":"언어 선택 (ko/ja/en)"},{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectInfoResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/widget/project/{project_id}/info":{"get":{"tags":["widget-project"],"summary":"Get Project Info","description":"프로젝트 정보 및 캐릭터 목록 조회\n\n위젯에서 프로젝트에 배치된 캐릭터 목록을 가져와서\n사용자가 캐릭터를 선택할 수 있게 함\n\n각 캐릭터의 기분/한마디도 함께 반환 (3시간마다 갱신)\nlang 파라미터로 언어 선택 가능 (ko/ja/en)","operationId":"get_project_info_api_v1_widget_project__project_id__info_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"lang","in":"query","required":false,"schema":{"enum":["ko","ja","en"],"type":"string","description":"언어 선택 (ko/ja/en)","default":"ko","title":"Lang"},"description":"언어 선택 (ko/ja/en)"},{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectInfoResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/widget/project/{project_id}/character/{character_id}":{"get":{"tags":["widget-project"],"summary":"Get Project Character Info","description":"프로젝트 내 특정 캐릭터 정보 조회\nlang 파라미터로 언어 선택 가능 (ko/ja/en)","operationId":"get_project_character_info_api_v1_widget_project__project_id__character__character_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"lang","in":"query","required":false,"schema":{"enum":["ko","ja","en"],"type":"string","description":"언어 선택 (ko/ja/en)","default":"ko","title":"Lang"},"description":"언어 선택 (ko/ja/en)"},{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/widget-webhooks":{"post":{"tags":["widget-webhooks"],"summary":"Create Webhook","description":"webhook 등록. secret은 응답에 한 번만 평문으로 노출.","operationId":"create_webhook_api_v1_widget_webhooks_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreateRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreatedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/widget-webhooks/{api_key_id}":{"get":{"tags":["widget-webhooks"],"summary":"List Webhooks","operationId":"list_webhooks_api_v1_widget_webhooks__api_key_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Api Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WebhookResponse"},"title":"Response List Webhooks Api V1 Widget Webhooks  Api Key Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/widget-webhooks/{webhook_id}":{"delete":{"tags":["widget-webhooks"],"summary":"Delete Webhook","operationId":"delete_webhook_api_v1_widget_webhooks__webhook_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Webhook Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/widget/{character_id}/handoff":{"post":{"tags":["widget-handoff"],"summary":"Request Handoff Endpoint","operationId":"request_handoff_endpoint_api_v1_widget__character_id__handoff_post","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}},{"name":"X-External-User-ID","in":"header","required":true,"schema":{"type":"string","title":"X-External-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HandoffRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/widget/{character_id}/upload":{"post":{"tags":["widget-upload"],"summary":"Widget Upload","description":"위젯 파일 업로드. 채팅 메시지에 image_urls / file_urls로 포함.","operationId":"widget_upload_api_v1_widget__character_id__upload_post","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}},{"name":"X-External-User-ID","in":"header","required":true,"schema":{"type":"string","title":"X-External-User-Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_widget_upload_api_v1_widget__character_id__upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/widget/{character_id}/transcript/{conversation_id}":{"get":{"tags":["widget-transcript"],"summary":"Get Transcript","operationId":"get_transcript_api_v1_widget__character_id__transcript__conversation_id__get","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","pattern":"^(json|markdown|txt)$","default":"json","title":"Format"}},{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}},{"name":"X-External-User-ID","in":"header","required":true,"schema":{"type":"string","title":"X-External-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/widget/{character_id}/me":{"delete":{"tags":["widget-data-deletion"],"summary":"Delete My Data","description":"DELETE /api/v1/widget/{character_id}/me — 본인 데이터 삭제.\n\n이 엔드포인트는 한 번 호출하면 되돌릴 수 없다. 클라이언트는 사용자\n재확인 후에만 호출해야 함.","operationId":"delete_my_data_api_v1_widget__character_id__me_delete","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}},{"name":"X-External-User-ID","in":"header","required":true,"schema":{"type":"string","title":"X-External-User-Id"}},{"name":"X-User-Hash","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-User-Hash"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/status":{"get":{"tags":["status","status"],"summary":"Public Status","description":"운영용 공개 상태 페이지 데이터.\n응답: { components: { ... }, overall: \"operational\"|\"degraded\"|\"outage\" }\n캐시 5초 (Cache-Control 헤더는 nginx 또는 미들웨어에서).","operationId":"public_status_api_v1_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/moderation/terms":{"get":{"tags":["admin-moderation"],"summary":"List Terms","operationId":"list_terms_api_v1_admin_moderation_terms_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"enabled_only","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Enabled Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TermResponse"},"title":"Response List Terms Api V1 Admin Moderation Terms Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin-moderation"],"summary":"Create Term","operationId":"create_term_api_v1_admin_moderation_terms_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TermRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TermResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/moderation/terms/{term_id}":{"delete":{"tags":["admin-moderation"],"summary":"Delete Term","operationId":"delete_term_api_v1_admin_moderation_terms__term_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"term_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Term Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/widget/agent/reply":{"post":{"tags":["widget-agent-reply"],"summary":"Agent Reply","description":"인간 상담원이 conversation에 답장 메시지를 inject.\n\n- 운영자(JWT) 인증 필수\n- conversation의 api_key 소유자 확인 (다른 customer 채팅에 inject 금지)","operationId":"agent_reply_api_v1_widget_agent_reply_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentReplyRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentReplyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/widget/{character_id}/feedback":{"post":{"tags":["widget-feedback"],"summary":"Submit Feedback","operationId":"submit_feedback_api_v1_widget__character_id__feedback_post","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}},{"name":"X-External-User-ID","in":"header","required":true,"schema":{"type":"string","title":"X-External-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__widget__widget_feedback__FeedbackRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__widget__widget_feedback__FeedbackResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/widget/{character_id}/feedback/summary":{"get":{"tags":["widget-feedback"],"summary":"Feedback Summary","description":"API 키 단위 CSAT 요약 (avg, n, distribution).","operationId":"feedback_summary_api_v1_widget__character_id__feedback_summary_get","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"X-API-Key","in":"header","required":true,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/upload":{"post":{"tags":["character-upload"],"summary":"Upload Character","description":"엔터프라이즈급 캐릭터 업로드\n- 캐릭터 시트, 레퍼런스 이미지, 음성 샘플, 성격 가이드 등 업로드 가능\n- 브랜드 가이드라인 및 상업적 사용 권한 설정\n- 다양한 가격 모델 지원","operationId":"upload_character_api_v1_characters_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_character_api_v1_characters_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/characters/upload-status/{character_id}":{"get":{"tags":["character-upload"],"summary":"Get Upload Status","description":"업로드된 캐릭터의 처리 상태 확인","operationId":"get_upload_status_api_v1_characters_upload_status__character_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/bulk-upload":{"post":{"tags":["character-upload"],"summary":"Bulk Upload Characters","description":"대량 캐릭터 업로드 (애니메이션 스튜디오, 게임 회사용)\nZIP 파일로 여러 캐릭터를 한번에 업로드","operationId":"bulk_upload_characters_api_v1_characters_bulk_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_bulk_upload_characters_api_v1_characters_bulk_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/announcements/characters/{character_id}/announcements":{"post":{"tags":["character-announcements"],"summary":"Create Character Announcement","description":"캐릭터 공지사항 생성\n- 캐릭터 소유자만 생성 가능\n- 실시간으로 해당 캐릭터와 채팅 중인 사용자들에게 전송","operationId":"create_character_announcement_api_v1_announcements_characters__character_id__announcements_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__character_announcements__AnnouncementCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnnouncementResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["character-announcements"],"summary":"Get Character Announcements","description":"캐릭터의 공지사항 목록 조회","operationId":"get_character_announcements_api_v1_announcements_characters__character_id__announcements_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Inactive"}},{"name":"announcement_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Announcement Type"}},{"name":"priority","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Priority"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AnnouncementResponse"},"title":"Response Get Character Announcements Api V1 Announcements Characters  Character Id  Announcements Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/announcements/characters/{character_id}/announcements/active":{"get":{"tags":["character-announcements"],"summary":"Get Active Announcements For User","description":"사용자가 해당 캐릭터와 채팅할 때 표시할 활성 공지사항\n- 사용자의 조회 이력을 고려하여 필터링\n- 다국어 지원","operationId":"get_active_announcements_for_user_api_v1_announcements_characters__character_id__announcements_active_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}},{"name":"user_locale","in":"query","required":false,"schema":{"type":"string","default":"en","title":"User Locale"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/announcements/announcements/{announcement_id}/view":{"post":{"tags":["character-announcements"],"summary":"Mark Announcement Viewed","description":"공지사항 조회 기록","operationId":"mark_announcement_viewed_api_v1_announcements_announcements__announcement_id__view_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"announcement_id","in":"path","required":true,"schema":{"type":"string","title":"Announcement Id"}},{"name":"clicked","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Clicked"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/announcements/announcements/{announcement_id}/dismiss":{"post":{"tags":["character-announcements"],"summary":"Dismiss Announcement","description":"사용자가 공지사항을 닫음 (더 이상 표시하지 않음)","operationId":"dismiss_announcement_api_v1_announcements_announcements__announcement_id__dismiss_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"announcement_id","in":"path","required":true,"schema":{"type":"string","title":"Announcement Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/announcements/characters/{character_id}/announcements/{announcement_id}":{"put":{"tags":["character-announcements"],"summary":"Update Character Announcement","description":"공지사항 수정 (캐릭터 소유자만 가능)","operationId":"update_character_announcement_api_v1_announcements_characters__character_id__announcements__announcement_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}},{"name":"announcement_id","in":"path","required":true,"schema":{"type":"string","title":"Announcement Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__character_announcements__AnnouncementUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnnouncementResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["character-announcements"],"summary":"Delete Character Announcement","description":"공지사항 삭제 (캐릭터 소유자만 가능)","operationId":"delete_character_announcement_api_v1_announcements_characters__character_id__announcements__announcement_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}},{"name":"announcement_id","in":"path","required":true,"schema":{"type":"string","title":"Announcement Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/character-pricing/characters/{character_id}/pricing-plans":{"post":{"tags":["character-pricing"],"summary":"Create Pricing Plan","description":"캐릭터별 과금 플랜 생성\n- 캐릭터 소유자만 생성 가능\n- 다양한 과금 모델 지원 (메시지당, 시간당, 구독제 등)","operationId":"create_pricing_plan_api_v1_character_pricing_characters__character_id__pricing_plans_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterPricingPlanCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterPricingPlanResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["character-pricing"],"summary":"Get Character Pricing Plans","description":"캐릭터의 과금 플랜 목록 조회","operationId":"get_character_pricing_plans_api_v1_character_pricing_characters__character_id__pricing_plans_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Inactive"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CharacterPricingPlanResponse"},"title":"Response Get Character Pricing Plans Api V1 Character Pricing Characters  Character Id  Pricing Plans Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/character-pricing/characters/{character_id}/subscribe":{"post":{"tags":["character-pricing"],"summary":"Subscribe To Character","description":"캐릭터 구독 신청","operationId":"subscribe_to_character_api_v1_character_pricing_characters__character_id__subscribe_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterSubscriptionCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/character-pricing/usage/estimate":{"post":{"tags":["character-pricing"],"summary":"Estimate Usage Cost","description":"사용량 기반 비용 예측\n예상 사용량을 입력하면 예상 비용을 계산","operationId":"estimate_usage_cost_api_v1_character_pricing_usage_estimate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"query","required":true,"schema":{"type":"string","title":"Character Id"}},{"name":"pricing_plan_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pricing Plan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Usage Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/character-pricing/characters/{character_id}/revenue/dashboard":{"get":{"tags":["character-pricing"],"summary":"Get Character Revenue Dashboard","description":"캐릭터 수익 대시보드\n- 캐릭터 소유자만 접근 가능\n- 기간별 수익, 사용량, 구독자 통계","operationId":"get_character_revenue_dashboard_api_v1_character_pricing_characters__character_id__revenue_dashboard_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}},{"name":"period","in":"query","required":false,"schema":{"type":"string","pattern":"^(daily|weekly|monthly|yearly)$","default":"monthly","title":"Period"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/character-pricing/characters/{character_id}/pricing-plans/{plan_id}":{"put":{"tags":["character-pricing"],"summary":"Update Pricing Plan","description":"과금 플랜 수정","operationId":"update_pricing_plan_api_v1_character_pricing_characters__character_id__pricing_plans__plan_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}},{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Update Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/enterprise/enterprise/characters":{"post":{"tags":["enterprise-management"],"summary":"Create Enterprise Character","description":"엔터프라이즈급 캐릭터 생성\n- 브랜드 가이드라인 및 컴플라이언스 적용\n- 자동 가격 정책 설정\n- 사용량 추적 및 분석 설정","operationId":"create_enterprise_character_api_v1_enterprise_enterprise_characters_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnterpriseCharacterCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnterpriseCharacterResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["enterprise-management"],"summary":"List Enterprise Characters","description":"엔터프라이즈 캐릭터 목록 조회 (관리자용)","operationId":"list_enterprise_characters_api_v1_enterprise_enterprise_characters_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"organization","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization"}},{"name":"license_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"License Type"}},{"name":"compliance_status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Compliance Status"}},{"name":"revenue_min","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Revenue Min"}},{"name":"created_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created After"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EnterpriseCharacterResponse"},"title":"Response List Enterprise Characters Api V1 Enterprise Enterprise Characters Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/enterprise/enterprise/bulk-operations":{"post":{"tags":["enterprise-management"],"summary":"Execute Bulk Operation","description":"대량 작업 실행\n- 여러 캐릭터에 대한 일괄 작업\n- 가격 정책 업데이트, 공지사항 발송, 데이터 내보내기 등","operationId":"execute_bulk_operation_api_v1_enterprise_enterprise_bulk_operations_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkOperationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/enterprise/enterprise/analytics":{"post":{"tags":["enterprise-management"],"summary":"Generate Enterprise Analytics","description":"엔터프라이즈 분석 리포트 생성\n- 캐릭터별 성과 분석\n- 수익 분석 및 예측\n- 사용량 패턴 분석","operationId":"generate_enterprise_analytics_api_v1_enterprise_enterprise_analytics_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnterpriseAnalyticsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/enterprise/enterprise/characters/{character_id}/compliance-audit":{"post":{"tags":["enterprise-management"],"summary":"Perform Compliance Audit","description":"캐릭터 컴플라이언스 감사\n- 개인정보 보호 준수\n- 콘텐츠 가이드라인 준수\n- 금융 규정 준수","operationId":"perform_compliance_audit_api_v1_enterprise_enterprise_characters__character_id__compliance_audit_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}},{"name":"audit_type","in":"query","required":false,"schema":{"type":"string","pattern":"^(full|privacy|content|financial)$","default":"full","title":"Audit Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/enterprise/enterprise/characters/{character_id}/performance-metrics":{"get":{"tags":["enterprise-management"],"summary":"Get Character Performance Metrics","description":"캐릭터 성과 지표 조회\n- 수익 지표\n- 사용량 지표\n- 사용자 만족도\n- 성장률 및 예측","operationId":"get_character_performance_metrics_api_v1_enterprise_enterprise_characters__character_id__performance_metrics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}},{"name":"period_days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Period Days"}},{"name":"include_predictions","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Predictions"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/language/languages":{"get":{"tags":["language"],"summary":"Get Supported Languages","description":"지원하는 언어 목록 조회 (공개)","operationId":"get_supported_languages_api_v1_language_languages_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/LanguageResponse"},"type":"array","title":"Response Get Supported Languages Api V1 Language Languages Get"}}}}}}},"/api/v1/language/system-settings":{"get":{"tags":["language"],"summary":"Get System Settings","description":"공개 시스템 설정 조회","operationId":"get_system_settings_api_v1_language_system_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemSettingsResponse"}}}}}}},"/api/v1/language/admin/default-language":{"post":{"tags":["language"],"summary":"Set Default Language","description":"기본 언어 설정 (슈퍼 관리자 전용)","operationId":"set_default_language_api_v1_language_admin_default_language_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemLanguageRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/language/admin/current-settings":{"get":{"tags":["language"],"summary":"Get Admin Language Settings","description":"관리자용 언어 설정 조회","operationId":"get_admin_language_settings_api_v1_language_admin_current_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/language/admin/initialize":{"post":{"tags":["language"],"summary":"Initialize Language Settings","description":"언어 설정 초기화 (슈퍼 관리자 전용)","operationId":"initialize_language_settings_api_v1_language_admin_initialize_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/language/user-preference":{"post":{"tags":["language"],"summary":"Update User Language Preference","description":"사용자 언어 설정 업데이트","operationId":"update_user_language_preference_api_v1_language_user_preference_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserLanguagePreferenceRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/font-settings":{"get":{"tags":["font-settings"],"summary":"Get Font Settings","description":"Get current font settings (Admin/Superuser only)","operationId":"get_font_settings_api_v1_admin_font_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FontSettingsResponse"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["font-settings"],"summary":"Update Font Settings","description":"Update font settings (Superuser only)","operationId":"update_font_settings_api_v1_admin_font_settings_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FontSettingsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FontSettingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/font-settings/public":{"get":{"tags":["font-settings"],"summary":"Get Public Font Settings","description":"Get current font settings (Public endpoint for frontend)","operationId":"get_public_font_settings_api_v1_font_settings_public_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FontSettingsResponse"}}}}}}},"/api/v1/character-api-keys":{"post":{"tags":["character-api-keys"],"summary":"Create Character Api Key","description":"[DEPRECATED] 캐릭터용 API 키 생성 - 더 이상 지원하지 않습니다.\n\n프로젝트 기반 API 키를 사용하세요: POST /project-api-keys","operationId":"create_character_api_key_api_v1_character_api_keys_post","deprecated":true,"security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCharacterAPIKeyRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatedAPIKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["character-api-keys"],"summary":"List Character Api Keys","description":"[DEPRECATED] 사용자의 캐릭터 API 키 목록 조회 - 더 이상 지원하지 않습니다.\n\n프로젝트 기반 API 키를 사용하세요: GET /project-api-keys/{project_id}","operationId":"list_character_api_keys_api_v1_character_api_keys_get","deprecated":true,"security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CharacterAPIKeyResponse"},"title":"Response List Character Api Keys Api V1 Character Api Keys Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/project-api-keys":{"post":{"tags":["character-api-keys"],"summary":"Create Project Api Key","description":"프로젝트용 API 키 생성\n\n- 프로젝트 소유자만 생성 가능\n- API Key로 프로젝트 내 모든 캐릭터 접근 가능\n- 위젯에서 API Key만으로 초기화 가능","operationId":"create_project_api_key_api_v1_project_api_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProjectAPIKeyRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatedProjectAPIKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/project-api-keys/{key_id}/rotate":{"post":{"tags":["character-api-keys"],"summary":"Rotate Project Api Key","description":"API 키 재발급 — 새 키 발급 + 기존 키에 grace 기간 부여.\n\nCustomer는 새 키 + signing_secret으로 위젯/SDK 설정을 업데이트하고\ngrace_period 안에 마이그레이션하면 된다. grace 기간이 지나면 옛 키는\nexpires_at 검증에서 거부된다.","operationId":"rotate_project_api_key_api_v1_project_api_keys__key_id__rotate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Key Id"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RotateAPIKeyRequest","default":{"grace_period_hours":24}}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RotatedAPIKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/project-api-keys/{key_id}/security":{"patch":{"tags":["character-api-keys"],"summary":"Update Project Api Key Security","description":"위젯 사용자 검증을 켜고 끈다.\n\n예전엔 이 값을 바꾸려면 BestChar 서버에서\n`scripts/setup_widget_key_security.py` 를 돌려야 했다 — 고객이 스스로 할 수\n없는 설정이었고, 개발자 문서도 그렇게 안내하고 있었다.\n\n켜면 위젯 요청에 `X-User-Hash` 가 필수가 되므로, 고객사 서버가 먼저\n`HMAC-SHA256(signing_secret, user_id)` 를 계산해 넘기도록 붙여 둔 뒤에 켜야\n한다. 시크릿이 없는 키는 켤 수 없다(먼저 rotate-secret).","operationId":"update_project_api_key_security_api_v1_project_api_keys__key_id__security_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Key Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProjectAPIKeySecurityRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectAPIKeySecurityResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/project-api-keys/{key_id}/handoff":{"patch":{"tags":["character-api-keys"],"summary":"Update Project Api Key Handoff","description":"위젯 \"상담원 연결\" 알림을 받을 Slack Incoming Webhook 을 콘솔에서 직접 설정한다.\n\n예전엔 운영자가 SQL 로 `external_service_info.slack_webhook_url` 을 넣어 줘야 했다\n(docs/widget_handoff_setup.md, 2026-10-06 까지). webhook 이벤트(handoff.requested)는 이 설정과 무관하게 계속 나간다.","operationId":"update_project_api_key_handoff_api_v1_project_api_keys__key_id__handoff_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Key Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProjectAPIKeyHandoffRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectAPIKeyHandoffResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/project-api-keys/{key_id}/handoff/test":{"post":{"tags":["character-api-keys"],"summary":"Test Project Api Key Handoff","description":"설정한 Slack 채널로 시험 메시지를 보낸다 (실제 핸드오프와 같은 경로).","operationId":"test_project_api_key_handoff_api_v1_project_api_keys__key_id__handoff_test_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Test Project Api Key Handoff Api V1 Project Api Keys  Key Id  Handoff Test Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/project-api-keys/{key_id}/rotate-secret":{"post":{"tags":["character-api-keys"],"summary":"Rotate Project Api Key Signing Secret","description":"서명 시크릿만 재발급한다 (API 키는 유지).\n\n시크릿은 발급 시 한 번만 평문으로 나가고 저장해 둘 방법이 없으므로,\n잃어버렸을 때 키 전체를 갈아엎지 않고 되찾는 경로가 필요하다.","operationId":"rotate_project_api_key_signing_secret_api_v1_project_api_keys__key_id__rotate_secret_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RotatedSigningSecretResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/project-api-keys/{project_id}":{"get":{"tags":["character-api-keys"],"summary":"List Project Api Keys","description":"프로젝트의 API 키 목록 조회","operationId":"list_project_api_keys_api_v1_project_api_keys__project_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProjectAPIKeyResponse"},"title":"Response List Project Api Keys Api V1 Project Api Keys  Project Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/character-api-keys/{key_id}":{"get":{"tags":["character-api-keys"],"summary":"Get Character Api Key","description":"특정 API 키 상세 조회","operationId":"get_character_api_key_api_v1_character_api_keys__key_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterAPIKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["character-api-keys"],"summary":"Update Character Api Key","description":"API 키 설정 업데이트","operationId":"update_character_api_key_api_v1_character_api_keys__key_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Key Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCharacterAPIKeyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterAPIKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["character-api-keys"],"summary":"Delete Character Api Key","description":"API 키 삭제 (실제로는 revoked 상태로 변경)","operationId":"delete_character_api_key_api_v1_character_api_keys__key_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Key Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/character-api-keys/{key_id}/usage":{"get":{"tags":["character-api-keys"],"summary":"Get Api Key Usage Stats","description":"API 키 사용량 통계 조회","operationId":"get_api_key_usage_stats_api_v1_character_api_keys__key_id__usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKeyUsageStats"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/character-api-keys/{api_key_id}/analytics/summary":{"get":{"tags":["widget-analytics"],"summary":"Get Summary Stats","description":"API 키 사용량 요약 통계","operationId":"get_summary_stats_api_v1_character_api_keys__api_key_id__analytics_summary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Api Key Id"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"시작일 (YYYY-MM-DD)","title":"Start Date"},"description":"시작일 (YYYY-MM-DD)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"종료일 (YYYY-MM-DD)","title":"End Date"},"description":"종료일 (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SummaryStats"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/character-api-keys/{api_key_id}/analytics/daily":{"get":{"tags":["widget-analytics"],"summary":"Get Daily Stats","description":"일별 요청 통계","operationId":"get_daily_stats_api_v1_character_api_keys__api_key_id__analytics_daily_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Api Key Id"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DailyStats"},"title":"Response Get Daily Stats Api V1 Character Api Keys  Api Key Id  Analytics Daily Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/character-api-keys/{api_key_id}/analytics/endpoints":{"get":{"tags":["widget-analytics"],"summary":"Get Endpoint Stats","description":"엔드포인트별 요청 통계","operationId":"get_endpoint_stats_api_v1_character_api_keys__api_key_id__analytics_endpoints_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Api Key Id"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EndpointStats"},"title":"Response Get Endpoint Stats Api V1 Character Api Keys  Api Key Id  Analytics Endpoints Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/character-api-keys/{api_key_id}/analytics/users":{"get":{"tags":["widget-analytics"],"summary":"Get Top Users","description":"상위 사용자 통계","operationId":"get_top_users_api_v1_character_api_keys__api_key_id__analytics_users_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Api Key Id"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TopUser"},"title":"Response Get Top Users Api V1 Character Api Keys  Api Key Id  Analytics Users Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/character-api-keys/{api_key_id}/analytics/security":{"get":{"tags":["widget-analytics"],"summary":"Get Security Incidents","description":"보안 이벤트 조회","operationId":"get_security_incidents_api_v1_character_api_keys__api_key_id__analytics_security_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Api Key Id"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SecurityIncident"},"title":"Response Get Security Incidents Api V1 Character Api Keys  Api Key Id  Analytics Security Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/character-api-keys/{api_key_id}/logs":{"get":{"tags":["widget-analytics"],"summary":"Get Recent Logs","description":"최근 API 로그 조회","operationId":"get_recent_logs_api_v1_character_api_keys__api_key_id__logs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Api Key Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UsageLogItem"},"title":"Response Get Recent Logs Api V1 Character Api Keys  Api Key Id  Logs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/embed/{character_id}":{"get":{"tags":["widget-embed"],"summary":"Get Widget Embed","description":"위젯 iframe 페이지 제공\n\n- API 키로 인증\n- Rate limiting 적용\n- HTTPS/도메인/IP 제한 확인\n- 구매자별 커스텀 테마 적용 (purchase_id 제공 시)","operationId":"get_widget_embed_api_v1_embed__character_id__get","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"theme","in":"query","required":false,"schema":{"type":"string","pattern":"^(light|dark)$","default":"light","title":"Theme"}},{"name":"style","in":"query","required":false,"schema":{"type":"string","pattern":"^(default|minimal|compact)$","default":"default","title":"Style"}},{"name":"height","in":"query","required":false,"schema":{"type":"string","pattern":"^\\d+$","default":"600","title":"Height"}},{"name":"purchase_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"구매 ID (구매자별 테마 적용)","title":"Purchase Id"},"description":"구매 ID (구매자별 테마 적용)"}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/widget-config/{character_id}":{"get":{"tags":["widget-embed"],"summary":"Get Widget Config","description":"위젯 설정 조회 (JavaScript SDK용)\n\n- 캐릭터 정보\n- 허용된 기능\n- Rate limit 정보","operationId":"get_widget_config_api_v1_widget_config__character_id__get","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/widget-themes":{"post":{"tags":["widget-theme"],"summary":"Create Widget Theme","description":"구매한 캐릭터에 대한 위젯 테마 생성","operationId":"create_widget_theme_api_v1_widget_themes_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetThemeCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/widget-themes/purchase/{purchase_id}":{"get":{"tags":["widget-theme"],"summary":"Get Widget Theme By Purchase","description":"구매 ID로 위젯 테마 조회","operationId":"get_widget_theme_by_purchase_api_v1_widget_themes_purchase__purchase_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"purchase_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Purchase Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/widget-themes/{theme_id}":{"get":{"tags":["widget-theme"],"summary":"Get Widget Theme","description":"위젯 테마 상세 조회","operationId":"get_widget_theme_api_v1_widget_themes__theme_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"theme_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Theme Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["widget-theme"],"summary":"Update Widget Theme","description":"위젯 테마 업데이트","operationId":"update_widget_theme_api_v1_widget_themes__theme_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"theme_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Theme Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetThemeUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["widget-theme"],"summary":"Delete Widget Theme","description":"위젯 테마 삭제 (기본 테마로 돌아감)","operationId":"delete_widget_theme_api_v1_widget_themes__theme_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"theme_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Theme Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/widget-themes/{theme_id}/css":{"get":{"tags":["widget-theme"],"summary":"Get Theme Css","description":"위젯 테마를 CSS 변수로 변환하여 반환","operationId":"get_theme_css_api_v1_widget_themes__theme_id__css_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"theme_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Theme Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/widget-themes/presets":{"get":{"tags":["widget-theme"],"summary":"List Theme Presets","description":"사용 가능한 테마 프리셋 목록 조회","operationId":"list_theme_presets_api_v1_widget_themes_presets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/widget-themes/{theme_id}/apply-preset/{preset_id}":{"post":{"tags":["widget-theme"],"summary":"Apply Preset To Theme","description":"프리셋을 내 테마에 적용","operationId":"apply_preset_to_theme_api_v1_widget_themes__theme_id__apply_preset__preset_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"theme_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Theme Id"}},{"name":"preset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Preset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/widget-themes/presets":{"post":{"tags":["widget-theme"],"summary":"Create Theme Preset","description":"테마 프리셋 생성 (관리자 전용)","operationId":"create_theme_preset_api_v1_admin_widget_themes_presets_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThemePresetCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/web_crawling/{character_id}/crawl-website":{"post":{"tags":["web-crawling"],"summary":"Crawl Website","description":"웹사이트 크롤링 시작","operationId":"crawl_website_api_v1_web_crawling__character_id__crawl_website_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebsiteCrawlRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/web_crawling/{character_id}/status/{task_id}":{"get":{"tags":["web-crawling"],"summary":"Get Crawl Status","description":"크롤링 상태 조회","operationId":"get_crawl_status_api_v1_web_crawling__character_id__status__task_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/web_crawling/{character_id}/add-domain":{"post":{"tags":["web-crawling"],"summary":"Add Crawl Domain","description":"캐릭터에 크롤링 도메인 추가","operationId":"add_crawl_domain_api_v1_web_crawling__character_id__add_domain_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainAddRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/web_crawling/{character_id}/domains":{"get":{"tags":["web-crawling"],"summary":"Get Character Domains","description":"캐릭터의 크롤링 도메인 목록 조회","operationId":"get_character_domains_api_v1_web_crawling__character_id__domains_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/web_crawling/{character_id}/domains/{domain_id}":{"delete":{"tags":["web-crawling"],"summary":"Remove Crawl Domain","description":"크롤링 도메인 제거","operationId":"remove_crawl_domain_api_v1_web_crawling__character_id__domains__domain_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Domain Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/web_crawling/{character_id}/domains/{domain_id}/crawl-now":{"post":{"tags":["web-crawling"],"summary":"Crawl Domain Now","description":"도메인 즉시 크롤링 실행","operationId":"crawl_domain_now_api_v1_web_crawling__character_id__domains__domain_id__crawl_now_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Domain Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/web_crawling/{character_id}/domains/{domain_id}/toggle":{"post":{"tags":["web-crawling"],"summary":"Toggle Domain Active","description":"도메인 활성화/비활성화 토글","operationId":"toggle_domain_active_api_v1_web_crawling__character_id__domains__domain_id__toggle_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Domain Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/web_crawling/{character_id}/crawled-pages":{"get":{"tags":["web-crawling"],"summary":"Get Crawled Pages","description":"크롤링된 페이지 목록 조회","operationId":"get_crawled_pages_api_v1_web_crawling__character_id__crawled_pages_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/web_crawling/{character_id}/analyze-pending":{"post":{"tags":["web-crawling"],"summary":"Analyze Pending Documents","description":"PENDING 상태인 크롤링 문서들을 일괄 벡터 분석","operationId":"analyze_pending_documents_api_v1_web_crawling__character_id__analyze_pending_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/web_crawling/{character_id}/discover-sitemap":{"get":{"tags":["web-crawling"],"summary":"Discover Sitemap","description":"사이트의 Sitemap 위치 탐색\n\nrobots.txt와 일반적인 위치에서 sitemap.xml을 찾습니다.","operationId":"discover_sitemap_api_v1_web_crawling__character_id__discover_sitemap_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"url","in":"query","required":true,"schema":{"type":"string","title":"Url"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/web_crawling/{character_id}/sitemap-urls":{"get":{"tags":["web-crawling"],"summary":"Get Sitemap Urls","description":"Sitemap에서 URL 목록 가져오기\n\n사이트의 sitemap.xml을 파싱하여 크롤링 가능한 URL 목록을 반환합니다.","operationId":"get_sitemap_urls_api_v1_web_crawling__character_id__sitemap_urls_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"url","in":"query","required":true,"schema":{"type":"string","title":"Url"}},{"name":"max_urls","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Max Urls"}},{"name":"include_patterns","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Include Patterns"}},{"name":"exclude_patterns","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exclude Patterns"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/web_crawling/{character_id}/analyze-site-structure":{"get":{"tags":["web-crawling"],"summary":"Analyze Site Structure","description":"사이트 구조 분석\n\nSitemap을 분석하여 사이트의 카테고리, 페이지 유형, 깊이 분포를 파악합니다.\n크롤링 전략 수립에 유용합니다.","operationId":"analyze_site_structure_api_v1_web_crawling__character_id__analyze_site_structure_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"url","in":"query","required":true,"schema":{"type":"string","title":"Url"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/web_crawling/{character_id}/crawl-sitemap":{"post":{"tags":["web-crawling"],"summary":"Crawl From Sitemap","description":"Sitemap 기반 크롤링\n\n사이트의 sitemap.xml을 사용하여 효율적으로 크롤링합니다.\n일반 크롤링보다 빠르고 정확합니다.","operationId":"crawl_from_sitemap_api_v1_web_crawling__character_id__crawl_sitemap_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SitemapCrawlRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/web_crawling/{character_id}/sitemap-updates":{"get":{"tags":["web-crawling"],"summary":"Get Sitemap Updates","description":"최근 업데이트된 페이지 조회\n\nSitemap의 lastmod 정보를 활용하여 최근 변경된 페이지만 조회합니다.\n증분 크롤링에 유용합니다.","operationId":"get_sitemap_updates_api_v1_web_crawling__character_id__sitemap_updates_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"url","in":"query","required":true,"schema":{"type":"string","title":"Url"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":7,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/marketplace/characters":{"get":{"tags":["marketplace-buyer"],"summary":"Get Marketplace Characters","description":"마켓플레이스 캐릭터 목록 조회 (공개 캐릭터)","operationId":"get_marketplace_characters_api_v1_marketplace_characters_get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Category"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/marketplace/my-purchases":{"get":{"tags":["marketplace-buyer"],"summary":"Get My Purchases","description":"현재 사용자의 구매한 캐릭터 목록 조회 (N+1 최적화 완료)","operationId":"get_my_purchases_api_v1_marketplace_my_purchases_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/marketplace/my-characters/{character_id}":{"get":{"tags":["marketplace-buyer"],"summary":"Get Purchased Character Detail","description":"구매한 캐릭터 상세 정보","operationId":"get_purchased_character_detail_api_v1_marketplace_my_characters__character_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/knowledge/{character_id}/my-knowledge":{"get":{"tags":["buyer-knowledge"],"summary":"Get My Custom Knowledge","description":"구매자의 커스텀 지식 목록 조회","operationId":"get_my_custom_knowledge_api_v1_knowledge__character_id__my_knowledge_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/knowledge/{character_id}/knowledge/{knowledge_id}":{"get":{"tags":["buyer-knowledge"],"summary":"Get Knowledge Detail","description":"특정 지식 상세 조회","operationId":"get_knowledge_detail_api_v1_knowledge__character_id__knowledge__knowledge_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"knowledge_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Knowledge Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["buyer-knowledge"],"summary":"Update Knowledge","description":"지식 수정 (내용 변경 시 벡터 재생성)","operationId":"update_knowledge_api_v1_knowledge__character_id__knowledge__knowledge_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"knowledge_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Knowledge Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["buyer-knowledge"],"summary":"Delete Custom Knowledge","description":"커스텀 지식 삭제 (PostgreSQL + Qdrant)","operationId":"delete_custom_knowledge_api_v1_knowledge__character_id__knowledge__knowledge_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"knowledge_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Knowledge Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/knowledge/{character_id}/text":{"post":{"tags":["buyer-knowledge"],"summary":"Add Text Knowledge","description":"텍스트 직접 입력으로 지식 추가 (Qdrant 벡터화 포함)","operationId":"add_text_knowledge_api_v1_knowledge__character_id__text_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeTextRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/knowledge/{character_id}/document":{"post":{"tags":["buyer-knowledge"],"summary":"Upload Document Knowledge","description":"문서 파일 업로드로 지식 추가 (Qdrant 벡터화 포함)","operationId":"upload_document_knowledge_api_v1_knowledge__character_id__document_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_document_knowledge_api_v1_knowledge__character_id__document_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/knowledge/{character_id}/search":{"post":{"tags":["buyer-knowledge"],"summary":"Search Knowledge","description":"지식 검색 (벡터 유사도 기반)","operationId":"search_knowledge_api_v1_knowledge__character_id__search_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeSearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/knowledge/{character_id}/crawl":{"post":{"tags":["buyer-knowledge"],"summary":"Crawl For Custom Knowledge","description":"구매자 전용 웹 크롤링 (커스텀 지식 추가)","operationId":"crawl_for_custom_knowledge_api_v1_knowledge__character_id__crawl_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeCrawlRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/marketplace/payments/create-intent":{"post":{"tags":["marketplace-payments"],"summary":"Create Marketplace Payment Intent","description":"마켓플레이스 결제 Intent 생성 (캐릭터 구매)\n\n이 엔드포인트는 캐릭터 구매 결제를 위한 Stripe Payment Intent를 생성합니다.","operationId":"create_marketplace_payment_intent_api_v1_marketplace_payments_create_intent_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketplacePaymentIntentRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketplacePaymentIntentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/marketplace/payments/confirm":{"post":{"tags":["marketplace-payments"],"summary":"Confirm Marketplace Payment","description":"마켓플레이스 결제 확인 및 Purchase 생성\n\n결제 완료 후:\n1. Purchase 레코드 생성\n2. API Key 자동 생성\n3. 구매자에게 접근 권한 부여","operationId":"confirm_marketplace_payment_api_v1_marketplace_payments_confirm_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketplacePaymentConfirmRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/marketplace/payments/refund":{"post":{"tags":["marketplace-payments"],"summary":"Request Marketplace Refund","description":"마켓플레이스 환불 요청\n\n구매자 또는 관리자만 환불 가능","operationId":"request_marketplace_refund_api_v1_marketplace_payments_refund_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefundRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/marketplace/payments/history":{"get":{"tags":["marketplace-payments"],"summary":"Get Marketplace Purchase History","description":"마켓플레이스 구매 내역 조회","operationId":"get_marketplace_purchase_history_api_v1_marketplace_payments_history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/marketplace/payments/webhook":{"post":{"tags":["marketplace-payments"],"summary":"Marketplace Stripe Webhook","description":"마켓플레이스 Stripe Webhook\n\nStripe에서 결제 이벤트 발생 시 자동 호출:\n- payment_intent.succeeded: 결제 성공\n- payment_intent.payment_failed: 결제 실패\n- charge.refunded: 환불 완료","operationId":"marketplace_stripe_webhook_api_v1_marketplace_payments_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/characters/{character_id}/purchase":{"post":{"tags":["character-marketplace"],"summary":"캐릭터 구매","description":"캐릭터를 구매하여 Base Knowledge 접근 권한을 획득합니다.\n\n    구매 후:\n    - Base Knowledge를 활용한 채팅 가능\n    - Custom Knowledge 추가 가능\n    - 구매자만의 맞춤형 캐릭터 구성","operationId":"purchase_character_api_v1_characters__character_id__purchase_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketplacePurchaseRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketplacePurchaseResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/purchase/check":{"get":{"tags":["character-marketplace"],"summary":"구매 여부 확인","description":"현재 사용자가 해당 캐릭터를 구매했는지 확인합니다.","operationId":"check_purchase_access_api_v1_characters__character_id__purchase_check_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"api_key_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/knowledge/custom":{"post":{"tags":["character-marketplace"],"summary":"커스텀 지식 추가","description":"구매한 캐릭터에 Custom Knowledge를 추가합니다.\n\n    Base Knowledge와 분리되어 관리되며, 구매자만 접근 가능합니다.\n    RAG 검색 시 Custom Knowledge가 Base Knowledge보다 우선순위가 높습니다.","operationId":"add_custom_knowledge_api_v1_characters__character_id__knowledge_custom_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomKnowledgeRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/knowledge/from-url":{"post":{"tags":["character-marketplace"],"summary":"URL에서 커스텀 지식 자동 추출","description":"URL을 크롤링하여 자동으로 Custom Knowledge를 추가합니다.\n\n    비동기 작업으로 처리되며, task_id를 반환합니다.\n    작업 상태는 Celery Flower 또는 별도의 task status API로 확인 가능합니다.","operationId":"add_custom_knowledge_from_url_api_v1_characters__character_id__knowledge_from_url_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomKnowledgeFromUrlRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/knowledge/stats":{"get":{"tags":["character-marketplace"],"summary":"캐릭터 지식 통계","description":"캐릭터의 Base Knowledge와 Custom Knowledge 통계를 조회합니다.\n\n    - Base Knowledge: 판매자가 추가한 기본 지식\n    - Custom Knowledge: 구매자가 추가한 맞춤 지식\n    - Total: 전체 통계\n    - Purchase Info: 구매 정보 및 사용 통계","operationId":"get_knowledge_stats_api_v1_characters__character_id__knowledge_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"api_key_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/intelligence-settings":{"get":{"tags":["intelligence-settings"],"summary":"Get Character Intelligence Settings","description":"캐릭터 지능 설정 조회\n- 캐릭터 소유자 또는 공개 캐릭터 구매자 접근 가능","operationId":"get_character_intelligence_settings_api_v1_characters__character_id__intelligence_settings_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Character Intelligence Settings Api V1 Characters  Character Id  Intelligence Settings Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["intelligence-settings"],"summary":"Update Character Intelligence Settings","description":"캐릭터 지능 설정 업데이트\n- 캐릭터 소유자만 가능\n- 글로벌 최대값 제한 적용","operationId":"update_character_intelligence_settings_api_v1_characters__character_id__intelligence_settings_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterKnowledgeSettingsUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Character Intelligence Settings Api V1 Characters  Character Id  Intelligence Settings Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/global-intelligence-limits":{"get":{"tags":["intelligence-settings"],"summary":"Get Global Intelligence Limits","description":"글로벌 지능 제한 설정 조회\n- 슈퍼 관리자만 접근 가능","operationId":"get_global_intelligence_limits_api_v1_admin_global_intelligence_limits_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Global Intelligence Limits Api V1 Admin Global Intelligence Limits Get"}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["intelligence-settings"],"summary":"Update Global Intelligence Limits","description":"글로벌 지능 제한 설정 업데이트\n- 슈퍼 관리자만 가능","operationId":"update_global_intelligence_limits_api_v1_admin_global_intelligence_limits_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalIntelligenceLimitsUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Update Global Intelligence Limits Api V1 Admin Global Intelligence Limits Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/characters/{character_id}/intelligence-settings/user":{"get":{"tags":["intelligence-settings"],"summary":"Get User Intelligence Settings","description":"구매자의 개인 지능 설정 조회\n- 구매자 본인의 오버라이드 설정\n- 실제 적용될 병합된 설정값도 함께 반환","operationId":"get_user_intelligence_settings_api_v1_characters__character_id__intelligence_settings_user_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get User Intelligence Settings Api V1 Characters  Character Id  Intelligence Settings User Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["intelligence-settings"],"summary":"Update User Intelligence Settings","description":"구매자의 개인 지능 설정 업데이트\n- 구매한 캐릭터에 대해서만 설정 가능\n- 소유자 설정을 기본값으로 사용하고, 오버라이드할 값만 저장","operationId":"update_user_intelligence_settings_api_v1_characters__character_id__intelligence_settings_user_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserIntelligenceSettingsUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update User Intelligence Settings Api V1 Characters  Character Id  Intelligence Settings User Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["intelligence-settings"],"summary":"Reset User Intelligence Settings","description":"구매자의 개인 지능 설정 초기화\n- 모든 오버라이드를 삭제하고 소유자 설정으로 복원","operationId":"reset_user_intelligence_settings_api_v1_characters__character_id__intelligence_settings_user_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Reset User Intelligence Settings Api V1 Characters  Character Id  Intelligence Settings User Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/transactions/":{"get":{"tags":["transactions"],"summary":"Get Transactions","description":"사용자의 거래 내역 조회","operationId":"get_transactions_api_v1_transactions__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["transactions"],"summary":"Create Transaction","description":"거래 생성 (결제 처리)","operationId":"create_transaction_api_v1_transactions__post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/transactions":{"get":{"tags":["transactions"],"summary":"Get Transactions","description":"사용자의 거래 내역 조회","operationId":"get_transactions_api_v1_transactions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/transactions/create":{"post":{"tags":["transactions"],"summary":"Create Transaction","description":"거래 생성 (결제 처리)","operationId":"create_transaction_api_v1_transactions_create_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/transactions/my-purchases":{"get":{"tags":["transactions"],"summary":"Get My Purchases","description":"내 구매 내역 조회","operationId":"get_my_purchases_api_v1_transactions_my_purchases_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TransactionResponse"},"title":"Response Get My Purchases Api V1 Transactions My Purchases Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/transactions/my-sales":{"get":{"tags":["transactions"],"summary":"Get My Sales","description":"내 판매 내역 조회","operationId":"get_my_sales_api_v1_transactions_my_sales_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TransactionResponse"},"title":"Response Get My Sales Api V1 Transactions My Sales Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/transactions/{transaction_id}":{"get":{"tags":["transactions"],"summary":"Get Transaction","description":"거래 상세 조회","operationId":"get_transaction_api_v1_transactions__transaction_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"transaction_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Transaction Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/transactions/reviews":{"post":{"tags":["transactions"],"summary":"Create Review","description":"거래 리뷰 작성","operationId":"create_review_api_v1_transactions_reviews_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionReviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/transactions/refunds":{"post":{"tags":["transactions"],"summary":"Request Refund","description":"환불 요청","operationId":"request_refund_api_v1_transactions_refunds_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefundCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Request Refund Api V1 Transactions Refunds Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/transactions/disputes":{"post":{"tags":["transactions"],"summary":"Create Dispute","description":"분쟁 제기","operationId":"create_dispute_api_v1_transactions_disputes_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DisputeCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Dispute Api V1 Transactions Disputes Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/transactions/seller-profile":{"get":{"tags":["transactions"],"summary":"Get Seller Profile","description":"판매자(Creator) 프로필 조회 — 통합 UserProfile 사용","operationId":"get_seller_profile_api_v1_transactions_seller_profile_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Seller Profile Api V1 Transactions Seller Profile Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/transactions/buyer-profile":{"get":{"tags":["transactions"],"summary":"Get Buyer Profile","description":"구매자(Consumer) 프로필 조회 — 통합 UserProfile 사용","operationId":"get_buyer_profile_api_v1_transactions_buyer_profile_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Buyer Profile Api V1 Transactions Buyer Profile Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/revenue/overview":{"get":{"tags":["unified-revenue"],"summary":"Get Unified Revenue Overview","description":"통합 수익 개요\n\n마켓플레이스 판매 + API 사용 수익을 한번에 조회","operationId":"get_unified_revenue_overview_api_v1_revenue_overview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/revenue/by-character":{"get":{"tags":["unified-revenue"],"summary":"Get Revenue By Character","description":"캐릭터별 통합 수익 (판매 + API 사용)","operationId":"get_revenue_by_character_api_v1_revenue_by_character_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/revenue/timeline":{"get":{"tags":["unified-revenue"],"summary":"Get Revenue Timeline","description":"일별 통합 수익 추이","operationId":"get_revenue_timeline_api_v1_revenue_timeline_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/creator/api-revenue/overview":{"get":{"tags":["creator-api-revenue"],"summary":"Get Revenue Overview","description":"캐릭터 크리에이터의 전체 API 사용 수익 개요\nReturns total earnings from external API usage of their characters\n\n최적화: 단일 쿼리로 전체/월별 통계를 함께 조회 (N+1 문제 해결)\n- 기존: 4개 쿼리 (캐릭터 ID 조회 + 전체 통계 + 월별 통계 + 활성 구매자)\n- 최적화: 2개 쿼리 (통합 통계 + 출금 대기)","operationId":"get_revenue_overview_api_v1_creator_api_revenue_overview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/creator/api-revenue/by-character":{"get":{"tags":["creator-api-revenue"],"summary":"Get Revenue By Character","description":"캐릭터별 API 사용 수익 분석\nShows which characters are generating the most API revenue\n\n최적화: 단일 쿼리로 캐릭터 정보 + 통계를 함께 조회 (N+1 문제 해결)\n- 기존: 2개 쿼리 (캐릭터 조회 + 통계 조회)\n- 최적화: 1개 쿼리 (JOIN으로 한번에 조회)","operationId":"get_revenue_by_character_api_v1_creator_api_revenue_by_character_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/creator/api-revenue/timeline":{"get":{"tags":["creator-api-revenue"],"summary":"Get Revenue Timeline","description":"일별 API 수익 추이\nDaily revenue timeline for charts\n\n최적화: JOIN으로 캐릭터 ID 서브쿼리 제거 (N+1 문제 해결)\n- 기존: 2개 쿼리 (캐릭터 ID 조회 + 일별 통계)\n- 최적화: 1개 쿼리 (JOIN으로 한번에 조회)","operationId":"get_revenue_timeline_api_v1_creator_api_revenue_timeline_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/creator/api-revenue/buyers":{"get":{"tags":["creator-api-revenue"],"summary":"Get Active Buyers","description":"활성 구매자 목록 (내 캐릭터를 API로 사용 중인 사용자)\nList of active buyers using my characters via API\n\n최적화: JOIN으로 캐릭터 ID 서브쿼리 제거 (N+1 문제 해결)\n- 기존: 2개 쿼리 (캐릭터 ID 조회 + 구매자 통계)\n- 최적화: 1개 쿼리 (3-way JOIN으로 한번에 조회)","operationId":"get_active_buyers_api_v1_creator_api_revenue_buyers_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/creator/api-revenue/request-withdrawal":{"post":{"tags":["creator-api-revenue"],"summary":"Request Withdrawal","description":"출금 요청 (최소 $50)\nRequest withdrawal of earned API revenue\n\nArgs:\n    amount: 출금 금액 (USD)\n    payout_method: 출금 방법 (stripe, paypal, bank_transfer)\n    payout_details: 출금 계좌 정보\n        - stripe: {\"stripe_account_id\": \"acct_xxx\"}\n        - paypal: {\"paypal_email\": \"user@example.com\"}\n        - bank_transfer: {\"bank_account_number\": \"xxx\", \"bank_code\": \"xxx\"}","operationId":"request_withdrawal_api_v1_creator_api_revenue_request_withdrawal_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"amount","in":"query","required":true,"schema":{"type":"number","title":"Amount"}},{"name":"payout_method","in":"query","required":false,"schema":{"type":"string","default":"stripe","title":"Payout Method"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Payout Details"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/creator/api-revenue/withdrawal-history":{"get":{"tags":["creator-api-revenue"],"summary":"Get Withdrawal History","description":"출금 이력 조회\nGet withdrawal history","operationId":"get_withdrawal_history_api_v1_creator_api_revenue_withdrawal_history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/creator/api-revenue/admin/process-withdrawal/{withdrawal_id}":{"post":{"tags":["creator-api-revenue"],"summary":"Admin Process Withdrawal","description":"[관리자 전용] 출금 요청 처리\nAdmin: Process withdrawal request","operationId":"admin_process_withdrawal_api_v1_creator_api_revenue_admin_process_withdrawal__withdrawal_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"withdrawal_id","in":"path","required":true,"schema":{"type":"string","title":"Withdrawal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cost-management/platform/summary":{"get":{"tags":["cost-management","cost-management"],"summary":"플랫폼 전체 AI 비용 요약 (관리자 전용)","description":"**슈퍼 관리자 대시보드**\n\n플랫폼 전체 AI 비용 분석:\n- 총 AI 비용 (LLM, 이미지, 음성)\n- 모델별 비용 분석\n- 사용자별 비용 TOP 10\n- 캐릭터별 비용 TOP 10\n- 일별 비용 트렌드\n\n**권한**: 슈퍼 관리자만 접근 가능","operationId":"get_platform_cost_summary_api_v1_cost_management_platform_summary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cost-management/platform/export":{"get":{"tags":["cost-management","cost-management"],"summary":"플랫폼 비용 리포트 내보내기 (관리자 전용)","description":"플랫폼 비용 리포트를 지정된 형식으로 내보내기\n\n**권한**: 슈퍼 관리자만 접근 가능","operationId":"export_platform_cost_report_api_v1_cost_management_platform_export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"시작 날짜","title":"Start Date"},"description":"시작 날짜"},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"종료 날짜","title":"End Date"},"description":"종료 날짜"},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"포맷 (json, csv, pdf)","default":"json","title":"Format"},"description":"포맷 (json, csv, pdf)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cost-management/seller/revenue":{"get":{"tags":["cost-management","cost-management"],"summary":"판매자 수익/비용 요약","description":"**캐릭터 판매자 대시보드**\n\n내 캐릭터의 판매 수익 및 비용 분석:\n- 캐릭터별 판매 수익\n- 캐릭터별 AI 비용\n- 순수익 (수익 - AI 비용)\n- 수익성 분석 (이익률)\n- 최근 거래 내역\n\n**자동으로 로그인한 사용자의 수익 정보 조회**","operationId":"get_seller_revenue_summary_api_v1_cost_management_seller_revenue_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cost-management/seller/character/{character_id}/details":{"get":{"tags":["cost-management","cost-management"],"summary":"특정 캐릭터 상세 수익 정보","description":"특정 캐릭터의 상세 수익/비용 분석\n\n**권한**: 캐릭터 소유자만 접근 가능","operationId":"get_character_revenue_details_api_v1_cost_management_seller_character__character_id__details_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cost-management/seller/export":{"get":{"tags":["cost-management","cost-management"],"summary":"판매자 수익 리포트 내보내기","description":"판매자 수익 리포트를 지정된 형식으로 내보내기","operationId":"export_seller_revenue_report_api_v1_cost_management_seller_export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date-time","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date-time","title":"End Date"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"포맷 (json, csv, pdf)","default":"json","title":"Format"},"description":"포맷 (json, csv, pdf)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cost-management/buyer/usage":{"get":{"tags":["cost-management","cost-management"],"summary":"구매자 사용량 및 비용 요약","description":"**구매자 대시보드**\n\n내가 구매한 캐릭터의 사용량 및 비용 분석:\n- 캐릭터별 사용량 (메시지 수, 토큰 수)\n- 캐릭터별 지출 금액\n- 거래 유형별 지출 (구독, 일회성 구매 등)\n- 일별 지출 트렌드\n- 최근 거래 내역\n\n**자동으로 로그인한 사용자의 사용량 정보 조회**","operationId":"get_buyer_usage_summary_api_v1_cost_management_buyer_usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cost-management/buyer/character/{character_id}/usage":{"get":{"tags":["cost-management","cost-management"],"summary":"특정 캐릭터 사용량 상세","description":"특정 캐릭터의 상세 사용량 및 비용 분석","operationId":"get_character_usage_details_api_v1_cost_management_buyer_character__character_id__usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cost-management/buyer/export":{"get":{"tags":["cost-management","cost-management"],"summary":"구매자 사용량 리포트 내보내기","description":"구매자 사용량 리포트를 지정된 형식으로 내보내기","operationId":"export_buyer_usage_report_api_v1_cost_management_buyer_export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date-time","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date-time","title":"End Date"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"포맷 (json, csv, pdf)","default":"json","title":"Format"},"description":"포맷 (json, csv, pdf)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cost-management/quick-stats":{"get":{"tags":["cost-management","cost-management"],"summary":"빠른 통계 (대시보드 위젯용)","description":"대시보드 위젯에 표시할 빠른 통계\n- 오늘 지출/수익\n- 이번 달 지출/수익\n- 최근 7일 트렌드","operationId":"get_quick_stats_api_v1_cost_management_quick_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/buyer/site-learning/one-click":{"post":{"tags":["buyer-site-learning","buyer-site-learning"],"summary":"🚀 원클릭 자동 학습 (초보자용)","description":"**원클릭으로 웹사이트 자동 학습**\n\n## 사용 방법\n1. 학습시킬 캐릭터 ID와 웹사이트 URL만 입력\n2. 모든 설정은 자동 (기본값 사용)\n3. 완료!\n\n## 자동 설정\n- 크롤링 깊이: 3단계\n- 최대 페이지: 50개\n- 제외 페이지: /admin, /login 등\n- AI 모델: GPT-3.5 Turbo\n- 응답 톤: 친절한\n\n## 반환값\n- session: 학습 작업 정보\n- widget_code: 바로 사용 가능한 위젯 코드\n- message: 안내 메시지\n\n## 예상 소요 시간\n- 약 3-5분 (페이지 수에 따라 다름)","operationId":"one_click_learn_api_v1_buyer_site_learning_one_click_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OneClickLearnRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/buyer/site-learning/advanced":{"post":{"tags":["buyer-site-learning","buyer-site-learning"],"summary":"⚙️ 고급 설정 학습 (전문가용)","description":"**고급 설정으로 웹사이트 학습**\n\n## 커스터마이징 가능한 옵션\n\n### 크롤링 설정\n- `max_pages`: 크롤링할 최대 페이지 수 (1-500)\n- `max_depth`: 크롤링 깊이 (1-10)\n- `exclude_patterns`: 제외할 URL 패턴 리스트\n\n### AI 설정\n- `ai_model`: 사용할 AI 모델\n  - `gpt-4`: 가장 강력 (비용 높음)\n  - `gpt-3.5-turbo`: 균형잡힌 성능 (추천)\n  - `claude-2`: Anthropic Claude\n- `response_tone`: 응답 톤\n  - `friendly`: 친절한\n  - `professional`: 전문적인\n  - `casual`: 편안한\n- `max_response_length`: 최대 응답 길이 (100-2000자)\n\n### 위젯 디자인\n- `widget_color`: 위젯 색상 (Hex 코드)\n- `widget_position`: 위젯 위치\n  - `bottom-right`: 우측 하단 (기본)\n  - `bottom-left`: 좌측 하단\n  - `top-right`: 우측 상단\n- `welcome_message`: 환영 메시지\n\n## 사용 예시\n```json\n{\n  \"character_id\": \"uuid\",\n  \"website_url\": \"https://myshop.com\",\n  \"max_pages\": 100,\n  \"max_depth\": 5,\n  \"exclude_patterns\": [\"/admin\", \"/cart\", \"/checkout\"],\n  \"ai_model\": \"gpt-4\",\n  \"response_tone\": \"professional\",\n  \"widget_color\": \"#FF6B6B\",\n  \"widget_position\": \"bottom-left\",\n  \"welcome_message\": \"안녕하세요! 쇼핑을 도와드릴게요 😊\"\n}\n```","operationId":"advanced_learn_api_v1_buyer_site_learning_advanced_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdvancedLearnRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/buyer/site-learning/status/{session_id}":{"get":{"tags":["buyer-site-learning","buyer-site-learning"],"summary":"📊 학습 진행 상태 조회","description":"**학습 진행 상태 실시간 조회**\n\n## 반환 정보\n- `status`: processing, completed, failed\n- `progress_percent`: 진행률 (0-100)\n- `current_step`: 현재 진행 중인 단계\n- `pages_crawled`: 크롤링한 페이지 수\n- `total_pages`: 전체 페이지 수\n- `estimated_remaining_minutes`: 예상 남은 시간\n\n## 사용 방법\n- 프론트엔드에서 5초마다 폴링\n- 또는 WebSocket으로 실시간 업데이트 (추후 구현)","operationId":"get_learning_status_api_v1_buyer_site_learning_status__session_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/buyer/site-learning/my-sessions":{"get":{"tags":["buyer-site-learning","buyer-site-learning"],"summary":"📋 내 학습 세션 목록","description":"**내가 시작한 학습 세션 목록 조회**\n\n## 반환 정보\n- 최근 학습 세션 목록\n- 각 세션의 상태\n- 생성된 위젯 코드\n\n## 사용 사례\n- 이전에 학습한 웹사이트 재확인\n- 위젯 코드 다시 복사\n- 학습 기록 관리","operationId":"get_my_learning_sessions_api_v1_buyer_site_learning_my_sessions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/voice/text-to-speech":{"post":{"tags":["voice"],"summary":"Convert Text To Speech","description":"텍스트를 음성으로 변환\n\n지원 언어: 한국어(ko), 영어(en), 일본어(ja), 중국어(zh)\n음성 타입: female, male\n속도: 0.25 ~ 4.0","operationId":"convert_text_to_speech_api_v1_voice_text_to_speech_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TTSRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/voice/speech-to-text":{"post":{"tags":["voice"],"summary":"Convert Speech To Text","description":"음성을 텍스트로 변환\n\n지원 포맷: webm, mp3, wav, m4a, flac\n최대 파일 크기: 25MB","operationId":"convert_speech_to_text_api_v1_voice_speech_to_text_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_convert_speech_to_text_api_v1_voice_speech_to_text_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/voice/speech-to-text-base64":{"post":{"tags":["voice"],"summary":"Convert Speech To Text Base64","description":"Base64로 인코딩된 음성을 텍스트로 변환\n\n웹 브라우저에서 녹음된 오디오를 직접 전송할 때 사용","operationId":"convert_speech_to_text_base64_api_v1_voice_speech_to_text_base64_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/STTRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/voice/batch-text-to-speech":{"post":{"tags":["voice"],"summary":"Batch Convert Text To Speech","description":"여러 텍스트를 일괄 음성 변환\n\n최대 10개의 텍스트를 한 번에 변환할 수 있습니다.\n대화 흐름이나 여러 메시지를 미리 변환할 때 유용합니다.","operationId":"batch_convert_text_to_speech_api_v1_voice_batch_text_to_speech_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchTTSRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/voice/character-voice-profile":{"post":{"tags":["voice"],"summary":"Create Character Voice Profile","description":"캐릭터별 최적화된 음성 프로필 생성\n\n캐릭터의 설명과 성격 특성을 분석하여\n가장 어울리는 음성 설정을 자동으로 추천합니다.","operationId":"create_character_voice_profile_api_v1_voice_character_voice_profile_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterVoiceProfileRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/voice/voice-options":{"get":{"tags":["voice"],"summary":"Get Voice Options","description":"사용 가능한 음성 옵션 조회\n\n지원하는 언어, 음성, 포맷 등의 정보를 제공합니다.\n인증 없이 접근 가능한 공개 정보입니다.","operationId":"get_voice_options_api_v1_voice_voice_options_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/voice/usage-stats":{"get":{"tags":["voice"],"summary":"Get Voice Usage Stats","description":"사용자의 음성 기능 사용 통계\n\nTTS/STT 사용량, 선호 설정 등의 통계 정보를 제공합니다.","operationId":"get_voice_usage_stats_api_v1_voice_usage_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/voice/test-voices":{"get":{"tags":["voice"],"summary":"Test Voice Samples","description":"음성 샘플 테스트\n\n각 음성의 샘플을 들어볼 수 있는 테스트 기능입니다.","operationId":"test_voice_samples_api_v1_voice_test_voices_get","parameters":[{"name":"language","in":"query","required":false,"schema":{"type":"string","description":"언어 코드","default":"ko","title":"Language"},"description":"언어 코드"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/voice-reports/usage/summary":{"get":{"tags":["voice-reports"],"summary":"Get Usage Summary","description":"음성 사용량 요약 조회\n\n- 지정된 기간의 TTS/STT 사용량 및 비용\n- Provider별 통계\n- 기본값: 최근 30일","operationId":"get_usage_summary_api_v1_voice_reports_usage_summary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"시작 날짜 (YYYY-MM-DD)","title":"Start Date"},"description":"시작 날짜 (YYYY-MM-DD)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"종료 날짜 (YYYY-MM-DD)","title":"End Date"},"description":"종료 날짜 (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/voice-reports/usage/monthly/{year}/{month}":{"get":{"tags":["voice-reports"],"summary":"Get Monthly Report","description":"월별 상세 리포트\n\n- 해당 월의 집계된 사용량 및 비용\n- Provider별 세부 통계\n- 전월 대비 증감률","operationId":"get_monthly_report_api_v1_voice_reports_usage_monthly__year___month__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"year","in":"path","required":true,"schema":{"type":"integer","title":"Year"}},{"name":"month","in":"path","required":true,"schema":{"type":"integer","title":"Month"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/voice-reports/usage/export/csv":{"get":{"tags":["voice-reports"],"summary":"Export Usage Csv","description":"사용량 CSV 내보내기\n\n- 지정된 기간의 상세 사용 내역을 CSV 파일로 다운로드\n- 기본값: 최근 30일","operationId":"export_usage_csv_api_v1_voice_reports_usage_export_csv_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"시작 날짜 (YYYY-MM-DD)","title":"Start Date"},"description":"시작 날짜 (YYYY-MM-DD)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"종료 날짜 (YYYY-MM-DD)","title":"End Date"},"description":"종료 날짜 (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/voice-reports/usage/trends":{"get":{"tags":["voice-reports"],"summary":"Get Usage Trends","description":"사용량 추세 분석\n\n- 최근 N개월간의 월별 사용량 및 비용 추세\n- 차트 데이터로 활용 가능","operationId":"get_usage_trends_api_v1_voice_reports_usage_trends_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"months","in":"query","required":false,"schema":{"type":"integer","maximum":12,"minimum":1,"description":"조회할 월 수 (1-12)","default":6,"title":"Months"},"description":"조회할 월 수 (1-12)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/voice-reports/credits/balance":{"get":{"tags":["voice-reports"],"summary":"Get Credit Balance","description":"크레딧 잔액 조회\n\n- 현재 크레딧 잔액\n- 최근 거래 내역 (최대 10개)","operationId":"get_credit_balance_api_v1_voice_reports_credits_balance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/voice-reports/test-monthly-report":{"post":{"tags":["voice-reports"],"summary":"Send Test Report","description":"월간 리포트 이메일 테스트 발송\n\n현재 로그인한 사용자에게 월간 리포트를 즉시 발송합니다.\n실제 스케줄러와 동일한 로직을 사용하여 테스트할 수 있습니다.\n\n- year, month 미지정 시 전월 데이터 사용","operationId":"send_test_report_api_v1_voice_reports_test_monthly_report_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"연도 (기본: 전월)","title":"Year"},"description":"연도 (기본: 전월)"},{"name":"month","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"월 (기본: 전월)","title":"Month"},"description":"월 (기본: 전월)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/voice-reports/cost-prediction":{"get":{"tags":["voice-reports"],"summary":"Get Cost Prediction","description":"다음 달 예상 비용 예측\n\nAI 기반 분석으로 사용 패턴을 파악하고 다음 달 예상 비용을 예측합니다.\n\n**예측 방법**:\n- 최근 3개월 데이터 분석\n- 선형 회귀 분석으로 추세 파악\n- 요일별 사용 패턴 고려\n- 95% 신뢰 구간 계산\n\n**Returns**:\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"predicted_cost\": 45.30,\n    \"confidence\": \"high\",\n    \"min_cost\": 38.50,\n    \"max_cost\": 52.10,\n    \"trend\": \"increasing\",\n    \"average_daily_cost\": 1.51,\n    \"peak_usage_days\": [\"Monday\", \"Wednesday\"],\n    \"historical_data\": [...]\n  }\n}\n```","operationId":"get_cost_prediction_api_v1_voice_reports_cost_prediction_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/realtime-voice/sessions/active":{"get":{"tags":["realtime-voice"],"summary":"Get Active Sessions","description":"활성 음성 세션 목록 조회 (관리자 전용)","operationId":"get_active_sessions_api_v1_realtime_voice_sessions_active_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/realtime-voice/sessions/cleanup":{"post":{"tags":["realtime-voice"],"summary":"Cleanup Inactive Sessions","description":"비활성 세션 정리 (관리자 전용)","operationId":"cleanup_inactive_sessions_api_v1_realtime_voice_sessions_cleanup_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"timeout_seconds","in":"query","required":false,"schema":{"type":"integer","description":"타임아웃 시간 (초)","default":600,"title":"Timeout Seconds"},"description":"타임아웃 시간 (초)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/realtime-voice/test":{"get":{"tags":["realtime-voice"],"summary":"Test Voice Websocket","description":"WebSocket 테스트 페이지 (HTML)","operationId":"test_voice_websocket_api_v1_realtime_voice_test_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/openai-realtime/sessions/active":{"get":{"tags":["openai-realtime"],"summary":"Get Active Realtime Sessions","description":"활성 Realtime 세션 목록 조회 (관리자 전용)","operationId":"get_active_realtime_sessions_api_v1_openai_realtime_sessions_active_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/openai-realtime/test":{"get":{"tags":["openai-realtime"],"summary":"Test Realtime Websocket","description":"OpenAI Realtime API 테스트 페이지 (HTML)","operationId":"test_realtime_websocket_api_v1_openai_realtime_test_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/openai-realtime/test-token":{"get":{"tags":["openai-realtime"],"summary":"Generate Test Token","description":"테스트용 JWT 토큰 생성 (개발 환경 전용)\n\n실제 사용자 ID 대신 테스트용 ID로 토큰을 생성합니다.\n운영 환경에서는 이 엔드포인트가 비활성화됩니다.","operationId":"generate_test_token_api_v1_openai_realtime_test_token_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/webrtc-voice/sessions":{"post":{"tags":["webrtc-voice"],"summary":"Create Webrtc Session","description":"Create new WebRTC voice session\nReturns: Session ID, SDP offer, ICE servers","operationId":"create_webrtc_session_api_v1_webrtc_voice_sessions_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSessionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/webrtc-voice/sessions/answer":{"post":{"tags":["webrtc-voice"],"summary":"Set Session Answer","description":"Set WebRTC answer (SDP) for session","operationId":"set_session_answer_api_v1_webrtc_voice_sessions_answer_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetAnswerRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/webrtc-voice/sessions/ice-candidate":{"post":{"tags":["webrtc-voice"],"summary":"Add Ice Candidate","description":"Add ICE candidate for NAT traversal","operationId":"add_ice_candidate_api_v1_webrtc_voice_sessions_ice_candidate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ICECandidateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/webrtc-voice/sessions/{session_id}":{"delete":{"tags":["webrtc-voice"],"summary":"Close Session","description":"Close WebRTC session","operationId":"close_session_api_v1_webrtc_voice_sessions__session_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/webrtc-voice/stats":{"get":{"tags":["webrtc-voice"],"summary":"Get Webrtc Stats","description":"Get WebRTC service statistics\nAdmin only in production","operationId":"get_webrtc_stats_api_v1_webrtc_voice_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/sessions/{session_id}/message":{"post":{"tags":["voice-call-websocket"],"summary":"Send Voice Message","description":"음성 통화 중 메시지 전송 (REST API)\nSTT 최종 결과를 전송할 때 사용","operationId":"send_voice_message_api_v1_sessions__session_id__message_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"text","in":"query","required":true,"schema":{"type":"string","title":"Text"}},{"name":"character_id","in":"query","required":true,"schema":{"type":"string","title":"Character Id"}},{"name":"conversation_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auto-recharge/settings":{"get":{"tags":["auto-recharge"],"summary":"Get Auto Recharge Settings","description":"자동 충전 설정 조회\n\nReturns:\n    - is_enabled: 활성화 여부\n    - trigger_threshold: 임계값\n    - recharge_amount: 충전 금액\n    - max_monthly_recharge: 월 최대 충전액\n    - monthly_recharged_amount: 이번 달 충전 누적액\n    - recharge_count_this_month: 이번 달 충전 횟수","operationId":"get_auto_recharge_settings_api_v1_auto_recharge_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["auto-recharge"],"summary":"Update Auto Recharge Settings","description":"자동 충전 설정 수정 (활성화 상태 유지)\n\nBody:\n    - trigger_threshold: 임계값\n    - recharge_amount: 충전 금액\n    - max_monthly_recharge: 월 최대 충전액\n    - payment_method_id: Stripe Payment Method ID (선택)","operationId":"update_auto_recharge_settings_api_v1_auto_recharge_settings_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoRechargeSettingsUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auto-recharge/enable":{"post":{"tags":["auto-recharge"],"summary":"Enable Auto Recharge","description":"자동 충전 활성화 및 설정\n\nBody:\n    - trigger_threshold: 임계값 (기본 $10)\n    - recharge_amount: 충전 금액 (기본 $50)\n    - max_monthly_recharge: 월 최대 충전액 (기본 $500)\n    - payment_method_id: Stripe Payment Method ID (선택)","operationId":"enable_auto_recharge_api_v1_auto_recharge_enable_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoRechargeSettingsUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auto-recharge/disable":{"post":{"tags":["auto-recharge"],"summary":"Disable Auto Recharge","description":"자동 충전 비활성화","operationId":"disable_auto_recharge_api_v1_auto_recharge_disable_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin-monitoring/stats":{"get":{"tags":["admin-monitoring-websocket"],"summary":"Get Admin Monitoring Stats","description":"관리자 모니터링 통계 조회 (REST API)\n\nWebSocket 대신 HTTP 폴링 방식으로 사용 가능. 실측치 + 10초 TTL 캐시.","operationId":"get_admin_monitoring_stats_api_v1_admin_monitoring_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/feedbacks":{"post":{"tags":["admin-feedback"],"summary":"Create Feedback","description":"피드백 생성\n\n관리자 사용자만 피드백을 제출할 수 있습니다.","operationId":"create_feedback_api_v1_admin_feedbacks_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__admin__admin_feedback__FeedbackResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["admin-feedback"],"summary":"Get Feedbacks","description":"피드백 목록 조회\n\n필터링 옵션:\n- status_filter: pending, reviewed, implemented, rejected\n- feedback_type: bug, improvement, feature_request\n- page_url: 특정 페이지의 피드백만 조회","operationId":"get_feedbacks_api_v1_admin_feedbacks_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Filter"}},{"name":"feedback_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Feedback Type"}},{"name":"page_url","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Url"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/app__api__v1__endpoints__admin__admin_feedback__FeedbackResponse"},"title":"Response Get Feedbacks Api V1 Admin Feedbacks Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/feedbacks/stats":{"get":{"tags":["admin-feedback"],"summary":"Get Feedback Stats","description":"피드백 통계\n\n전체 통계, 상태별, 유형별, 긴급도별 분포 및 평균 평점","operationId":"get_feedback_stats_api_v1_admin_feedbacks_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__admin__admin_feedback__FeedbackStatsResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/feedbacks/{feedback_id}":{"get":{"tags":["admin-feedback"],"summary":"Get Feedback","description":"피드백 상세 조회","operationId":"get_feedback_api_v1_admin_feedbacks__feedback_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"feedback_id","in":"path","required":true,"schema":{"type":"string","title":"Feedback Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__admin__admin_feedback__FeedbackResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["admin-feedback"],"summary":"Update Feedback","description":"피드백 업데이트\n\n상태 변경 및 관리자 응답 추가","operationId":"update_feedback_api_v1_admin_feedbacks__feedback_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"feedback_id","in":"path","required":true,"schema":{"type":"string","title":"Feedback Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__admin__admin_feedback__FeedbackResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin-feedback"],"summary":"Delete Feedback","description":"피드백 삭제\n\n슈퍼유저만 삭제 가능","operationId":"delete_feedback_api_v1_admin_feedbacks__feedback_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"feedback_id","in":"path","required":true,"schema":{"type":"string","title":"Feedback Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/business-dashboard/overview":{"get":{"tags":["business-dashboard"],"summary":"Get Business Overview","description":"비즈니스 대시보드 개요\n\nReturns:\n- 총 대화 건수 (이번 달)\n- 평균 응답 시간\n- 고객 만족도\n- 전환율\n- 비용 사용량","operationId":"get_business_overview_api_v1_business_dashboard_overview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/business-dashboard/live-conversations":{"get":{"tags":["business-dashboard"],"summary":"Get Live Conversations","description":"실시간 진행 중인 대화 목록\n\n최근 1시간 내 활동이 있는 대화를 조회합니다.\n\n최적화:\n- 기존: 모든 메시지를 로드 (selectinload(messages)) → 대화당 수백~수천 메시지 로드\n- 최적화: 마지막 메시지만 서브쿼리로 조회, 메시지 수는 COUNT로 별도 계산\n- N+1 해결: JOIN으로 캐릭터 정보 함께 조회","operationId":"get_live_conversations_api_v1_business_dashboard_live_conversations_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"건너뛸 개수","default":0,"title":"Skip"},"description":"건너뛸 개수"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"description":"최대 조회 개수","default":50,"title":"Limit"},"description":"최대 조회 개수"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/business-dashboard/top-questions":{"get":{"tags":["business-dashboard"],"summary":"Get Top Questions","description":"자주 묻는 질문 Top N\n\n지정된 기간 동안 가장 많이 받은 질문을 반환합니다.","operationId":"get_top_questions_api_v1_business_dashboard_top_questions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"description":"조회 기간 (일)","default":7,"title":"Days"},"description":"조회 기간 (일)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"description":"결과 개수","default":10,"title":"Limit"},"description":"결과 개수"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/business-dashboard/character-performance":{"get":{"tags":["business-dashboard"],"summary":"Get Character Performance","description":"캐릭터별 성과 분석\n\n각 캐릭터의 대화 건수, 메시지 수 등을 분석합니다.","operationId":"get_character_performance_api_v1_business_dashboard_character_performance_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"description":"조회 기간 (일)","default":30,"title":"Days"},"description":"조회 기간 (일)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/business-dashboard/hourly-traffic":{"get":{"tags":["business-dashboard"],"summary":"Get Hourly Traffic","description":"시간대별 트래픽 분석\n\n특정 날짜의 시간대별 메시지 수를 반환합니다.\n기본값은 오늘입니다.","operationId":"get_hourly_traffic_api_v1_business_dashboard_hourly_traffic_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"조회 날짜 (YYYY-MM-DD)","title":"Date"},"description":"조회 날짜 (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/business-dashboard/usage-trend":{"get":{"tags":["business-dashboard"],"summary":"Get Usage Trend","description":"월별 사용량 추이\n\n최근 N개월의 사용량 추이를 반환합니다.\n(N+1 최적화: 단일 쿼리로 모든 월의 데이터를 조회)","operationId":"get_usage_trend_api_v1_business_dashboard_usage_trend_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"months","in":"query","required":false,"schema":{"type":"integer","maximum":12,"description":"조회 개월 수","default":3,"title":"Months"},"description":"조회 개월 수"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/business-dashboard/cost-breakdown":{"get":{"tags":["business-dashboard"],"summary":"Get Cost Breakdown","description":"비용 상세 내역\n\n사용량별 비용 분석을 제공합니다.","operationId":"get_cost_breakdown_api_v1_business_dashboard_cost_breakdown_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"month","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"월 (1-12)","title":"Month"},"description":"월 (1-12)"},{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"년도","title":"Year"},"description":"년도"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/emotional-images/generate":{"post":{"tags":["emotional-images"],"summary":"감정별 이미지 생성","description":"캐릭터의 감정별 이미지를 생성합니다 (2가지 방식 지원).\n\n**Parameters:**\n- **emotions**: 생성할 감정 리스트 (없으면 전체 13개)\n- **main_image_url**: 캐릭터 메인 이미지 URL (필수 - 일관성 보장)\n- **style_prompt**: 추가 스타일 프롬프트 (옵션)\n- **generation_method**: 생성 방식 선택\n  - `\"chatgpt_images\"` (기본값, 추천): ChatGPT Images (GPT-4o + DALL-E 3)\n    - GPT-4o가 원본 이미지를 분석하여 캐릭터 설명 생성\n    - DALL-E 3로 각 감정 표정을 새롭게 생성\n    - 품질: ⭐⭐⭐⭐⭐ (최고)\n    - 일관성: ⭐⭐⭐⭐ (85-95%)\n    - 비용: ~$0.50 (13개 기준)\n  - `\"google_imagen\"`: Google Imagen 4\n    - Google의 최신 Imagen 4 모델 사용\n    - 참조 이미지 기반 고품질 이미지 생성\n    - 품질: ⭐⭐⭐⭐⭐ (최고)\n    - 일관성: ⭐⭐⭐⭐ (85-90%)\n    - 비용: ~$0.40 (13개 기준)\n\n**Recommendation**: `chatgpt_images` - 가장 자연스럽고 고품질","operationId":"generate_emotional_images_api_v1_characters__character_id__emotional_images_generate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid4","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateEmotionalImagesRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateEmotionalImagesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/emotional-images":{"get":{"tags":["emotional-images"],"summary":"감정별 이미지 목록 조회","description":"캐릭터의 모든 감정별 이미지를 조회합니다.","operationId":"get_emotional_images_api_v1_characters__character_id__emotional_images_get","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid4","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EmotionalImageResponse"},"title":"Response Get Emotional Images Api V1 Characters  Character Id  Emotional Images Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["emotional-images"],"summary":"현재 메인 이미지의 감정 이미지 전체 삭제","description":"현재 메인 이미지에 대한 모든 감정 이미지를 삭제합니다.\n재생성하기 전에 사용합니다.","operationId":"delete_emotional_images_for_current_main_api_v1_characters__character_id__emotional_images_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid4","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/emotional-images/progress":{"get":{"tags":["emotional-images"],"summary":"감정 이미지 생성 진행 상황 조회","description":"현재 진행 중인 감정 이미지 생성의 실시간 진행 상황을 조회합니다.\n\nReturns:\n    {\n        \"current\": 3,\n        \"total\": 10,\n        \"percentage\": 30,\n        \"current_emotion\": \"happy\",\n        \"status\": \"processing\",  // processing | completed | failed\n        \"updated_at\": \"2024-01-01T00:00:00\"\n    }","operationId":"get_generation_progress_api_v1_characters__character_id__emotional_images_progress_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid4","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Generation Progress Api V1 Characters  Character Id  Emotional Images Progress Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/emotional-images/{emotion}":{"get":{"tags":["emotional-images"],"summary":"특정 감정 이미지 조회","description":"캐릭터의 특정 감정 이미지를 조회합니다.","operationId":"get_emotional_image_api_v1_characters__character_id__emotional_images__emotion__get","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid4","title":"Character Id"}},{"name":"emotion","in":"path","required":true,"schema":{"type":"string","title":"Emotion"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmotionalImageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/emotional-images/{emotion}/regenerate":{"post":{"tags":["emotional-images"],"summary":"특정 감정 이미지 재생성","description":"특정 감정 이미지를 재생성합니다.\n기존 이미지가 마음에 들지 않을 때 사용합니다.\n\n**Parameters:**\n- **generation_method**: 생성 방식 (\"google_imagen\" 기본값, \"chatgpt_images\")","operationId":"regenerate_emotional_image_api_v1_characters__character_id__emotional_images__emotion__regenerate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid4","title":"Character Id"}},{"name":"emotion","in":"path","required":true,"schema":{"type":"string","title":"Emotion"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/RegenerateEmotionRequest"},{"type":"null"}],"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Regenerate Emotional Image Api V1 Characters  Character Id  Emotional Images  Emotion  Regenerate Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/emotions":{"get":{"tags":["emotional-images"],"summary":"지원하는 감정 타입 목록","description":"시스템에서 지원하는 모든 감정 타입을 반환합니다.","operationId":"get_emotion_types_api_v1_emotions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmotionListResponse"}}}}}}},"/api/v1/characters/{character_id}/emotional-videos/generate":{"post":{"tags":["emotional-images"],"summary":"감정별 동영상 생성","description":"캐릭터의 감정 이미지들을 동영상으로 변환합니다.\n\n**동작:**\n1. 원본 이미지 + 감정 이미지들을 가져옴\n2. 각 이미지를 Kling v2.5 Turbo로 동영상 생성\n3. (선택) 부메랑 처리로 끊김 없는 루프 생성\n4. 썸네일 동영상 + 포스터 이미지 생성\n5. Cloudflare R2에 업로드\n\n**Parameters:**\n- **emotions**: 생성할 감정 리스트 (없으면 원본 + 전체 감정)\n- **apply_boomerang**: 부메랑 루프 적용 (기본 OFF)\n- **video_loop**: 반복 재생 여부 (기본 OFF - 한번만 재생)\n- **duration**: 동영상 길이 (기본 3초)\n\n**비용:** ~$0.09/3초 × 16개 = ~$1.44/캐릭터","operationId":"generate_emotional_videos_api_v1_characters__character_id__emotional_videos_generate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid4","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateEmotionalVideosRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateEmotionalVideosResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/emotional-videos":{"get":{"tags":["emotional-images"],"summary":"감정별 동영상 목록 조회","description":"캐릭터의 모든 감정별 동영상을 조회합니다.\n동영상이 생성된 감정 이미지만 반환합니다.","operationId":"get_emotional_videos_api_v1_characters__character_id__emotional_videos_get","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid4","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/recommendations/personalized":{"get":{"tags":["recommendations"],"summary":"Get Personalized Recommendations","description":"개인화된 추천 조회\n\n사용자의 과거 상호작용, 선호도, 활동 패턴을 분석하여\n맞춤형 캐릭터 및 대화 시작 문구를 추천합니다.","operationId":"get_personalized_recommendations_api_v1_recommendations_personalized_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"recommendation_type","in":"query","required":false,"schema":{"type":"string","description":"추천 타입: characters, conversations, mixed","default":"mixed","title":"Recommendation Type"},"description":"추천 타입: characters, conversations, mixed"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"추천 개수","default":10,"title":"Limit"},"description":"추천 개수"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/recommendations/track-interaction":{"post":{"tags":["recommendations"],"summary":"Track User Interaction","description":"사용자 상호작용 추적\n\n추천 모델 개선을 위해 사용자의 캐릭터 상호작용을 기록합니다.","operationId":"track_user_interaction_api_v1_recommendations_track_interaction_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InteractionTrackRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/recommendations/trending":{"get":{"tags":["recommendations"],"summary":"Get Trending Topics","description":"트렌딩 토픽 조회\n\n최근 7일간 인기 있는 캐릭터 카테고리와 대화 주제를 조회합니다.\n인증 없이 접근 가능한 공개 데이터입니다.","operationId":"get_trending_topics_api_v1_recommendations_trending_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"description":"트렌딩 토픽 개수","default":10,"title":"Limit"},"description":"트렌딩 토픽 개수"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/recommendations/similar-users":{"get":{"tags":["recommendations"],"summary":"Get Similar User Recommendations","description":"유사 사용자 기반 추천\n\n비슷한 취향을 가진 사용자들이 좋아하는 캐릭터를 추천합니다.","operationId":"get_similar_user_recommendations_api_v1_recommendations_similar_users_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":1,"description":"유사 사용자 추천 개수","default":5,"title":"Limit"},"description":"유사 사용자 추천 개수"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/recommendations/discovery":{"get":{"tags":["recommendations"],"summary":"Get Discovery Recommendations","description":"새로운 발견을 위한 추천\n\n사용자가 평소 관심 없던 새로운 카테고리나 스타일의 캐릭터를 추천하여\n다양한 경험을 제공합니다.","operationId":"get_discovery_recommendations_api_v1_recommendations_discovery_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/recommendations/stats":{"get":{"tags":["recommendations"],"summary":"Get Recommendation Stats","description":"사용자 추천 통계\n\n사용자의 추천 모델 정확도와 프로필 정보를 제공합니다.","operationId":"get_recommendation_stats_api_v1_recommendations_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/premium/subscription-info":{"get":{"tags":["premium"],"summary":"Get Subscription Info","description":"사용자 구독 정보 조회\n\n현재 구독 상태, 사용 한도, 남은 할당량 등을 확인할 수 있습니다.","operationId":"get_subscription_info_api_v1_premium_subscription_info_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/premium/check-feature/{feature_name}":{"get":{"tags":["premium"],"summary":"Check Feature Access","description":"특정 기능 접근 권한 확인\n\n프리미엄 기능 사용 전에 권한을 확인할 수 있습니다.","operationId":"check_feature_access_api_v1_premium_check_feature__feature_name__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"feature_name","in":"path","required":true,"schema":{"type":"string","title":"Feature Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/premium/check-usage-limit":{"post":{"tags":["premium"],"summary":"Check Usage Limit","description":"사용량 제한 확인\n\n특정 기능을 사용하기 전에 제한에 걸리지 않는지 확인합니다.","operationId":"check_usage_limit_api_v1_premium_check_usage_limit_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureUsageRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/premium/record-usage":{"post":{"tags":["premium"],"summary":"Record Feature Usage","description":"기능 사용량 기록\n\n기능을 사용한 후 사용량을 기록합니다.","operationId":"record_feature_usage_api_v1_premium_record_usage_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureUsageRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/premium/analytics":{"get":{"tags":["premium"],"summary":"Get Premium Analytics","description":"프리미엄 고급 분석\n\n구독자만 접근 가능한 상세 사용 분석 데이터를 제공합니다.","operationId":"get_premium_analytics_api_v1_premium_analytics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/premium/collaboration/create-room":{"post":{"tags":["premium"],"summary":"Create Collaboration Room","description":"협업 룸 생성\n\n프리미엄 기능으로 다른 사용자와 캐릭터를 공유하여 협업할 수 있는 룸을 만듭니다.","operationId":"create_collaboration_room_api_v1_premium_collaboration_create_room_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CollaborationRoomRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/premium/early-access":{"get":{"tags":["premium"],"summary":"Get Early Access Features","description":"얼리 액세스 기능 목록\n\n프리미엄 구독자만 접근 가능한 베타 기능들을 조회합니다.","operationId":"get_early_access_features_api_v1_premium_early_access_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/premium/upgrade-suggestion":{"get":{"tags":["premium"],"summary":"Get Upgrade Suggestion","description":"업그레이드 제안\n\n사용 패턴을 분석하여 적절한 요금제 업그레이드를 제안합니다.","operationId":"get_upgrade_suggestion_api_v1_premium_upgrade_suggestion_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/premium/tier-comparison":{"get":{"tags":["premium"],"summary":"Get Tier Comparison","description":"요금제 비교\n\n모든 요금제의 기능과 제한사항을 비교하여 보여줍니다.\n인증 없이 접근 가능한 공개 정보입니다.","operationId":"get_tier_comparison_api_v1_premium_tier_comparison_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/premium/feature-usage-stats":{"get":{"tags":["premium"],"summary":"Get Feature Usage Stats","description":"기능별 사용 통계\n\n기간별 기능 사용량 통계를 조회합니다.","operationId":"get_feature_usage_stats_api_v1_premium_feature_usage_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","description":"기간: day, week, month","default":"week","title":"Period"},"description":"기간: day, week, month"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/memory/overview":{"get":{"tags":["character-memory"],"summary":"Get Memory Overview","description":"메모리 시스템 개요 조회\n\n- 총 메시지 수\n- 메모리 설정\n- RAG 통계\n- 시스템 상태","operationId":"get_memory_overview_api_v1_characters__character_id__memory_overview_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"conversation_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"특정 대화 ID (None이면 가장 최근 대화)","title":"Conversation Id"},"description":"특정 대화 ID (None이면 가장 최근 대화)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryOverviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/memory/summaries":{"get":{"tags":["character-memory"],"summary":"Get Memory Summaries","description":"대화 요약 목록 조회 (페이지네이션)\n\n- 특정 대화 또는 모든 대화의 요약\n- 중요도 필터링\n- 페이지네이션","operationId":"get_memory_summaries_api_v1_characters__character_id__memory_summaries_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"conversation_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"특정 대화 ID (None이면 모든 대화)","title":"Conversation Id"},"description":"특정 대화 ID (None이면 모든 대화)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"최대 개수","default":20,"title":"Limit"},"description":"최대 개수"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"건너뛸 개수","default":0,"title":"Skip"},"description":"건너뛸 개수"},{"name":"min_importance","in":"query","required":false,"schema":{"type":"number","maximum":1.0,"minimum":0.0,"description":"최소 중요도","default":0.0,"title":"Min Importance"},"description":"최소 중요도"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ConversationSummaryResponse"},"title":"Response Get Memory Summaries Api V1 Characters  Character Id  Memory Summaries Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/memory/summaries/{summary_id}":{"get":{"tags":["character-memory"],"summary":"Get Memory Summary Detail","description":"특정 요약 상세 조회 (원본 메시지 포함)","operationId":"get_memory_summary_detail_api_v1_characters__character_id__memory_summaries__summary_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"summary_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Summary Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationSummaryDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["character-memory"],"summary":"Delete Memory Summary","description":"특정 요약 삭제","operationId":"delete_memory_summary_api_v1_characters__character_id__memory_summaries__summary_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"summary_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Summary Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/memory/config":{"get":{"tags":["character-memory"],"summary":"Get Memory Config","description":"현재 메모리 설정 조회","operationId":"get_memory_config_api_v1_characters__character_id__memory_config_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["character-memory"],"summary":"Update Memory Config","description":"메모리 설정 업데이트","operationId":"update_memory_config_api_v1_characters__character_id__memory_config_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryConfigRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/memory/rebuild":{"post":{"tags":["character-memory"],"summary":"Rebuild Memory","description":"전체 메모리 재구축 (요약 재생성)\n\n⚠️  경고: 시간이 오래 걸릴 수 있습니다","operationId":"rebuild_memory_api_v1_characters__character_id__memory_rebuild_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryRebuildRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryRebuildResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/seo/configs":{"get":{"tags":["seo"],"summary":"Get All Seo Configs","description":"모든 SEO 설정 조회 (관리자 전용)","operationId":"get_all_seo_configs_api_v1_seo_configs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SEOConfigResponse"},"title":"Response Get All Seo Configs Api V1 Seo Configs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["seo"],"summary":"Create Seo Config","description":"SEO 설정 생성","operationId":"create_seo_config_api_v1_seo_configs_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SEOConfigCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SEOConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/seo/configs/{page_path}":{"get":{"tags":["seo"],"summary":"Get Seo Config","description":"특정 페이지 SEO 설정 조회","operationId":"get_seo_config_api_v1_seo_configs__page_path__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_path","in":"path","required":true,"schema":{"type":"string","title":"Page Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SEOConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["seo"],"summary":"Update Seo Config","description":"SEO 설정 업데이트","operationId":"update_seo_config_api_v1_seo_configs__page_path__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_path","in":"path","required":true,"schema":{"type":"string","title":"Page Path"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SEOConfigUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SEOConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["seo"],"summary":"Delete Seo Config","description":"SEO 설정 삭제","operationId":"delete_seo_config_api_v1_seo_configs__page_path__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_path","in":"path","required":true,"schema":{"type":"string","title":"Page Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/seo/configs/{page_path}/calculate-score":{"post":{"tags":["seo"],"summary":"Calculate Seo Score","description":"SEO 점수 재계산","operationId":"calculate_seo_score_api_v1_seo_configs__page_path__calculate_score_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_path","in":"path","required":true,"schema":{"type":"string","title":"Page Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/seo/sitemap/entries":{"get":{"tags":["seo"],"summary":"Get Sitemap Entries","description":"Sitemap 엔트리 조회","operationId":"get_sitemap_entries_api_v1_seo_sitemap_entries_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SitemapEntryResponse"},"type":"array","title":"Response Get Sitemap Entries Api V1 Seo Sitemap Entries Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["seo"],"summary":"Create Sitemap Entry","description":"Sitemap 엔트리 생성","operationId":"create_sitemap_entry_api_v1_seo_sitemap_entries_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SitemapEntryCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SitemapEntryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/seo/sitemap/generate":{"post":{"tags":["seo"],"summary":"Generate Sitemap Entries","description":"Sitemap 엔트리 자동 생성","operationId":"generate_sitemap_entries_api_v1_seo_sitemap_generate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SitemapGenerateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SitemapGenerateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/seo/sitemap.xml":{"get":{"tags":["seo"],"summary":"Get Sitemap Xml","description":"sitemap.xml 생성 (공개)","operationId":"get_sitemap_xml_api_v1_seo_sitemap_xml_get","parameters":[{"name":"base_url","in":"query","required":false,"schema":{"type":"string","default":"https://bestchar.com","title":"Base Url"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/seo/robots/configs":{"get":{"tags":["seo"],"summary":"Get All Robots Configs","description":"모든 robots.txt 설정 조회","operationId":"get_all_robots_configs_api_v1_seo_robots_configs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/RobotsConfigResponse"},"type":"array","title":"Response Get All Robots Configs Api V1 Seo Robots Configs Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["seo"],"summary":"Create Robots Config","description":"robots.txt 설정 생성","operationId":"create_robots_config_api_v1_seo_robots_configs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RobotsConfigCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RobotsConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/seo/robots/configs/{user_agent}":{"get":{"tags":["seo"],"summary":"Get Robots Config","description":"특정 User-Agent의 robots.txt 설정 조회","operationId":"get_robots_config_api_v1_seo_robots_configs__user_agent__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_agent","in":"path","required":true,"schema":{"type":"string","title":"User Agent"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RobotsConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/seo/robots.txt":{"get":{"tags":["seo"],"summary":"Get Robots Txt","description":"robots.txt 생성 (공개)","operationId":"get_robots_txt_api_v1_seo_robots_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/seo/analytics":{"get":{"tags":["seo"],"summary":"Get Seo Analytics","description":"SEO 분석 데이터 조회","operationId":"get_seo_analytics_api_v1_seo_analytics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_path","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Path"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SEOAnalyticsResponse"},"title":"Response Get Seo Analytics Api V1 Seo Analytics Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["seo"],"summary":"Create Seo Analytics","description":"SEO 분석 데이터 추가","operationId":"create_seo_analytics_api_v1_seo_analytics_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SEOAnalyticsCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SEOAnalyticsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/seo/issues":{"get":{"tags":["seo"],"summary":"Get Seo Issues","description":"SEO 문제 조회","operationId":"get_seo_issues_api_v1_seo_issues_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_path","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Path"}},{"name":"is_resolved","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Resolved"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SEOIssueResponse"},"title":"Response Get Seo Issues Api V1 Seo Issues Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["seo"],"summary":"Create Seo Issue","description":"SEO 문제 생성","operationId":"create_seo_issue_api_v1_seo_issues_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SEOIssueCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SEOIssueResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/seo/issues/{issue_id}/resolve":{"post":{"tags":["seo"],"summary":"Resolve Seo Issue","description":"SEO 문제 해결","operationId":"resolve_seo_issue_api_v1_seo_issues__issue_id__resolve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"issue_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Issue Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/seo/scan":{"post":{"tags":["seo"],"summary":"Scan Page Seo","description":"페이지 SEO 스캔","operationId":"scan_page_seo_api_v1_seo_scan_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SEOScanRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SEOScanResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/memory-patterns":{"get":{"tags":["admin-memory-patterns","Memory Patterns"],"summary":"List Patterns","description":"패턴 목록 조회","operationId":"list_patterns_api_v1_admin_memory_patterns_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pattern_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PatternTypeEnum"},{"type":"null"}],"title":"Pattern Type"}},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryPatternListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin-memory-patterns","Memory Patterns"],"summary":"Create Pattern","description":"패턴 생성","operationId":"create_pattern_api_v1_admin_memory_patterns_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryPatternCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryPatternResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/memory-patterns/stats":{"get":{"tags":["admin-memory-patterns","Memory Patterns"],"summary":"Get Pattern Stats","description":"패턴 통계 조회","operationId":"get_pattern_stats_api_v1_admin_memory_patterns_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/memory-patterns/types":{"get":{"tags":["admin-memory-patterns","Memory Patterns"],"summary":"Get Pattern Types","description":"패턴 타입 목록","operationId":"get_pattern_types_api_v1_admin_memory_patterns_types_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/memory-patterns/categories":{"get":{"tags":["admin-memory-patterns","Memory Patterns"],"summary":"Get Pattern Categories","description":"사용 중인 카테고리 목록","operationId":"get_pattern_categories_api_v1_admin_memory_patterns_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/memory-patterns/{pattern_id}":{"get":{"tags":["admin-memory-patterns","Memory Patterns"],"summary":"Get Pattern","description":"패턴 상세 조회","operationId":"get_pattern_api_v1_admin_memory_patterns__pattern_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pattern_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Pattern Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryPatternResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["admin-memory-patterns","Memory Patterns"],"summary":"Update Pattern","description":"패턴 수정","operationId":"update_pattern_api_v1_admin_memory_patterns__pattern_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pattern_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Pattern Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryPatternUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryPatternResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin-memory-patterns","Memory Patterns"],"summary":"Delete Pattern","description":"패턴 삭제","operationId":"delete_pattern_api_v1_admin_memory_patterns__pattern_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pattern_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Pattern Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/memory-patterns/{pattern_id}/toggle":{"post":{"tags":["admin-memory-patterns","Memory Patterns"],"summary":"Toggle Pattern","description":"패턴 활성화/비활성화 토글","operationId":"toggle_pattern_api_v1_admin_memory_patterns__pattern_id__toggle_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pattern_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Pattern Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryPatternResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/memory-patterns/test":{"post":{"tags":["admin-memory-patterns","Memory Patterns"],"summary":"Test Patterns","description":"패턴 테스트","operationId":"test_patterns_api_v1_admin_memory_patterns_test_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatternTestRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatternTestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/memory-patterns/generate":{"post":{"tags":["admin-memory-patterns","Memory Patterns"],"summary":"Generate Pattern With Llm","description":"LLM으로 패턴 생성 (저장하지 않음)","operationId":"generate_pattern_with_llm_api_v1_admin_memory_patterns_generate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMPatternGenerateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMPatternGenerateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/memory-patterns/generate-and-save":{"post":{"tags":["admin-memory-patterns","Memory Patterns"],"summary":"Generate And Save Pattern","description":"LLM으로 패턴 생성 후 저장","operationId":"generate_and_save_pattern_api_v1_admin_memory_patterns_generate_and_save_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMPatternGenerateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryPatternResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/organizations":{"post":{"tags":["organizations"],"summary":"Create Organization","description":"새 조직 생성\n\n- 생성자는 자동으로 OWNER로 등록됨\n- org_type: \"creator\" (생성자 조직) 또는 \"buyer\" (구매자 조직)","operationId":"create_organization_api_v1_organizations_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["organizations"],"summary":"List My Organizations","description":"내가 속한 조직 목록 (관리자는 모든 조직)","operationId":"list_my_organizations_api_v1_organizations_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"조직 유형 필터 (creator/buyer)","title":"Org Type"},"description":"조직 유형 필터 (creator/buyer)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/organizations/{org_id}":{"get":{"tags":["organizations"],"summary":"Get Organization","description":"조직 상세 정보 조회\n\n- 멤버만 조회 가능","operationId":"get_organization_api_v1_organizations__org_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["organizations"],"summary":"Update Organization","description":"조직 정보 수정\n\n- OWNER 또는 manage_organization 권한 필요","operationId":"update_organization_api_v1_organizations__org_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["organizations"],"summary":"Delete Organization","description":"조직 삭제 (비활성화)\n\n- OWNER만 가능","operationId":"delete_organization_api_v1_organizations__org_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/organizations/{org_id}/members":{"get":{"tags":["organizations"],"summary":"List Members","description":"조직 멤버 목록","operationId":"list_members_api_v1_organizations__org_id__members_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"조직 ID","title":"Org Id"},"description":"조직 ID"},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Inactive"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["organizations"],"summary":"Add Member","description":"멤버 직접 추가 (이메일 초대 아님)\n\n- manage_members 권한 필요","operationId":"add_member_api_v1_organizations__org_id__members_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/organizations/{org_id}/members/{user_id}":{"patch":{"tags":["organizations"],"summary":"Update Member","description":"멤버 역할/권한 수정\n\n- manage_members 권한 필요","operationId":"update_member_api_v1_organizations__org_id__members__user_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["organizations"],"summary":"Remove Member","description":"멤버 제거\n\n- remove_members 권한 필요\n- OWNER는 제거 불가","operationId":"remove_member_api_v1_organizations__org_id__members__user_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/organizations/{org_id}/invitations":{"get":{"tags":["organizations"],"summary":"List Invitations","description":"대기 중인 초대 목록","operationId":"list_invitations_api_v1_organizations__org_id__invitations_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["organizations"],"summary":"Create Invitation","description":"멤버 초대 생성\n\n- invite_members 권한 필요","operationId":"create_invitation_api_v1_organizations__org_id__invitations_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/organizations/invitations/accept":{"post":{"tags":["organizations"],"summary":"Accept Invitation","description":"초대 수락\n\n- 초대된 이메일과 현재 사용자 이메일이 일치해야 함","operationId":"accept_invitation_api_v1_organizations_invitations_accept_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationAccept"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/organizations/invitations/decline":{"post":{"tags":["organizations"],"summary":"Decline Invitation","description":"초대 거절","operationId":"decline_invitation_api_v1_organizations_invitations_decline_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationAccept"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/organizations/{org_id}/characters":{"get":{"tags":["organizations"],"summary":"List Org Characters","description":"조직의 캐릭터 목록","operationId":"list_org_characters_api_v1_organizations__org_id__characters_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OrgCharacterResponse"},"title":"Response List Org Characters Api V1 Organizations  Org Id  Characters Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["organizations"],"summary":"Add Character To Org","description":"조직에 캐릭터 추가\n\n- manage_characters 권한 필요","operationId":"add_character_to_org_api_v1_organizations__org_id__characters_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgCharacterAdd"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgCharacterResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/organizations/{org_id}/characters/{character_id}":{"delete":{"tags":["organizations"],"summary":"Remove Character From Org","description":"조직에서 캐릭터 제거","operationId":"remove_character_from_org_api_v1_organizations__org_id__characters__character_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/organizations/{org_id}/permissions":{"get":{"tags":["organizations"],"summary":"Get My Permissions","description":"현재 사용자의 조직 내 권한 조회","operationId":"get_my_permissions_api_v1_organizations__org_id__permissions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPermissionsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/organizations/{org_id}/permissions/check":{"get":{"tags":["organizations"],"summary":"Check Permission","description":"특정 권한 확인","operationId":"check_permission_api_v1_organizations__org_id__permissions_check_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"permission","in":"query","required":true,"schema":{"type":"string","title":"Permission"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionCheckResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/organizations/{org_id}/quota":{"get":{"tags":["organizations"],"summary":"Get Organization Quota","description":"조직 리소스 사용량 및 제한 조회","operationId":"get_organization_quota_api_v1_organizations__org_id__quota_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuotaResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/organizations/{org_id}/external-users":{"get":{"tags":["organizations"],"summary":"List External Users","description":"조직의 외부 사용자 목록\n\n- 구매자 조직에서 API를 통해 접근하는 최종 사용자 목록\n- manage_api_keys 권한 필요","operationId":"list_external_users_api_v1_organizations__org_id__external_users_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"검색어","title":"Search"},"description":"검색어"},{"name":"is_blocked","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"차단 상태 필터","title":"Is Blocked"},"description":"차단 상태 필터"},{"name":"api_key_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"특정 API 키 필터","title":"Api Key Id"},"description":"특정 API 키 필터"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/organizations/{org_id}/external-users/{user_id}":{"get":{"tags":["organizations"],"summary":"Get External User Detail","description":"외부 사용자 상세 정보","operationId":"get_external_user_detail_api_v1_organizations__org_id__external_users__user_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/organizations/{org_id}/external-users/{user_id}/block":{"post":{"tags":["organizations"],"summary":"Block External User","description":"외부 사용자 차단\n\n- manage_api_keys 권한 필요","operationId":"block_external_user_api_v1_organizations__org_id__external_users__user_id__block_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalUserBlockRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/organizations/{org_id}/external-users/{user_id}/unblock":{"post":{"tags":["organizations"],"summary":"Unblock External User","description":"외부 사용자 차단 해제\n\n- manage_api_keys 권한 필요","operationId":"unblock_external_user_api_v1_organizations__org_id__external_users__user_id__unblock_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/organizations/{org_id}/external-users-stats":{"get":{"tags":["organizations"],"summary":"Get External Users Stats","description":"외부 사용자 통계 요약\n\n- 총 사용자 수, 차단 사용자 수, 오늘 활성 사용자 수 등","operationId":"get_external_users_stats_api_v1_organizations__org_id__external_users_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/products/stats":{"get":{"tags":["products"],"summary":"상품 통계","description":"캐릭터의 상품 통계를 조회합니다.","operationId":"get_product_stats_api_v1_characters__character_id__products_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/products/categories":{"post":{"tags":["products"],"summary":"카테고리 생성","description":"상품 카테고리를 생성합니다.","operationId":"create_category_api_v1_characters__character_id__products_categories_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["products"],"summary":"카테고리 목록 조회","description":"캐릭터의 상품 카테고리 목록을 조회합니다.","operationId":"get_categories_api_v1_characters__character_id__products_categories_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CategoryResponse"},"title":"Response Get Categories Api V1 Characters  Character Id  Products Categories Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/products/search":{"post":{"tags":["products"],"summary":"상품 검색 (RAG)","description":"자연어 쿼리로 상품을 검색합니다. 의미 기반 검색을 지원합니다.","operationId":"search_products_api_v1_characters__character_id__products_search_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductSearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/products/recommend":{"post":{"tags":["products"],"summary":"상품 추천","description":"대화 컨텍스트를 기반으로 상품을 추천합니다.","operationId":"recommend_products_api_v1_characters__character_id__products_recommend_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductRecommendationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductRecommendationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/products/bulk":{"post":{"tags":["products"],"summary":"상품 일괄 생성","description":"최대 100개의 상품을 한 번에 추가합니다.","operationId":"bulk_create_products_api_v1_characters__character_id__products_bulk_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductBulkCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductBulkCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/products":{"post":{"tags":["products"],"summary":"상품 생성","description":"캐릭터에 새 상품을 추가합니다.","operationId":"create_product_api_v1_characters__character_id__products_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["products"],"summary":"상품 목록 조회","description":"캐릭터의 상품 목록을 조회합니다.","operationId":"get_products_api_v1_characters__character_id__products_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"페이지 번호","default":1,"title":"Page"},"description":"페이지 번호"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"페이지 크기","default":20,"title":"Page Size"},"description":"페이지 크기"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"카테고리 필터","title":"Category"},"description":"카테고리 필터"},{"name":"brand","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"브랜드 필터","title":"Brand"},"description":"브랜드 필터"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"상태 필터","title":"Status"},"description":"상태 필터"},{"name":"in_stock_only","in":"query","required":false,"schema":{"type":"boolean","description":"재고 있는 상품만","default":false,"title":"In Stock Only"},"description":"재고 있는 상품만"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"검색어","title":"Search"},"description":"검색어"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/products/{product_id}":{"get":{"tags":["products"],"summary":"상품 조회","description":"특정 상품의 상세 정보를 조회합니다.","operationId":"get_product_api_v1_characters__character_id__products__product_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"product_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["products"],"summary":"상품 수정","description":"상품 정보를 수정합니다.","operationId":"update_product_api_v1_characters__character_id__products__product_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"product_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Product Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["products"],"summary":"상품 삭제","description":"상품을 삭제합니다.","operationId":"delete_product_api_v1_characters__character_id__products__product_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"product_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/products":{"post":{"tags":["external-products"],"summary":"상품 추가","description":"API 키로 캐릭터에 상품을 추가합니다.","operationId":"create_product_external_api_v1_external_products_post","parameters":[{"name":"X-Character-ID","in":"header","required":true,"schema":{"type":"string","format":"uuid","title":"X-Character-Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","description":"API Key: Bearer bc_xxx","title":"Authorization"},"description":"API Key: Bearer bc_xxx"},{"name":"X-Widget-Management-Secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Widget-Management-Secret"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["external-products"],"summary":"상품 목록 조회","description":"API 키로 등록된 상품 목록을 조회합니다.","operationId":"get_products_external_api_v1_external_products_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"페이지 번호","default":1,"title":"Page"},"description":"페이지 번호"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"페이지 크기","default":20,"title":"Page Size"},"description":"페이지 크기"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"카테고리 필터","title":"Category"},"description":"카테고리 필터"},{"name":"brand","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"브랜드 필터","title":"Brand"},"description":"브랜드 필터"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"상태 필터","title":"Status"},"description":"상태 필터"},{"name":"in_stock_only","in":"query","required":false,"schema":{"type":"boolean","description":"재고 있는 상품만","default":false,"title":"In Stock Only"},"description":"재고 있는 상품만"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"검색어","title":"Search"},"description":"검색어"},{"name":"X-Character-ID","in":"header","required":true,"schema":{"type":"string","format":"uuid","title":"X-Character-Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","description":"API Key: Bearer bc_xxx","title":"Authorization"},"description":"API Key: Bearer bc_xxx"},{"name":"X-Widget-Management-Secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Widget-Management-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/products/bulk":{"post":{"tags":["external-products"],"summary":"상품 일괄 추가","description":"최대 100개의 상품을 한 번에 추가합니다.","operationId":"bulk_create_products_external_api_v1_external_products_bulk_post","parameters":[{"name":"X-Character-ID","in":"header","required":true,"schema":{"type":"string","format":"uuid","title":"X-Character-Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","description":"API Key: Bearer bc_xxx","title":"Authorization"},"description":"API Key: Bearer bc_xxx"},{"name":"X-Widget-Management-Secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Widget-Management-Secret"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductBulkCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductBulkCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/products/{product_id}":{"get":{"tags":["external-products"],"summary":"상품 조회","description":"특정 상품의 상세 정보를 조회합니다.","operationId":"get_product_external_api_v1_external_products__product_id__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Product Id"}},{"name":"X-Character-ID","in":"header","required":true,"schema":{"type":"string","format":"uuid","title":"X-Character-Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","description":"API Key: Bearer bc_xxx","title":"Authorization"},"description":"API Key: Bearer bc_xxx"},{"name":"X-Widget-Management-Secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Widget-Management-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["external-products"],"summary":"상품 수정","description":"상품 정보를 수정합니다.","operationId":"update_product_external_api_v1_external_products__product_id__put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Product Id"}},{"name":"X-Character-ID","in":"header","required":true,"schema":{"type":"string","format":"uuid","title":"X-Character-Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","description":"API Key: Bearer bc_xxx","title":"Authorization"},"description":"API Key: Bearer bc_xxx"},{"name":"X-Widget-Management-Secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Widget-Management-Secret"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["external-products"],"summary":"상품 삭제","description":"상품을 삭제합니다.","operationId":"delete_product_external_api_v1_external_products__product_id__delete","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Product Id"}},{"name":"X-Character-ID","in":"header","required":true,"schema":{"type":"string","format":"uuid","title":"X-Character-Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","description":"API Key: Bearer bc_xxx","title":"Authorization"},"description":"API Key: Bearer bc_xxx"},{"name":"X-Widget-Management-Secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Widget-Management-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/products/search":{"post":{"tags":["external-products"],"summary":"상품 검색 (RAG)","description":"자연어로 상품을 검색합니다.","operationId":"search_products_external_api_v1_external_products_search_post","parameters":[{"name":"X-Character-ID","in":"header","required":true,"schema":{"type":"string","format":"uuid","title":"X-Character-Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","description":"API Key: Bearer bc_xxx","title":"Authorization"},"description":"API Key: Bearer bc_xxx"},{"name":"X-Widget-Management-Secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Widget-Management-Secret"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductSearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/products/stats":{"get":{"tags":["external-products"],"summary":"상품 통계","description":"등록된 상품의 통계를 조회합니다.","operationId":"get_product_stats_external_api_v1_external_products_stats_get","parameters":[{"name":"X-Character-ID","in":"header","required":true,"schema":{"type":"string","format":"uuid","title":"X-Character-Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","description":"API Key: Bearer bc_xxx","title":"Authorization"},"description":"API Key: Bearer bc_xxx"},{"name":"X-Widget-Management-Secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Widget-Management-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/products/webhook/register":{"post":{"tags":["external-products"],"summary":"웹훅 등록","description":"상품 관련 이벤트 발생 시 호출될 웹훅 URL을 등록합니다.","operationId":"register_product_webhook_api_v1_external_products_webhook_register_post","parameters":[{"name":"webhook_url","in":"query","required":true,"schema":{"type":"string","description":"웹훅 URL","title":"Webhook Url"},"description":"웹훅 URL"},{"name":"events","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"구독할 이벤트 목록","default":["product.recommended","product.clicked"],"title":"Events"},"description":"구독할 이벤트 목록"},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","description":"API Key: Bearer bc_xxx","title":"Authorization"},"description":"API Key: Bearer bc_xxx"},{"name":"X-Widget-Management-Secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Widget-Management-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/external/products/recommendations/{recommendation_id}/feedback":{"post":{"tags":["external-products"],"summary":"추천 피드백","description":"상품 추천에 대한 사용자 피드백을 기록합니다.","operationId":"record_recommendation_feedback_api_v1_external_products_recommendations__recommendation_id__feedback_post","parameters":[{"name":"recommendation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Recommendation Id"}},{"name":"action","in":"query","required":true,"schema":{"type":"string","pattern":"^(clicked|purchased|dismissed)$","description":"사용자 액션","title":"Action"},"description":"사용자 액션"},{"name":"X-Character-ID","in":"header","required":true,"schema":{"type":"string","format":"uuid","title":"X-Character-Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","description":"API Key: Bearer bc_xxx","title":"Authorization"},"description":"API Key: Bearer bc_xxx"},{"name":"X-Widget-Management-Secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Widget-Management-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/shopping/platforms":{"get":{"tags":["shopping-integrations"],"summary":"지원 플랫폼 목록","description":"지원하는 쇼핑몰 플랫폼 목록과 연동에 필요한 정보를 조회합니다.","operationId":"get_supported_platforms_api_v1_shopping_platforms_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformGuidesResponse"}}}}}}},"/api/v1/shopping/characters/{character_id}/integrations":{"post":{"tags":["shopping-integrations"],"summary":"쇼핑몰 연동 생성","description":"캐릭터에 새 쇼핑몰 연동을 추가합니다.","operationId":"create_integration_api_v1_shopping_characters__character_id__integrations_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["shopping-integrations"],"summary":"연동 목록 조회","description":"캐릭터의 쇼핑몰 연동 목록을 조회합니다.","operationId":"get_integrations_api_v1_shopping_characters__character_id__integrations_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/shopping/projects/{project_id}/integrations":{"post":{"tags":["shopping-integrations"],"summary":"프로젝트 쇼핑몰 연동 생성","description":"프로젝트에 새 쇼핑몰 연동을 추가합니다.","operationId":"create_project_integration_api_v1_shopping_projects__project_id__integrations_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["shopping-integrations"],"summary":"프로젝트 연동 목록 조회","description":"프로젝트의 쇼핑몰 연동 목록을 조회합니다.","operationId":"get_project_integrations_api_v1_shopping_projects__project_id__integrations_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/shopping/integrations/{integration_id}":{"get":{"tags":["shopping-integrations"],"summary":"연동 상세 조회","description":"특정 연동의 상세 정보를 조회합니다.","operationId":"get_integration_api_v1_shopping_integrations__integration_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Integration Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["shopping-integrations"],"summary":"연동 설정 수정","description":"연동 설정을 수정합니다.","operationId":"update_integration_api_v1_shopping_integrations__integration_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Integration Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["shopping-integrations"],"summary":"연동 삭제","description":"쇼핑몰 연동을 삭제합니다.","operationId":"delete_integration_api_v1_shopping_integrations__integration_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Integration Id"}},{"name":"delete_products","in":"query","required":false,"schema":{"type":"boolean","description":"연동된 상품도 함께 삭제","default":false,"title":"Delete Products"},"description":"연동된 상품도 함께 삭제"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/shopping/integrations/{integration_id}/sync":{"post":{"tags":["shopping-integrations"],"summary":"상품 동기화 실행","description":"쇼핑몰에서 상품 정보를 가져와 동기화합니다.","operationId":"sync_products_api_v1_shopping_integrations__integration_id__sync_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Integration Id"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncRequest","default":{"sync_type":"full"}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncResultResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/shopping/integrations/{integration_id}/sync/history":{"get":{"tags":["shopping-integrations"],"summary":"동기화 히스토리 조회","description":"동기화 실행 기록을 조회합니다.","operationId":"get_sync_history_api_v1_shopping_integrations__integration_id__sync_history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Integration Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncHistoryListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/shopping/integrations/{integration_id}/refresh-token":{"post":{"tags":["shopping-integrations"],"summary":"토큰 갱신","description":"OAuth 토큰을 갱신합니다.","operationId":"refresh_token_api_v1_shopping_integrations__integration_id__refresh_token_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Integration Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/shopping/integrations/{integration_id}/test":{"post":{"tags":["shopping-integrations"],"summary":"연동 테스트","description":"연동이 정상적으로 작동하는지 테스트합니다.","operationId":"test_integration_api_v1_shopping_integrations__integration_id__test_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Integration Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/shopping/oauth/authorize/base":{"get":{"tags":["shopping-integrations"],"summary":"BASE OAuth 인증 시작","description":"BASE 로그인 페이지로 리다이렉트합니다.","operationId":"authorize_base_api_v1_shopping_oauth_authorize_base_get","parameters":[{"name":"state","in":"query","required":true,"schema":{"type":"string","description":"CSRF 방지용 상태 값 (character_id:owner_id)","title":"State"},"description":"CSRF 방지용 상태 값 (character_id:owner_id)"},{"name":"redirect_uri","in":"query","required":true,"schema":{"type":"string","description":"콜백 URI","title":"Redirect Uri"},"description":"콜백 URI"},{"name":"client_id","in":"query","required":true,"schema":{"type":"string","description":"BASE Client ID","title":"Client Id"},"description":"BASE Client ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/shopping/oauth/callback/base":{"get":{"tags":["shopping-integrations"],"summary":"BASE OAuth 콜백","description":"BASE 인증 후 콜백을 처리합니다.","operationId":"callback_base_api_v1_shopping_oauth_callback_base_get","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","title":"Code"}},{"name":"state","in":"query","required":true,"schema":{"type":"string","title":"State"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/logs/errors":{"get":{"tags":["error-logs"],"summary":"Get Error Logs","description":"에러 로그 목록 조회 (관리자 전용)","operationId":"get_error_logs_api_v1_logs_errors_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"level","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/LogLevel"},{"type":"null"}],"title":"Level"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/LogSource"},{"type":"null"}],"title":"Source"}},{"name":"resolved","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Resolved"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorLogListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/logs/errors/stats":{"get":{"tags":["error-logs"],"summary":"Get Error Stats","description":"에러 통계 조회","operationId":"get_error_stats_api_v1_logs_errors_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/logs/errors/patterns":{"get":{"tags":["error-logs"],"summary":"Get Error Patterns","description":"자주 발생하는 에러 패턴 조회","operationId":"get_error_patterns_api_v1_logs_errors_patterns_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/logs/errors/{error_id}/resolve":{"put":{"tags":["error-logs"],"summary":"Resolve Error","description":"에러 해결 처리","operationId":"resolve_error_api_v1_logs_errors__error_id__resolve_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"error_id","in":"path","required":true,"schema":{"type":"string","title":"Error Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveErrorRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/logs/errors/export":{"get":{"tags":["error-logs"],"summary":"Export Errors","description":"에러 로그 내보내기 (AI 분석용)","operationId":"export_errors_api_v1_logs_errors_export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"$ref":"#/components/schemas/ExportFormat","default":"json"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}},{"name":"include_resolved","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Resolved"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/logs/frontend":{"post":{"tags":["error-logs"],"summary":"Log Frontend Event","description":"프론트엔드 로그 수집 (인증 불필요, 비동기 저장)","operationId":"log_frontend_event_api_v1_logs_frontend_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FrontendLogRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/logs/api-error":{"post":{"tags":["error-logs"],"summary":"Log Api Error","description":"프론트엔드 API 에러 로그 수집 (비동기 저장)","operationId":"log_api_error_api_v1_logs_api_error_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIErrorLogRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/logs/frontend/batch":{"post":{"tags":["error-logs"],"summary":"Log Frontend Batch","description":"프론트엔드 로그 배치 수집 (gzip 압축 지원)\n\n프론트엔드에서 여러 로그를 gzip으로 압축하여 한번에 전송합니다.\n네트워크 비용을 크게 절감할 수 있습니다.","operationId":"log_frontend_batch_api_v1_logs_frontend_batch_post","responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/logs/api-error/batch":{"post":{"tags":["error-logs"],"summary":"Log Api Error Batch","description":"API 에러 로그 배치 수집 (gzip 압축 지원)","operationId":"log_api_error_batch_api_v1_logs_api_error_batch_post","responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/logs/cleanup":{"delete":{"tags":["error-logs"],"summary":"Cleanup Old Logs","description":"오래된 로그 정리 (슈퍼유저 전용)","operationId":"cleanup_old_logs_api_v1_logs_cleanup_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":7,"default":90,"title":"Days"}},{"name":"collection","in":"query","required":false,"schema":{"type":"string","default":"api_logs","title":"Collection"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/billing-policy/":{"get":{"tags":["admin-billing-policy"],"summary":"List Billing Policy","description":"현재 정책 디폴트 + 미설정 키의 default 값 모두 반환.","operationId":"list_billing_policy_api_v1_admin_billing_policy__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/billing-policy/{key}":{"put":{"tags":["admin-billing-policy"],"summary":"Update Billing Policy","description":"정책 디폴트 1건 변경. 즉시 반영.","operationId":"update_billing_policy_api_v1_admin_billing_policy__key__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/billing-policy/_public/branding":{"get":{"tags":["admin-billing-policy"],"summary":"Public Branding","description":"인증 없이 호출 가능한 read-only 브랜딩 값.\n\n우선순위:\n  1. org_id가 제공되고 그 조직에 brand_* 컬럼이 설정되어 있으면 → 조직값\n  2. system_settings.branding.* (글로벌 슈퍼유저 설정)\n  3. 코드 디폴트 (보라/핑크)\n\nlayout이 마운트 시점에 호출하여 CSS custom property를 적용한다.","operationId":"public_branding_api_v1_admin_billing_policy__public_branding_get","parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/billing-policy/_org/{org_id}/branding":{"put":{"tags":["admin-billing-policy"],"summary":"Update Org Branding","description":"조직 owner 또는 슈퍼유저가 조직 브랜딩 변경.\n\n조직 멤버가 admin 콘솔 접근 시 이 색상이 적용됨.\nNULL을 보내면 해당 키만 글로벌 디폴트로 fallback.","operationId":"update_org_branding_api_v1_admin_billing_policy__org__org_id__branding_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgBrandingUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/billing-policy/_org/{org_id}/logo":{"post":{"tags":["admin-billing-policy"],"summary":"Upload Org Logo","description":"조직 로고 파일 업로드. organization.logo_url에 업로드된 URL 저장.\n\n이미지만 허용 (FileUploadService 검증). 1MB 권장 (R2 max는 더 크지만\n사이드바 28×28에 쓰이는 작은 로고).","operationId":"upload_org_logo_api_v1_admin_billing_policy__org__org_id__logo_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_org_logo_api_v1_admin_billing_policy__org__org_id__logo_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/billing-policy/_org/{org_id}/favicon":{"post":{"tags":["admin-billing-policy"],"summary":"Upload Org Favicon","description":"조직 favicon 업로드 — 64×64 PNG로 자동 리사이즈.","operationId":"upload_org_favicon_api_v1_admin_billing_policy__org__org_id__favicon_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_org_favicon_api_v1_admin_billing_policy__org__org_id__favicon_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/billing-policy/_org/{org_id}/branding/export":{"get":{"tags":["admin-billing-policy"],"summary":"Export Org Branding","description":"조직 브랜딩 전체를 JSON으로 export. 백업/마이그레이션용.","operationId":"export_org_branding_api_v1_admin_billing_policy__org__org_id__branding_export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/billing-policy/_org/{org_id}/branding/import":{"post":{"tags":["admin-billing-policy"],"summary":"Import Org Branding","description":"JSON 백업으로부터 조직 브랜딩 복원. logo_url은 외부 URL이라 그대로 적용.","operationId":"import_org_branding_api_v1_admin_billing_policy__org__org_id__branding_import_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandingImport"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/billing-policy/_org/{org_id}/branding/history":{"get":{"tags":["admin-billing-policy"],"summary":"Org Branding History","description":"이 조직의 브랜딩 변경 이력. audit_log 시계열에서 추출.","operationId":"org_branding_history_api_v1_admin_billing_policy__org__org_id__branding_history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/billing-policy/_org/{org_id}/branding/rollback/{audit_id}":{"post":{"tags":["admin-billing-policy"],"summary":"Org Branding Rollback","description":"특정 audit_log 항목의 'old' 값들로 브랜딩 되돌림.\n\naudit metadata의 changes 구조 (`{field: {old, new}}`)를 역으로 적용.","operationId":"org_branding_rollback_api_v1_admin_billing_policy__org__org_id__branding_rollback__audit_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"audit_id","in":"path","required":true,"schema":{"type":"string","title":"Audit Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/billing-policy/widget-settlements":{"get":{"tags":["admin-billing-policy"],"summary":"Widget Settlements","description":"Durable widget charges needing delivery or manual reconciliation (latest 100).","operationId":"widget_settlements_api_v1_admin_billing_policy_widget_settlements_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/characters/{character_id}/mood":{"get":{"tags":["character-mood"],"summary":"Get Character Mood","description":"캐릭터의 현재 기분 가져오기\n\n- 유효한 기분이 없으면 새로 생성\n- 위젯에서 헤더에 한마디 표시할 때 사용\n- lang 파라미터로 언어 선택 가능 (ko/ja/en)","operationId":"get_character_mood_api_v1_characters__character_id__mood_get","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"lang","in":"query","required":false,"schema":{"enum":["ko","ja","en"],"type":"string","description":"언어 선택 (ko/ja/en)","default":"ko","title":"Lang"},"description":"언어 선택 (ko/ja/en)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/MoodInfoResponse"},{"type":"null"}],"title":"Response Get Character Mood Api V1 Characters  Character Id  Mood Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/mood/detail":{"get":{"tags":["character-mood"],"summary":"Get Character Mood Detail","description":"캐릭터의 현재 기분 상세 정보\n\n- 대화 힌트 등 전체 정보 포함\n- 채팅 시스템에서 사용\n- lang 파라미터로 언어 선택 가능 (ko/ja/en)","operationId":"get_character_mood_detail_api_v1_characters__character_id__mood_detail_get","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"lang","in":"query","required":false,"schema":{"enum":["ko","ja","en"],"type":"string","description":"언어 선택 (ko/ja/en)","default":"ko","title":"Lang"},"description":"언어 선택 (ko/ja/en)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoodResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/mood/history":{"get":{"tags":["character-mood"],"summary":"Get Character Mood History","description":"캐릭터의 기분 히스토리 조회\n\n- 최근 N개의 기분 기록 반환\n- lang 파라미터로 언어 선택 가능 (ko/ja/en)","operationId":"get_character_mood_history_api_v1_characters__character_id__mood_history_get","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}},{"name":"lang","in":"query","required":false,"schema":{"enum":["ko","ja","en"],"type":"string","description":"언어 선택 (ko/ja/en)","default":"ko","title":"Lang"},"description":"언어 선택 (ko/ja/en)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MoodResponse"},"title":"Response Get Character Mood History Api V1 Characters  Character Id  Mood History Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/mood/refresh":{"post":{"tags":["character-mood"],"summary":"Refresh Character Mood","description":"캐릭터 기분 강제 새로고침\n\n- 관리자/테스트용\n- 현재 기분을 무시하고 새로 생성\n- lang 파라미터로 언어 선택 가능 (ko/ja/en)","operationId":"refresh_character_mood_api_v1_characters__character_id__mood_refresh_post","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"lang","in":"query","required":false,"schema":{"enum":["ko","ja","en"],"type":"string","description":"언어 선택 (ko/ja/en)","default":"ko","title":"Lang"},"description":"언어 선택 (ko/ja/en)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoodResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/mood-types":{"get":{"tags":["character-mood"],"summary":"Get Available Mood Types","description":"사용 가능한 기분 타입 목록\n\n- 관리자 UI에서 기분 정보 표시용","operationId":"get_available_mood_types_api_v1_characters_mood_types_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoodTypesResponse"}}}}}}},"/api/v1/faq/faqs":{"post":{"tags":["faq","faq"],"summary":"Create Faq","description":"FAQ 수동 생성","operationId":"create_faq_api_v1_faq_faqs_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FAQCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FAQResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["faq","faq"],"summary":"List Faqs","description":"FAQ 목록 조회","operationId":"list_faqs_api_v1_faq_faqs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Character Id"}},{"name":"project_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"published","title":"Status"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FAQListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/faq/faqs/stats":{"get":{"tags":["faq","faq"],"summary":"Get Faq Stats","description":"FAQ 통계","operationId":"get_faq_stats_api_v1_faq_faqs_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Character Id"}},{"name":"project_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FAQStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/faq/faqs/{faq_id}":{"get":{"tags":["faq","faq"],"summary":"Get Faq","description":"FAQ 상세 조회","operationId":"get_faq_api_v1_faq_faqs__faq_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"faq_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Faq Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FAQResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["faq","faq"],"summary":"Update Faq","description":"FAQ 수정","operationId":"update_faq_api_v1_faq_faqs__faq_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"faq_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Faq Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FAQUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FAQResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["faq","faq"],"summary":"Delete Faq","description":"FAQ 삭제","operationId":"delete_faq_api_v1_faq_faqs__faq_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"faq_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Faq Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/faq/faqs/{faq_id}/publish":{"post":{"tags":["faq","faq"],"summary":"Publish Faq","description":"FAQ 게시","operationId":"publish_faq_api_v1_faq_faqs__faq_id__publish_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"faq_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Faq Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FAQResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/faq/faqs/{faq_id}/feedback":{"post":{"tags":["faq","faq"],"summary":"Submit Faq Feedback","description":"FAQ 피드백 제출 (도움됨/안됨)","operationId":"submit_faq_feedback_api_v1_faq_faqs__faq_id__feedback_post","parameters":[{"name":"faq_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Faq Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FAQFeedbackRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/faq/faqs/generate":{"post":{"tags":["faq","faq"],"summary":"Generate Faqs","description":"FAQ 자동 생성\n\n지식베이스, 크롤링 결과 또는 고객 대화에서 FAQ를 자동 생성합니다.\n\n- source: \"knowledge\" - 지식베이스에서 생성\n- source: \"crawl\" - 크롤링 결과에서 생성\n- source: \"conversation\" - 고객 대화에서 생성","operationId":"generate_faqs_api_v1_faq_faqs_generate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FAQGenerateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/faq/faqs/generate-from-conversations":{"post":{"tags":["faq","faq"],"summary":"Generate Faqs From Conversations","description":"고객 대화에서 FAQ 자동 생성\n\n실제 고객 문의 패턴을 분석하여 자주 묻는 질문을 추출합니다.\n\n- days: 분석할 대화 기간 (기본 30일)\n- min_messages: 분석에 포함할 최소 메시지 수 (기본 3개)","operationId":"generate_faqs_from_conversations_api_v1_faq_faqs_generate_from_conversations_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FAQGenerateFromConversationsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/faq/faqs/generate-from-content":{"post":{"tags":["faq","faq"],"summary":"Generate Faqs From Content","description":"텍스트 콘텐츠에서 FAQ 직접 생성\n\n제공된 텍스트를 분석하여 FAQ를 생성합니다.","operationId":"generate_faqs_from_content_api_v1_faq_faqs_generate_from_content_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_generate_faqs_from_content_api_v1_faq_faqs_generate_from_content_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/faq/faqs/search":{"get":{"tags":["faq","faq"],"summary":"Search Faqs","description":"FAQ 검색 (채팅 응답에 활용)\n\n채팅 중 사용자 질문과 매칭되는 FAQ를 검색합니다.","operationId":"search_faqs_api_v1_faq_faqs_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"title":"Q"}},{"name":"character_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Character Id"}},{"name":"project_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":1,"default":5,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/faq/faq-categories":{"post":{"tags":["faq","faq"],"summary":"Create Faq Category","description":"FAQ 카테고리 생성","operationId":"create_faq_category_api_v1_faq_faq_categories_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Character Id"}},{"name":"project_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FAQCategoryCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["faq","faq"],"summary":"List Faq Categories","description":"FAQ 카테고리 목록","operationId":"list_faq_categories_api_v1_faq_faq_categories_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Character Id"}},{"name":"project_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/faq/faqs/bulk-publish":{"post":{"tags":["faq","faq"],"summary":"Bulk Publish Faqs","description":"FAQ 일괄 게시","operationId":"bulk_publish_faqs_api_v1_faq_faqs_bulk_publish_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_bulk_publish_faqs_api_v1_faq_faqs_bulk_publish_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/faq/faqs/bulk-delete":{"delete":{"tags":["faq","faq"],"summary":"Bulk Delete Faqs","description":"FAQ 일괄 삭제","operationId":"bulk_delete_faqs_api_v1_faq_faqs_bulk_delete_delete","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_bulk_delete_faqs_api_v1_faq_faqs_bulk_delete_delete"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/resolution/resolutions":{"post":{"tags":["resolution","resolution"],"summary":"Create Resolution","description":"대화 해결 상태 생성","operationId":"create_resolution_api_v1_resolution_resolutions_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolutionCreateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolutionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/resolution/resolutions/{conversation_id}":{"get":{"tags":["resolution","resolution"],"summary":"Get Resolution","description":"대화 해결 상태 조회","operationId":"get_resolution_api_v1_resolution_resolutions__conversation_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolutionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/resolution/resolutions/{conversation_id}/resolve":{"post":{"tags":["resolution","resolution"],"summary":"Mark Resolved","description":"대화를 해결됨으로 표시","operationId":"mark_resolved_api_v1_resolution_resolutions__conversation_id__resolve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_mark_resolved_api_v1_resolution_resolutions__conversation_id__resolve_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolutionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/resolution/resolutions/{conversation_id}/escalate":{"post":{"tags":["resolution","resolution"],"summary":"Mark Escalated","description":"대화를 에스컬레이션됨으로 표시","operationId":"mark_escalated_api_v1_resolution_resolutions__conversation_id__escalate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EscalationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolutionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/resolution/resolutions/{conversation_id}/feedback":{"post":{"tags":["resolution","resolution"],"summary":"Submit User Feedback","description":"사용자 피드백 제출\n\n대화 종료 후 사용자가 \"문제가 해결되었나요?\" 질문에 응답할 때 사용","operationId":"submit_user_feedback_api_v1_resolution_resolutions__conversation_id__feedback_post","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserFeedbackRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolutionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/resolution/resolutions/{conversation_id}/auto-classify":{"post":{"tags":["resolution","resolution"],"summary":"Auto Classify Resolution","description":"AI 자동 분류\n\n대화 내용을 분석하여 해결 여부를 자동으로 판단합니다.","operationId":"auto_classify_resolution_api_v1_resolution_resolutions__conversation_id__auto_classify_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolutionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/resolution/resolutions/batch-classify":{"post":{"tags":["resolution","resolution"],"summary":"Batch Classify Pending","description":"대기 중인 대화들 일괄 분류\n\n아직 분류되지 않은 대화들을 AI로 일괄 분류합니다.","operationId":"batch_classify_pending_api_v1_resolution_resolutions_batch_classify_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Character Id"}},{"name":"project_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/resolution/resolution-dashboard":{"get":{"tags":["resolution","resolution"],"summary":"Get Resolution Dashboard","description":"해결률 대시보드\n\n해결률 통계, 일별 추이, 문의 유형별 분석을 제공합니다.","operationId":"get_resolution_dashboard_api_v1_resolution_resolution_dashboard_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Character Id"}},{"name":"project_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/resolution/resolution-metrics/calculate":{"post":{"tags":["resolution","resolution"],"summary":"Calculate Metrics","description":"해결률 메트릭 계산\n\n지정된 기간의 해결률 메트릭을 계산하고 저장합니다.","operationId":"calculate_metrics_api_v1_resolution_resolution_metrics_calculate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Character Id"}},{"name":"project_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"}},{"name":"period_type","in":"query","required":false,"schema":{"type":"string","pattern":"^(daily|weekly|monthly)$","default":"daily","title":"Period Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/resolution/unresolved-inquiries":{"get":{"tags":["resolution","resolution"],"summary":"List Unresolved Inquiries","description":"미해결 문의 목록\n\nAI가 해결하지 못한 문의들을 빈도순으로 조회합니다.\n이를 통해 FAQ나 지식베이스를 개선할 수 있습니다.","operationId":"list_unresolved_inquiries_api_v1_resolution_unresolved_inquiries_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Character Id"}},{"name":"project_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","pattern":"^(open|in_progress|fixed|ignored)$","default":"open","title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/resolution/unresolved-inquiries/{inquiry_id}/resolve":{"post":{"tags":["resolution","resolution"],"summary":"Resolve Unresolved Inquiry","description":"미해결 문의 해결 처리\n\n미해결 문의에 대해 FAQ 추가, 지식 업데이트, 또는 무시 처리를 합니다.","operationId":"resolve_unresolved_inquiry_api_v1_resolution_unresolved_inquiries__inquiry_id__resolve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"inquiry_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Inquiry Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveInquiryRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/resolution/widget/resolution-feedback":{"post":{"tags":["resolution","resolution"],"summary":"Widget Resolution Feedback","description":"위젯용 해결 피드백 (인증 불필요)\n\n위젯에서 대화 종료 시 \"문제가 해결되었나요?\" 피드백을 수집합니다.","operationId":"widget_resolution_feedback_api_v1_resolution_widget_resolution_feedback_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_widget_resolution_feedback_api_v1_resolution_widget_resolution_feedback_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/resolution/resolution-comparison":{"get":{"tags":["resolution","resolution"],"summary":"Compare Resolution Rates","description":"해결률 비교\n\n이번 주 vs 지난 주, 이번 달 vs 지난 달 해결률을 비교합니다.","operationId":"compare_resolution_rates_api_v1_resolution_resolution_comparison_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Character Id"}},{"name":"project_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/knowledge-feedback/search-click":{"post":{"tags":["knowledge-feedback"],"summary":"Record Search Click","description":"검색 결과 클릭 기록\n\n사용자가 검색 결과에서 특정 지식을 클릭했을 때 호출","operationId":"record_search_click_api_v1_knowledge_feedback_search_click_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchClickRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__knowledge_feedback__FeedbackResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/knowledge-feedback/feedback":{"post":{"tags":["knowledge-feedback"],"summary":"Submit Feedback","description":"사용자 피드백 제출\n\n지식의 유용성에 대한 피드백 제출\n- helpful: 도움이 됨\n- not_helpful: 도움이 되지 않음\n- relevant: 관련 있음\n- irrelevant: 관련 없음","operationId":"submit_feedback_api_v1_knowledge_feedback_feedback_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__knowledge_feedback__FeedbackRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__knowledge_feedback__FeedbackResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/knowledge-feedback/stats/{knowledge_id}":{"get":{"tags":["knowledge-feedback"],"summary":"Get Feedback Stats","description":"지식 피드백 통계 조회\n\n특정 지식에 대한 피드백 통계 반환","operationId":"get_feedback_stats_api_v1_knowledge_feedback_stats__knowledge_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"knowledge_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Knowledge Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__knowledge_feedback__FeedbackStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/knowledge-feedback/expiring/{character_id}":{"get":{"tags":["knowledge-feedback"],"summary":"Get Expiring Knowledge","description":"곧 만료될 지식 목록 조회\n\n지정된 일수 내에 만료 예정인 지식 목록 반환","operationId":"get_expiring_knowledge_api_v1_knowledge_feedback_expiring__character_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"days_threshold","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"default":7,"title":"Days Threshold"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ExpiringKnowledgeItem"},"title":"Response Get Expiring Knowledge Api V1 Knowledge Feedback Expiring  Character Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/knowledge-feedback/expiration":{"post":{"tags":["knowledge-feedback"],"summary":"Set Knowledge Expiration","description":"지식 만료일 설정\n\n특정 지식의 만료일을 설정","operationId":"set_knowledge_expiration_api_v1_knowledge_feedback_expiration_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExpirationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__knowledge_feedback__FeedbackResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/knowledge-feedback/extend-expiration/{knowledge_id}":{"post":{"tags":["knowledge-feedback"],"summary":"Extend Knowledge Expiration","description":"지식 만료일 연장\n\n현재 만료일로부터 지정된 일수만큼 연장","operationId":"extend_knowledge_expiration_api_v1_knowledge_feedback_extend_expiration__knowledge_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"knowledge_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Knowledge Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__knowledge_feedback__FeedbackResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/knowledge-feedback/quality-update/{knowledge_id}":{"post":{"tags":["knowledge-feedback"],"summary":"Update Quality Score","description":"지식 품질 점수 수동 업데이트\n\n피드백 기반으로 품질 점수 재계산","operationId":"update_quality_score_api_v1_knowledge_feedback_quality_update__knowledge_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"knowledge_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Knowledge Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__knowledge_feedback__FeedbackResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/knowledge-version/create":{"post":{"tags":["knowledge-version"],"summary":"Create Version","description":"지식 버전 생성\n\n현재 지식 상태를 새 버전으로 저장합니다.\n- major: 메이저 변경 (v1.0.0 → v2.0.0)\n- minor: 마이너 변경 (v1.0.0 → v1.1.0)\n- patch: 패치 변경 (v1.0.0 → v1.0.1)","operationId":"create_version_api_v1_knowledge_version_create_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateVersionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OperationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/knowledge-version/history/{knowledge_id}":{"get":{"tags":["knowledge-version"],"summary":"Get Version History","description":"버전 히스토리 조회\n\n지식의 모든 버전 이력을 조회합니다.","operationId":"get_version_history_api_v1_knowledge_version_history__knowledge_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"knowledge_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Knowledge Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VersionResponse"},"title":"Response Get Version History Api V1 Knowledge Version History  Knowledge Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/knowledge-version/detail/{version_id}":{"get":{"tags":["knowledge-version"],"summary":"Get Version Detail","description":"버전 상세 조회\n\n특정 버전의 상세 정보를 조회합니다.","operationId":"get_version_detail_api_v1_knowledge_version_detail__version_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"version_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Version Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/knowledge-version/compare":{"get":{"tags":["knowledge-version"],"summary":"Compare Versions","description":"두 버전 비교\n\n두 버전 간의 차이점을 분석합니다.","operationId":"compare_versions_api_v1_knowledge_version_compare_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"version_id_1","in":"query","required":true,"schema":{"type":"string","format":"uuid","description":"첫 번째 버전 ID","title":"Version Id 1"},"description":"첫 번째 버전 ID"},{"name":"version_id_2","in":"query","required":true,"schema":{"type":"string","format":"uuid","description":"두 번째 버전 ID","title":"Version Id 2"},"description":"두 번째 버전 ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionCompareResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/knowledge-version/rollback":{"post":{"tags":["knowledge-version"],"summary":"Rollback To Version","description":"특정 버전으로 롤백\n\n지식을 이전 버전으로 되돌립니다.\n현재 상태는 자동으로 백업됩니다.","operationId":"rollback_to_version_api_v1_knowledge_version_rollback_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RollbackRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OperationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/knowledge-version/cleanup/{knowledge_id}":{"post":{"tags":["knowledge-version"],"summary":"Cleanup Old Versions","description":"오래된 버전 정리\n\n최근 N개의 버전만 유지하고 나머지는 삭제합니다.","operationId":"cleanup_old_versions_api_v1_knowledge_version_cleanup__knowledge_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"knowledge_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Knowledge Id"}},{"name":"keep_count","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"유지할 버전 수","default":10,"title":"Keep Count"},"description":"유지할 버전 수"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OperationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/knowledge-version/current/{knowledge_id}":{"get":{"tags":["knowledge-version"],"summary":"Get Current Version","description":"현재 활성 버전 조회\n\n지식의 현재 활성 버전을 조회합니다.","operationId":"get_current_version_api_v1_knowledge_version_current__knowledge_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"knowledge_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Knowledge Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/VersionResponse"},{"type":"null"}],"title":"Response Get Current Version Api V1 Knowledge Version Current  Knowledge Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/story-memories":{"post":{"tags":["story-memory"],"summary":"Create Story Memory","description":"스토리 메모리 생성\n\n에피소드에 복선, 캐릭터아크, 세계관 설정 등을 기록합니다.","operationId":"create_story_memory_api_v1_characters__character_id__story_memories_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StoryMemoryCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["story-memory"],"summary":"List Story Memories","description":"스토리 메모리 목록 조회 (GET 방식)","operationId":"list_story_memories_api_v1_characters__character_id__story_memories_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"episode_start","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"시작 에피소드","title":"Episode Start"},"description":"시작 에피소드"},{"name":"episode_end","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"끝 에피소드","title":"Episode End"},"description":"끝 에피소드"},{"name":"narrative_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/NarrativeTypeEnum"},{"type":"null"}],"description":"서사 유형","title":"Narrative Type"},"description":"서사 유형"},{"name":"callback_status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/CallbackStatusEnum"},{"type":"null"}],"description":"복선 회수 상태","title":"Callback Status"},"description":"복선 회수 상태"},{"name":"pending_only","in":"query","required":false,"schema":{"type":"boolean","description":"미회수 복선만","default":false,"title":"Pending Only"},"description":"미회수 복선만"},{"name":"query","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"검색어","title":"Query"},"description":"검색어"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"정렬 기준","default":"episode_number","title":"Sort By"},"description":"정렬 기준"},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","description":"정렬 순서","default":"desc","title":"Sort Order"},"description":"정렬 순서"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/story-memories/statistics":{"get":{"tags":["story-memory"],"summary":"Get Story Memories Statistics","description":"스토리 통계 조회 (story-memories 하위 경로)","operationId":"get_story_memories_statistics_api_v1_characters__character_id__story_memories_statistics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StoryStatistics"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/story-memories/{memory_id}":{"get":{"tags":["story-memory"],"summary":"Get Story Memory","description":"스토리 메모리 상세 조회","operationId":"get_story_memory_api_v1_characters__character_id__story_memories__memory_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["story-memory"],"summary":"Update Story Memory","description":"스토리 메모리 수정","operationId":"update_story_memory_api_v1_characters__character_id__story_memories__memory_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StoryMemoryUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["story-memory"],"summary":"Delete Story Memory","description":"스토리 메모리 삭제","operationId":"delete_story_memory_api_v1_characters__character_id__story_memories__memory_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/story-memories/search":{"post":{"tags":["story-memory"],"summary":"Search Story Memories","description":"스토리 메모리 검색\n\n다양한 필터와 정렬 옵션으로 검색합니다:\n- 에피소드 범위\n- 서사 유형 (복선, 반전, 캐릭터아크 등)\n- 복선 회수 상태\n- 키워드/태그\n- 자연어 검색","operationId":"search_story_memories_api_v1_characters__character_id__story_memories_search_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorySearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/story-memories/pending":{"post":{"tags":["story-memory"],"summary":"Get Pending Callbacks","description":"미회수 복선 조회\n\n현재 에피소드 기준으로 아직 회수하지 않은 복선들을 보여줍니다.\n작가가 30화를 쓸 때 \"1화에서 심은 떡밥을 상기시켜줘\"와 같은 요청에 응답합니다.","operationId":"get_pending_callbacks_api_v1_characters__character_id__story_memories_pending_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingCallbacksRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PendingCallbacksResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/story-memories/context/{episode_number}":{"get":{"tags":["story-memory"],"summary":"Get Episode Context","description":"에피소드 작성 컨텍스트 조회\n\n특정 에피소드를 작성할 때 필요한 모든 컨텍스트를 제공합니다:\n- 최근 에피소드 요약\n- 미회수 복선 목록\n- 활성 캐릭터 목록\n- 미해결 갈등\n- 세계관 설정","operationId":"get_episode_context_api_v1_characters__character_id__story_memories_context__episode_number__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"episode_number","in":"path","required":true,"schema":{"type":"integer","title":"Episode Number"}},{"name":"context_range","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"description":"몇 화 전까지 볼지","default":5,"title":"Context Range"},"description":"몇 화 전까지 볼지"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/story-memories/bulk":{"post":{"tags":["story-memory"],"summary":"Bulk Import Memories","description":"스토리 메모리 대량 입력\n\n여러 개의 스토리 메모리를 한 번에 입력합니다.\n최대 100개까지 가능합니다.","operationId":"bulk_import_memories_api_v1_characters__character_id__story_memories_bulk_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkImportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkImportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/story-arcs":{"post":{"tags":["story-memory"],"summary":"Create Story Arc","description":"스토리 아크 생성\n\n에피소드들을 묶는 큰 단위입니다. (예: \"1부: 각성편\")","operationId":"create_story_arc_api_v1_characters__character_id__story_arcs_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StoryArcCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["story-memory"],"summary":"List Story Arcs","description":"스토리 아크 목록 조회","operationId":"list_story_arcs_api_v1_characters__character_id__story_arcs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/story-callbacks":{"post":{"tags":["story-memory"],"summary":"Record Callback","description":"복선 회수 기록\n\n어떤 복선이 어느 에피소드에서 회수되었는지 기록합니다.","operationId":"record_callback_api_v1_characters__character_id__story_callbacks_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StoryCallbackCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/story-statistics":{"get":{"tags":["story-memory"],"summary":"Get Story Statistics","description":"스토리 통계 조회\n\n전체 에피소드, 메모리 수, 복선 현황 등을 보여줍니다.","operationId":"get_story_statistics_api_v1_characters__character_id__story_statistics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StoryStatistics"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/story-memories/analyze":{"post":{"tags":["story-memory"],"summary":"Analyze Narrative","description":"AI 서사 분석\n\n텍스트를 분석하여 서사 유형, 중요도, 키워드 등을 자동으로 추출합니다.","operationId":"analyze_narrative_api_v1_characters__character_id__story_memories_analyze_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NarrativeAnalysisRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NarrativeAnalysisResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/story-memories/analyze-episode":{"post":{"tags":["story-memory"],"summary":"Analyze Full Episode","description":"에피소드 전체 텍스트 AI 분석\n\n에피소드 전체 텍스트를 넣으면 AI가 모든 서사 요소를 자동으로 추출합니다:\n- 복선/떡밥\n- 캐릭터 정보\n- 세계관 설정\n- 관계 변화\n- 미해결 갈등","operationId":"analyze_full_episode_api_v1_characters__character_id__story_memories_analyze_episode_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FullEpisodeAnalysisRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FullEpisodeAnalysisResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/story-memories/import-file":{"post":{"tags":["story-memory"],"summary":"Import From File","description":"CSV/JSON 파일에서 스토리 메모리 가져오기\n\n지원 형식:\n- JSON: [{\"episode_number\": 1, \"narrative_type\": \"foreshadowing\", \"title\": \"...\", \"content\": \"...\"}]\n- CSV: episode_number,narrative_type,title,content,importance_score,keywords\n\nCSV 예시:\n```\nepisode_number,narrative_type,title,content,importance_score\n1,foreshadowing,숨겨진 비밀,주인공이 나중에 알게 될 비밀,0.8\n2,character_arc,성장의 시작,첫 번째 시련을 겪음,0.6\n```","operationId":"import_from_file_api_v1_characters__character_id__story_memories_import_file_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_import_from_file_api_v1_characters__character_id__story_memories_import_file_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileImportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/story-memories/semantic-search":{"post":{"tags":["story-memory"],"summary":"Semantic Search Memories","description":"시맨틱 검색 (RAG 기반 벡터 검색)\n\n키워드가 아닌 의미 기반으로 관련 메모리를 검색합니다.\n\n- 유사한 내용, 주제, 맥락을 가진 메모리를 찾습니다\n- 현재 작성 중인 내용과 관련된 과거 설정을 검색합니다\n- 복합 점수(유사도 + 중요도 + 최신성)로 정렬됩니다\n\n예시:\n- \"주인공이 칼을 찾는 장면\" → 칼 관련 모든 설정/복선 검색\n- \"숲 속 마을\" → 숲, 마을, 자연 관련 세계관 설정 검색","operationId":"semantic_search_memories_api_v1_characters__character_id__story_memories_semantic_search_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SemanticSearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SemanticSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/story-memories/related-callbacks":{"post":{"tags":["story-memory"],"summary":"Get Related Callbacks","description":"현재 내용과 관련된 미회수 복선 검색\n\n작성 중인 내용과 연관된 미회수 복선을 찾아서\n\"이 복선을 지금 회수할 수 있어요!\" 제안합니다.\n\n예시:\n- \"주인공이 동굴에 들어갔다\" 작성 중\n- → \"1화에서 동굴에 숨겨진 보물 언급\" 복선 추천\n- → \"5화에서 동굴 입구의 비밀 문양\" 복선 추천","operationId":"get_related_callbacks_api_v1_characters__character_id__story_memories_related_callbacks_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelatedCallbacksRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelatedCallbacksResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/story-memories/context-optimized":{"post":{"tags":["story-memory"],"summary":"Get Optimized Context","description":"최적화된 에피소드 컨텍스트 검색 (RAG 기반)\n\n전체 메모리를 로드하지 않고, 현재 작성 중인 내용과\n관련된 메모리만 벡터 검색으로 찾습니다.\n\n장점:\n- 메모리가 수천 개여도 빠른 검색 (~100ms)\n- 관련 없는 정보 제외 (LLM 컨텍스트 절약)\n- 관련 복선 자동 추천\n\n반환 데이터:\n- relevant_memories: 현재 내용과 관련된 메모리\n- pending_callbacks: 회수 가능한 복선\n- world_building: 관련 세계관 설정","operationId":"get_optimized_context_api_v1_characters__character_id__story_memories_context_optimized_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptimizedContextRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptimizedContextResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/characters/{character_id}/story-memories/summarize":{"post":{"tags":["story-memory"],"summary":"Summarize Content","description":"긴 콘텐츠 자동 요약\n\n긴 텍스트를 AI가 자동으로 요약합니다.\n핵심 인물, 장소, 사건, 복선 등을 보존합니다.","operationId":"summarize_content_api_v1_characters__character_id__story_memories_summarize_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SummarizeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/personal-memory":{"get":{"tags":["personal-memory"],"summary":"List Personal Memory","operationId":"list_personal_memory_api_v1_personal_memory_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/personal-memory/{character_id}/{field}":{"patch":{"tags":["personal-memory"],"summary":"Edit Personal Memory","operationId":"edit_personal_memory_api_v1_personal_memory__character_id___field__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"field","in":"path","required":true,"schema":{"type":"string","title":"Field"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryChange"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["personal-memory"],"summary":"Delete Personal Memory","operationId":"delete_personal_memory_api_v1_personal_memory__character_id___field__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Character Id"}},{"name":"field","in":"path","required":true,"schema":{"type":"string","title":"Field"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryDelete"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ws/status":{"get":{"summary":"Websocket Status","description":"WebSocket 서비스 상태 조회","operationId":"websocket_status_api_v1_ws_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/ws/broadcast/{session_id}":{"post":{"summary":"Broadcast Message To Session","description":"특정 세션에 메시지 브로드캐스트 (관리자용)\n\nArgs:\n    session_id: 대상 세션 ID\n    message: 브로드캐스트할 메시지\n    current_user: 현재 사용자 (관리자 권한 필요)","operationId":"broadcast_message_to_session_api_v1_ws_broadcast__session_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Message"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ws/notify/{user_id}":{"post":{"summary":"Send Notification To User","description":"특정 사용자에게 알림 전송\n\nArgs:\n    user_id: 대상 사용자 ID\n    notification: 알림 데이터\n    current_user: 현재 사용자","operationId":"send_notification_to_user_api_v1_ws_notify__user_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Notification"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/celery-metrics":{"get":{"tags":["monitoring"],"summary":"Celery Metrics","description":"Prometheus-compatible Celery metrics endpoint\n\nProvides:\n- celery_workers_active: Number of active workers\n- celery_tasks_total: Total tasks processed\n- celery_tasks_active: Currently running tasks\n- celery_tasks_reserved: Reserved tasks","operationId":"celery_metrics_celery_metrics_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/":{"get":{"summary":"Root","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"summary":"Liveness","operationId":"liveness_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health/ready":{"get":{"summary":"Readiness","operationId":"readiness_health_ready_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/health/config":{"get":{"summary":"Config Status","description":"Reports which production-critical credentials are configured.\n\nOperators check this in the Phase-1 launch readiness flow to confirm\nStripe/SMTP/Sentry/Cloudflare are all wired before opening signup.\n\nReturns the boolean *presence* of each env var (no secret values),\nso this endpoint is safe to expose to admins or in staging.","operationId":"config_status_api_v1_health_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/readiness":{"get":{"summary":"Readiness Check","description":"Kubernetes readiness probe - 서비스가 트래픽을 받을 준비가 되었는지 확인\nDB 연결 등 핵심 의존성 확인","operationId":"readiness_check_readiness_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/liveness":{"get":{"summary":"Liveness Check","description":"Kubernetes liveness probe - 서비스가 살아있는지 확인\n기본적인 애플리케이션 상태만 확인","operationId":"liveness_check_liveness_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"AIModelInfo":{"properties":{"key":{"type":"string","title":"Key"},"name":{"type":"string","title":"Name"},"provider":{"type":"string","title":"Provider"},"model_id":{"type":"string","title":"Model Id"},"cost_per_1k_tokens":{"type":"number","title":"Cost Per 1K Tokens"},"max_tokens":{"type":"integer","title":"Max Tokens"},"context_window":{"type":"integer","title":"Context Window"},"specialties":{"items":{"type":"string"},"type":"array","title":"Specialties"},"is_default":{"type":"boolean","title":"Is Default","default":false}},"type":"object","required":["key","name","provider","model_id","cost_per_1k_tokens","max_tokens","context_window","specialties"],"title":"AIModelInfo","description":"AI 모델 정보"},"AIModelPricingCreate":{"properties":{"model_name":{"type":"string","title":"Model Name","description":"Model identifier (e.g., 'gpt-4')"},"display_name":{"type":"string","title":"Display Name","description":"Display name"},"provider":{"type":"string","title":"Provider","description":"Provider (e.g., 'openai', 'anthropic')"},"cost_per_1k_input_tokens":{"type":"number","title":"Cost Per 1K Input Tokens","description":"Cost per 1K input tokens in KRW","default":0.0},"cost_per_1k_output_tokens":{"type":"number","title":"Cost Per 1K Output Tokens","description":"Cost per 1K output tokens in KRW","default":0.0},"cost_per_request":{"type":"number","title":"Cost Per Request","description":"Fixed cost per request in KRW","default":0.0},"credits_per_1k_input":{"type":"integer","title":"Credits Per 1K Input","description":"Credits per 1K input tokens","default":1},"credits_per_1k_output":{"type":"integer","title":"Credits Per 1K Output","description":"Credits per 1K output tokens","default":1},"credits_per_request":{"type":"integer","title":"Credits Per Request","description":"Credits per request","default":1},"pricing_multiplier":{"type":"number","title":"Pricing Multiplier","description":"Pricing multiplier (e.g., 1.0, 0.3, 2.0)","default":1.0},"is_active":{"type":"boolean","title":"Is Active","description":"Whether model is active","default":true},"is_premium":{"type":"boolean","title":"Is Premium","description":"Whether model is premium","default":false},"max_tokens":{"type":"integer","title":"Max Tokens","description":"Maximum tokens per request","default":4096}},"type":"object","required":["model_name","display_name","provider"],"title":"AIModelPricingCreate"},"AIModelPricingResponse":{"properties":{"model_name":{"type":"string","title":"Model Name","description":"Model identifier (e.g., 'gpt-4')"},"display_name":{"type":"string","title":"Display Name","description":"Display name"},"provider":{"type":"string","title":"Provider","description":"Provider (e.g., 'openai', 'anthropic')"},"cost_per_1k_input_tokens":{"type":"number","title":"Cost Per 1K Input Tokens","description":"Cost per 1K input tokens in KRW","default":0.0},"cost_per_1k_output_tokens":{"type":"number","title":"Cost Per 1K Output Tokens","description":"Cost per 1K output tokens in KRW","default":0.0},"cost_per_request":{"type":"number","title":"Cost Per Request","description":"Fixed cost per request in KRW","default":0.0},"credits_per_1k_input":{"type":"integer","title":"Credits Per 1K Input","description":"Credits per 1K input tokens","default":1},"credits_per_1k_output":{"type":"integer","title":"Credits Per 1K Output","description":"Credits per 1K output tokens","default":1},"credits_per_request":{"type":"integer","title":"Credits Per Request","description":"Credits per request","default":1},"pricing_multiplier":{"type":"number","title":"Pricing Multiplier","description":"Pricing multiplier (e.g., 1.0, 0.3, 2.0)","default":1.0},"is_active":{"type":"boolean","title":"Is Active","description":"Whether model is active","default":true},"is_premium":{"type":"boolean","title":"Is Premium","description":"Whether model is premium","default":false},"max_tokens":{"type":"integer","title":"Max Tokens","description":"Maximum tokens per request","default":4096},"id":{"type":"string","title":"Id"},"effective_cost":{"additionalProperties":{"type":"number"},"type":"object","title":"Effective Cost"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["model_name","display_name","provider","id","effective_cost","created_at","updated_at"],"title":"AIModelPricingResponse"},"AIModelPricingUpdate":{"properties":{"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"},"cost_per_1k_input_tokens":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cost Per 1K Input Tokens"},"cost_per_1k_output_tokens":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cost Per 1K Output Tokens"},"cost_per_request":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cost Per Request"},"credits_per_1k_input":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Credits Per 1K Input"},"credits_per_1k_output":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Credits Per 1K Output"},"credits_per_request":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Credits Per Request"},"pricing_multiplier":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Pricing Multiplier"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"is_premium":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Premium"},"max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Tokens"}},"type":"object","title":"AIModelPricingUpdate"},"AISettingsResponse":{"properties":{"default_model_key":{"type":"string","title":"Default Model Key"},"default_model_name":{"type":"string","title":"Default Model Name"},"available_models":{"items":{"$ref":"#/components/schemas/AIModelInfo"},"type":"array","title":"Available Models"},"total_requests":{"type":"integer","title":"Total Requests"},"total_cost":{"type":"number","title":"Total Cost"},"provider_usage":{"additionalProperties":true,"type":"object","title":"Provider Usage"}},"type":"object","required":["default_model_key","default_model_name","available_models","total_requests","total_cost","provider_usage"],"title":"AISettingsResponse","description":"AI 설정 응답"},"AIUsageAnalyticsResponse":{"properties":{"summary":{"additionalProperties":true,"type":"object","title":"Summary"},"provider_breakdown":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Provider Breakdown"},"model_breakdown":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Model Breakdown"},"time_series":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Time Series"},"error_breakdown":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Error Breakdown"}},"type":"object","required":["summary","provider_breakdown","model_breakdown","time_series","error_breakdown"],"title":"AIUsageAnalyticsResponse"},"APIErrorLogRequest":{"properties":{"method":{"type":"string","title":"Method"},"path":{"type":"string","title":"Path"},"status_code":{"type":"integer","title":"Status Code"},"error_message":{"type":"string","title":"Error Message"},"duration_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration Ms"},"timestamp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timestamp"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"user_agent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Agent"}},"type":"object","required":["method","path","status_code","error_message"],"title":"APIErrorLogRequest"},"APIKeyCreate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"API 키 이름"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes","description":"API 키 권한 스코프 목록","default":["read","chat"]},"quota_daily":{"type":"integer","title":"Quota Daily","default":1000},"quota_monthly":{"type":"integer","title":"Quota Monthly","default":10000},"expires_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expires Days","description":"API 키 만료일 (일 단위)","default":365},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"API 키 용도 설명"}},"type":"object","title":"APIKeyCreate"},"APIKeyCreateRequest":{"properties":{"key_name":{"type":"string","maxLength":100,"minLength":1,"title":"Key Name"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"},"allowed_scopes":{"items":{"type":"string"},"type":"array","title":"Allowed Scopes","default":["chat_only"]},"allowed_characters":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Allowed Characters","description":"허용된 캐릭터 ID 목록"},"rate_limit_per_minute":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Rate Limit Per Minute","default":60},"rate_limit_per_hour":{"type":"integer","maximum":50000.0,"minimum":10.0,"title":"Rate Limit Per Hour","default":1000},"rate_limit_per_day":{"type":"integer","maximum":500000.0,"minimum":100.0,"title":"Rate Limit Per Day","default":10000},"allowed_ips":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Ips"},"allowed_domains":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Domains"},"allowed_origins":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Origins"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"require_https":{"type":"boolean","title":"Require Https","default":true},"require_user_validation":{"type":"boolean","title":"Require User Validation","default":false},"max_concurrent_users":{"type":"integer","maximum":100000.0,"minimum":1.0,"title":"Max Concurrent Users","default":1000},"external_service_info":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"External Service Info"}},"type":"object","required":["key_name"],"title":"APIKeyCreateRequest"},"APIKeyUsageStats":{"properties":{"total_requests":{"type":"integer","title":"Total Requests"},"requests_today":{"type":"integer","title":"Requests Today"},"requests_this_hour":{"type":"integer","title":"Requests This Hour"},"unique_users_today":{"type":"integer","title":"Unique Users Today"},"avg_response_time_ms":{"type":"number","title":"Avg Response Time Ms"},"error_rate":{"type":"number","title":"Error Rate"}},"type":"object","required":["total_requests","requests_today","requests_this_hour","unique_users_today","avg_response_time_ms","error_rate"],"title":"APIKeyUsageStats"},"APIResponse":{"properties":{"status":{"type":"string","title":"Status","description":"응답 상태 (success/error)"},"data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data","description":"응답 데이터"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"메시지"},"error_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Code","description":"에러 코드"}},"type":"object","required":["status"],"title":"APIResponse","description":"표준 API 응답"},"AddCharacterRequest":{"properties":{"character_id":{"type":"string","format":"uuid","title":"Character Id"},"is_primary":{"type":"boolean","title":"Is Primary","default":false},"display_order":{"type":"integer","title":"Display Order","default":0}},"type":"object","required":["character_id"],"title":"AddCharacterRequest"},"AddTextKnowledgeRequest":{"properties":{"title":{"type":"string","title":"Title"},"content":{"type":"string","title":"Content"},"content_type":{"type":"string","title":"Content Type","default":"document"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"}},"type":"object","required":["title","content"],"title":"AddTextKnowledgeRequest"},"AdminCharacterCreateRequest":{"properties":{"payload":{"$ref":"#/components/schemas/CharacterCreate"},"target_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Target User Id"},"skip_moderation":{"type":"boolean","title":"Skip Moderation","default":false},"skip_copyright_filter":{"type":"boolean","title":"Skip Copyright Filter","default":false},"is_public":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Public"},"is_featured":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Featured"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","required":["payload"],"title":"AdminCharacterCreateRequest","description":"슈퍼유저 전용 캐릭터 생성 요청.\n\n공개 엔드포인트와 달리:\n  - target_user_id로 임의 유저 명의의 캐릭터 생성 가능 (시드/임포트 용)\n  - skip_moderation / skip_copyright_filter로 정책 우회 가능 (감사 기록됨)\n  - is_public / is_featured를 생성 시점에 설정 가능"},"AdminPromptHistoryResponse":{"properties":{"id":{"type":"string","format":"uuid4","title":"Id"},"version":{"type":"integer","title":"Version"},"system_prompt":{"type":"string","title":"System Prompt"},"user_prompt_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Prompt Template"},"changed_at":{"type":"string","title":"Changed At"},"change_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Change Reason"}},"type":"object","required":["id","version","system_prompt","user_prompt_template","changed_at","change_reason"],"title":"AdminPromptHistoryResponse"},"AdminPromptTemplateResponse":{"properties":{"id":{"type":"string","format":"uuid4","title":"Id"},"category":{"type":"string","title":"Category"},"name":{"type":"string","title":"Name"},"version":{"type":"integer","title":"Version"},"is_active":{"type":"boolean","title":"Is Active"},"system_prompt":{"type":"string","title":"System Prompt"},"user_prompt_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Prompt Template"},"variables":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Variables"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"temperature":{"type":"number","title":"Temperature"},"max_tokens":{"type":"integer","title":"Max Tokens"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["id","category","name","version","is_active","system_prompt","user_prompt_template","variables","description","model","temperature","max_tokens","created_at","updated_at"],"title":"AdminPromptTemplateResponse"},"AdminResponseRequest":{"properties":{"response":{"type":"string","maxLength":5000,"minLength":1,"title":"Response"},"status":{"type":"string","title":"Status","default":"resolved"},"send_email":{"type":"boolean","title":"Send Email","default":true}},"type":"object","required":["response"],"title":"AdminResponseRequest","description":"관리자 답변 요청"},"AdminRoleCreate":{"properties":{"code":{"type":"string","maxLength":50,"minLength":2,"title":"Code"},"name":{"type":"string","maxLength":100,"minLength":2,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"role_type":{"$ref":"#/components/schemas/AdminRoleType","default":"support_admin"},"permission_level":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Permission Level","default":0},"menu_permissions":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Menu Permissions"},"api_permissions":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Api Permissions"},"feature_permissions":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Feature Permissions"}},"type":"object","required":["code","name"],"title":"AdminRoleCreate"},"AdminRoleType":{"type":"string","enum":["super_admin","platform_admin","support_admin","content_admin","billing_admin","analytics_admin"],"title":"AdminRoleType","description":"플랫폼 관리자 역할 타입"},"AdminRoleUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"permission_level":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Permission Level"},"menu_permissions":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Menu Permissions"},"api_permissions":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Api Permissions"},"feature_permissions":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Feature Permissions"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"AdminRoleUpdate"},"AdvancedLearnRequest":{"properties":{"character_id":{"type":"string","format":"uuid","title":"Character Id"},"website_url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Website Url"},"max_pages":{"anyOf":[{"type":"integer","maximum":500.0,"minimum":1.0},{"type":"null"}],"title":"Max Pages","description":"최대 페이지 수","default":50},"max_depth":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"Max Depth","description":"크롤링 깊이","default":3},"exclude_patterns":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Exclude Patterns","description":"제외할 URL 패턴"},"ai_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Model","description":"사용할 AI 모델","default":"gpt-3.5-turbo"},"response_tone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Tone","description":"응답 톤 (friendly, professional, casual)","default":"friendly"},"max_response_length":{"anyOf":[{"type":"integer","maximum":2000.0,"minimum":100.0},{"type":"null"}],"title":"Max Response Length","description":"최대 응답 길이","default":500},"widget_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Widget Color","description":"위젯 색상 (Hex)","default":"#4F46E5"},"widget_position":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Widget Position","description":"위젯 위치","default":"bottom-right"},"welcome_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Welcome Message","description":"환영 메시지","default":"안녕하세요! 무엇을 도와드릤까요?"}},"type":"object","required":["character_id","website_url"],"title":"AdvancedLearnRequest","description":"고급 설정 학습 요청"},"AgentReplyRequest":{"properties":{"conversation_id":{"type":"string","format":"uuid","title":"Conversation Id"},"text":{"type":"string","title":"Text"},"agent_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Name"}},"type":"object","required":["conversation_id","text"],"title":"AgentReplyRequest"},"AgentReplyResponse":{"properties":{"message_id":{"type":"string","format":"uuid","title":"Message Id"},"pushed_at":{"type":"string","format":"date-time","title":"Pushed At"}},"type":"object","required":["message_id","pushed_at"],"title":"AgentReplyResponse"},"AlertCreate":{"properties":{"api_key_id":{"type":"string","title":"Api Key Id","description":"API 키 ID"},"alert_type":{"type":"string","title":"Alert Type","description":"알림 타입 (usage_warning, quota_exceeded, cost_threshold)"},"threshold_value":{"type":"number","exclusiveMinimum":0.0,"title":"Threshold Value","description":"임계값"},"threshold_type":{"type":"string","title":"Threshold Type","description":"임계값 타입 (percentage, absolute)","default":"percentage"},"email_enabled":{"type":"boolean","title":"Email Enabled","description":"이메일 알림 활성화","default":true},"webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url","description":"웹훅 URL"}},"type":"object","required":["api_key_id","alert_type","threshold_value"],"title":"AlertCreate"},"AlertResponse":{"properties":{"id":{"type":"string","title":"Id"},"api_key_id":{"type":"string","title":"Api Key Id"},"alert_type":{"type":"string","title":"Alert Type"},"threshold_value":{"type":"number","title":"Threshold Value"},"threshold_type":{"type":"string","title":"Threshold Type"},"is_active":{"type":"boolean","title":"Is Active"},"email_enabled":{"type":"boolean","title":"Email Enabled"},"webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url"},"last_triggered_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Triggered At"},"trigger_count":{"type":"integer","title":"Trigger Count"}},"type":"object","required":["id","api_key_id","alert_type","threshold_value","threshold_type","is_active","email_enabled","webhook_url","last_triggered_at","trigger_count"],"title":"AlertResponse"},"AlertRuleCreate":{"properties":{"name":{"type":"string","title":"Name","description":"규칙 이름"},"condition":{"type":"string","title":"Condition","description":"알림 조건 (예: cpu_usage > 80)"},"severity":{"type":"string","pattern":"^(low|medium|high|critical)$","title":"Severity","description":"심각도","default":"medium"},"enabled":{"type":"boolean","title":"Enabled","description":"활성화 여부","default":true},"notification_channels":{"items":{"type":"string"},"type":"array","title":"Notification Channels","description":"알림 채널 목록","default":[]},"cooldown_minutes":{"type":"integer","title":"Cooldown Minutes","description":"알림 쿨다운 시간(분)","default":15},"description":{"type":"string","title":"Description","description":"규칙 설명","default":""}},"type":"object","required":["name","condition"],"title":"AlertRuleCreate","description":"알림 규칙 생성 모델"},"AlertRuleUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"condition":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Condition"},"severity":{"anyOf":[{"type":"string","pattern":"^(low|medium|high|critical)$"},{"type":"null"}],"title":"Severity"},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"},"notification_channels":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Notification Channels"},"cooldown_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cooldown Minutes"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","title":"AlertRuleUpdate","description":"알림 규칙 수정 모델"},"AlertUpdate":{"properties":{"threshold_value":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Threshold Value","description":"임계값"},"threshold_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Threshold Type","description":"임계값 타입"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active","description":"알림 활성화 상태"},"email_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Email Enabled","description":"이메일 알림 활성화"},"webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url","description":"웹훅 URL"}},"type":"object","title":"AlertUpdate"},"AnalyticsRequest":{"properties":{"start_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date","description":"시작 날짜"},"end_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date","description":"종료 날짜"},"metrics":{"items":{"type":"string"},"type":"array","title":"Metrics","description":"분석할 메트릭 목록"},"granularity":{"type":"string","title":"Granularity","description":"시간 단위","default":"daily"},"user_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"User Ids","description":"필터할 사용자 ID"},"plan_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Plan Types","description":"필터할 플랜 타입"},"api_key_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Api Key Ids","description":"필터할 API 키 ID"}},"type":"object","required":["metrics"],"title":"AnalyticsRequest"},"AnnouncementResponse":{"properties":{"id":{"type":"string","title":"Id"},"character_id":{"type":"string","title":"Character Id"},"title":{"type":"string","title":"Title"},"content":{"type":"string","title":"Content"},"announcement_type":{"type":"string","title":"Announcement Type"},"priority":{"type":"string","title":"Priority"},"is_active":{"type":"boolean","title":"Is Active"},"is_popup":{"type":"boolean","title":"Is Popup"},"show_in_chat":{"type":"boolean","title":"Show In Chat"},"view_count":{"type":"integer","title":"View Count"},"click_count":{"type":"integer","title":"Click Count"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"start_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"},"end_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"},"style_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Style Config"},"creator_name":{"type":"string","title":"Creator Name"}},"type":"object","required":["id","character_id","title","content","announcement_type","priority","is_active","is_popup","show_in_chat","view_count","click_count","created_at","start_date","end_date","style_config","creator_name"],"title":"AnnouncementResponse"},"AutoRechargeSettingsUpdate":{"properties":{"trigger_threshold":{"type":"number","maximum":100.0,"minimum":1.0,"title":"Trigger Threshold","description":"자동 충전 임계값 ($)","default":10.0},"recharge_amount":{"type":"number","maximum":1000.0,"minimum":5.0,"title":"Recharge Amount","description":"충전 금액 ($)","default":50.0},"max_monthly_recharge":{"type":"number","maximum":10000.0,"minimum":10.0,"title":"Max Monthly Recharge","description":"월 최대 충전액 ($)","default":500.0},"payment_method_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Method Id","description":"Stripe Payment Method ID"}},"type":"object","title":"AutoRechargeSettingsUpdate","description":"자동 충전 설정 업데이트 요청"},"BackupCodesResponse":{"properties":{"backup_codes":{"items":{"type":"string"},"type":"array","title":"Backup Codes"},"message":{"type":"string","title":"Message"}},"type":"object","required":["backup_codes","message"],"title":"BackupCodesResponse","description":"백업 코드 응답"},"BackupCreate":{"properties":{"backup_type":{"type":"string","pattern":"^(full|incremental)$","title":"Backup Type","description":"백업 타입","default":"full"},"description":{"type":"string","title":"Description","description":"백업 설명","default":""},"include_files":{"type":"boolean","title":"Include Files","description":"파일 포함 여부","default":true},"tables":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tables","description":"백업할 테이블 목록"}},"type":"object","title":"BackupCreate"},"BannerCreate":{"properties":{"title":{"type":"string","title":"Title"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"link_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link Url"},"position":{"type":"string","title":"Position","default":"top"},"is_active":{"type":"boolean","title":"Is Active","default":true},"start_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"},"end_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}},"type":"object","required":["title"],"title":"BannerCreate"},"BannerUpdate":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"link_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link Url"},"position":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Position"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"start_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"},"end_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}},"type":"object","title":"BannerUpdate"},"BatchJobRequest":{"properties":{"job_type":{"type":"string","title":"Job Type"},"params":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Params"}},"type":"object","required":["job_type"],"title":"BatchJobRequest","description":"배치 작업 실행 요청"},"BatchTTSRequest":{"properties":{"texts":{"items":{"type":"string"},"type":"array","maxItems":10,"title":"Texts","description":"변환할 텍스트 목록"},"voice_config":{"additionalProperties":true,"type":"object","title":"Voice Config","description":"음성 설정"}},"type":"object","required":["texts","voice_config"],"title":"BatchTTSRequest"},"BenchmarkTestRequest":{"properties":{"category":{"type":"string","title":"Category"},"tests":{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array","title":"Tests"}},"type":"object","required":["category","tests"],"title":"BenchmarkTestRequest"},"BillingCycle":{"type":"string","enum":["monthly","yearly","one_time"],"title":"BillingCycle"},"Body_add_structured_data_knowledge_api_v1_characters__character_id__knowledge_structured_data_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_add_structured_data_knowledge_api_v1_characters__character_id__knowledge_structured_data_post"},"Body_apply_optimized_prompt_api_v1_admin_presets_presets__preset_id__apply_optimized_prompt_put":{"properties":{"optimized_prompt":{"type":"string","title":"Optimized Prompt"}},"type":"object","required":["optimized_prompt"],"title":"Body_apply_optimized_prompt_api_v1_admin_presets_presets__preset_id__apply_optimized_prompt_put"},"Body_batch_upload_knowledge_files_api_v1_characters__character_id__knowledge_batch_upload_post":{"properties":{"files":{"items":{"type":"string","contentMediaType":"application/octet-stream"},"type":"array","title":"Files"}},"type":"object","required":["files"],"title":"Body_batch_upload_knowledge_files_api_v1_characters__character_id__knowledge_batch_upload_post"},"Body_bulk_delete_faqs_api_v1_faq_faqs_bulk_delete_delete":{"properties":{"faq_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Faq Ids"}},"type":"object","required":["faq_ids"],"title":"Body_bulk_delete_faqs_api_v1_faq_faqs_bulk_delete_delete"},"Body_bulk_publish_faqs_api_v1_faq_faqs_bulk_publish_post":{"properties":{"faq_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Faq Ids"}},"type":"object","required":["faq_ids"],"title":"Body_bulk_publish_faqs_api_v1_faq_faqs_bulk_publish_post"},"Body_bulk_upload_characters_api_v1_characters_bulk_upload_post":{"properties":{"characters_data":{"type":"string","title":"Characters Data"},"archive_file":{"type":"string","contentMediaType":"application/octet-stream","title":"Archive File"}},"type":"object","required":["characters_data","archive_file"],"title":"Body_bulk_upload_characters_api_v1_characters_bulk_upload_post"},"Body_convert_speech_to_text_api_v1_voice_speech_to_text_post":{"properties":{"audio_file":{"type":"string","contentMediaType":"application/octet-stream","title":"Audio File","description":"음성 파일"},"language":{"type":"string","title":"Language","description":"언어 코드","default":"ko"}},"type":"object","required":["audio_file"],"title":"Body_convert_speech_to_text_api_v1_voice_speech_to_text_post"},"Body_generate_faqs_from_content_api_v1_faq_faqs_generate_from_content_post":{"properties":{"content":{"type":"string","minLength":100,"title":"Content"},"character_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Character Id"},"project_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"},"max_faqs":{"type":"integer","maximum":20.0,"minimum":1.0,"title":"Max Faqs","default":10},"categories":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Categories"},"language":{"type":"string","title":"Language","default":"ko"}},"type":"object","required":["content"],"title":"Body_generate_faqs_from_content_api_v1_faq_faqs_generate_from_content_post"},"Body_import_from_file_api_v1_characters__character_id__story_memories_import_file_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_import_from_file_api_v1_characters__character_id__story_memories_import_file_post"},"Body_mark_resolved_api_v1_resolution_resolutions__conversation_id__resolve_post":{"properties":{"resolution_method":{"type":"string","title":"Resolution Method","default":"direct_answer"},"faq_used_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Faq Used Id"}},"type":"object","title":"Body_mark_resolved_api_v1_resolution_resolutions__conversation_id__resolve_post"},"Body_signin_api_v1_auth_signin_post":{"properties":{"grant_type":{"anyOf":[{"type":"string","pattern":"^password$"},{"type":"null"}],"title":"Grant Type"},"username":{"type":"string","title":"Username"},"password":{"type":"string","format":"password","title":"Password"},"scope":{"type":"string","title":"Scope","default":""},"client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Id"},"client_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"format":"password","title":"Client Secret"}},"type":"object","required":["username","password"],"title":"Body_signin_api_v1_auth_signin_post"},"Body_train_lora_api_v1_characters__character_id__lora_train_post":{"properties":{"seed_image":{"type":"string","contentMediaType":"application/octet-stream","title":"Seed Image","description":"학습할 캐릭터 1장 (PNG/JPG)"},"target_variations":{"type":"integer","maximum":60.0,"minimum":10.0,"title":"Target Variations","default":30},"base_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Base Model"}},"type":"object","required":["seed_image"],"title":"Body_train_lora_api_v1_characters__character_id__lora_train_post"},"Body_upload_audio_knowledge_api_v1_characters__character_id__knowledge_audio_upload_post":{"properties":{"audio_file":{"type":"string","contentMediaType":"application/octet-stream","title":"Audio File"}},"type":"object","required":["audio_file"],"title":"Body_upload_audio_knowledge_api_v1_characters__character_id__knowledge_audio_upload_post"},"Body_upload_character_api_v1_characters_upload_post":{"properties":{"character_data":{"type":"string","title":"Character Data"},"character_sheet":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"Character Sheet"},"reference_images":{"anyOf":[{"items":{"type":"string","contentMediaType":"application/octet-stream"},"type":"array"},{"type":"null"}],"title":"Reference Images"},"voice_samples":{"anyOf":[{"items":{"type":"string","contentMediaType":"application/octet-stream"},"type":"array"},{"type":"null"}],"title":"Voice Samples"},"personality_guide":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"Personality Guide"},"training_data":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"Training Data"}},"type":"object","required":["character_data"],"title":"Body_upload_character_api_v1_characters_upload_post"},"Body_upload_character_document_api_v1_characters__character_id__documents_upload_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_character_document_api_v1_characters__character_id__documents_upload_post"},"Body_upload_chat_images_api_v1_chat_upload_chat_images_post":{"properties":{"images":{"items":{"type":"string","contentMediaType":"application/octet-stream"},"type":"array","title":"Images"}},"type":"object","required":["images"],"title":"Body_upload_chat_images_api_v1_chat_upload_chat_images_post"},"Body_upload_document_api_v1_documents_upload_post":{"properties":{"chatbot_id":{"type":"string","title":"Chatbot Id"},"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"knowledge_scope":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Knowledge Scope","default":"base"}},"type":"object","required":["chatbot_id","file"],"title":"Body_upload_document_api_v1_documents_upload_post"},"Body_upload_document_knowledge_api_v1_knowledge__character_id__document_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"title":{"type":"string","title":"Title"}},"type":"object","required":["file"],"title":"Body_upload_document_knowledge_api_v1_knowledge__character_id__document_post"},"Body_upload_document_knowledge_api_v1_projects__project_id__knowledge_document_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"tags":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tags"}},"type":"object","required":["file"],"title":"Body_upload_document_knowledge_api_v1_projects__project_id__knowledge_document_post"},"Body_upload_knowledge_file_api_v1_characters__character_id__knowledge_upload_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"content_type":{"type":"string","title":"Content Type","default":"document"},"knowledge_scope":{"type":"string","title":"Knowledge Scope","default":"character"}},"type":"object","required":["file"],"title":"Body_upload_knowledge_file_api_v1_characters__character_id__knowledge_upload_post"},"Body_upload_org_favicon_api_v1_admin_billing_policy__org__org_id__favicon_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_org_favicon_api_v1_admin_billing_policy__org__org_id__favicon_post"},"Body_upload_org_logo_api_v1_admin_billing_policy__org__org_id__logo_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_org_logo_api_v1_admin_billing_policy__org__org_id__logo_post"},"Body_upload_profile_image_api_v1_auth_upload_profile_image_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_profile_image_api_v1_auth_upload_profile_image_post"},"Body_widget_resolution_feedback_api_v1_resolution_widget_resolution_feedback_post":{"properties":{"conversation_id":{"type":"string","format":"uuid","title":"Conversation Id"},"resolved":{"type":"boolean","title":"Resolved"},"rating":{"anyOf":[{"type":"integer","maximum":5.0,"minimum":1.0},{"type":"null"}],"title":"Rating"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"}},"type":"object","required":["conversation_id","resolved"],"title":"Body_widget_resolution_feedback_api_v1_resolution_widget_resolution_feedback_post"},"Body_widget_upload_api_v1_widget__character_id__upload_post":{"properties":{"files":{"items":{"type":"string","contentMediaType":"application/octet-stream"},"type":"array","title":"Files"}},"type":"object","required":["files"],"title":"Body_widget_upload_api_v1_widget__character_id__upload_post"},"BranchCreateRequest":{"properties":{"message_id":{"type":"string","title":"Message Id"},"branch_name":{"type":"string","title":"Branch Name"},"branch_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Branch Description"}},"type":"object","required":["message_id","branch_name"],"title":"BranchCreateRequest","description":"분기 대화 생성 요청"},"BranchResponse":{"properties":{"id":{"type":"string","title":"Id"},"character_id":{"type":"string","title":"Character Id"},"user_id":{"type":"string","title":"User Id"},"parent_conversation_id":{"type":"string","title":"Parent Conversation Id"},"branch_point_message_id":{"type":"string","title":"Branch Point Message Id"},"branch_name":{"type":"string","title":"Branch Name"},"branch_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Branch Description"},"message_count":{"type":"integer","title":"Message Count"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","character_id","user_id","parent_conversation_id","branch_point_message_id","branch_name","branch_description","message_count","created_at"],"title":"BranchResponse","description":"분기 대화 응답"},"BrandingImport":{"properties":{"schema_version":{"type":"integer","title":"Schema Version","default":1},"branding":{"additionalProperties":true,"type":"object","title":"Branding"}},"type":"object","required":["branding"],"title":"BrandingImport"},"BudgetAlertResponse":{"properties":{"budget_id":{"type":"string","title":"Budget Id"},"budget_type":{"type":"string","title":"Budget Type"},"period_type":{"type":"string","title":"Period Type"},"usage_percentage":{"type":"number","title":"Usage Percentage"},"current_usage_usd":{"type":"number","title":"Current Usage Usd"},"budget_limit_usd":{"type":"number","title":"Budget Limit Usd"},"alert_level":{"type":"string","title":"Alert Level"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"character_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Character Id"}},"type":"object","required":["budget_id","budget_type","period_type","usage_percentage","current_usage_usd","budget_limit_usd","alert_level","user_id","character_id"],"title":"BudgetAlertResponse"},"BulkCategoryOperationRequest":{"properties":{"category_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Category Ids"},"operation":{"type":"string","pattern":"^(delete|activate|deactivate|reorder)$","title":"Operation"},"options":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Options","description":"작업별 추가 옵션","default":{}}},"type":"object","required":["category_ids","operation"],"title":"BulkCategoryOperationRequest","description":"카테고리 일괄 작업 요청"},"BulkCategoryOperationResponse":{"properties":{"success_count":{"type":"integer","title":"Success Count"},"failed_count":{"type":"integer","title":"Failed Count"},"failed_items":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Failed Items","default":[]},"message":{"type":"string","title":"Message"}},"type":"object","required":["success_count","failed_count","message"],"title":"BulkCategoryOperationResponse","description":"카테고리 일괄 작업 응답"},"BulkImportRequest":{"properties":{"memories":{"items":{"$ref":"#/components/schemas/BulkStoryMemoryItem"},"type":"array","maxItems":100,"minItems":1,"title":"Memories"},"auto_analyze":{"type":"boolean","title":"Auto Analyze","default":true}},"type":"object","required":["memories"],"title":"BulkImportRequest","description":"대량 입력 요청"},"BulkImportResponse":{"properties":{"success_count":{"type":"integer","title":"Success Count"},"failed_count":{"type":"integer","title":"Failed Count"},"created_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Created Ids"},"errors":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Errors"}},"type":"object","required":["success_count","failed_count","created_ids","errors"],"title":"BulkImportResponse","description":"대량 입력 응답"},"BulkOperationRequest":{"properties":{"operation_type":{"type":"string","title":"Operation Type"},"character_ids":{"items":{"type":"string"},"type":"array","title":"Character Ids"},"parameters":{"additionalProperties":true,"type":"object","title":"Parameters"}},"type":"object","required":["operation_type","character_ids","parameters"],"title":"BulkOperationRequest"},"BulkStoryMemoryItem":{"properties":{"episode_number":{"type":"integer","title":"Episode Number"},"chapter_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chapter Title"},"narrative_type":{"$ref":"#/components/schemas/NarrativeTypeEnum"},"title":{"type":"string","title":"Title"},"content":{"type":"string","title":"Content"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"importance_score":{"type":"number","title":"Importance Score","default":0.5},"callback_status":{"anyOf":[{"$ref":"#/components/schemas/CallbackStatusEnum"},{"type":"null"}]},"callback_deadline_episode":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Callback Deadline Episode"},"characters_involved":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Characters Involved"},"locations":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Locations"},"items":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Items"},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Keywords"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"}},"type":"object","required":["episode_number","narrative_type","title","content"],"title":"BulkStoryMemoryItem","description":"대량 입력용 단일 항목"},"CacheStatsResponse":{"properties":{"per_collection":{"additionalProperties":{"$ref":"#/components/schemas/CollectionStats"},"type":"object","title":"Per Collection"},"memory_entries":{"type":"integer","title":"Memory Entries"},"memory_capacity":{"type":"integer","title":"Memory Capacity"},"note":{"type":"string","title":"Note","default":"Process-local counters. Authoritative metrics in Prometheus (bestchar_rag_cache_*)."}},"type":"object","required":["per_collection","memory_entries","memory_capacity"],"title":"CacheStatsResponse"},"CallbackStatusEnum":{"type":"string","enum":["pending","partial","resolved","abandoned"],"title":"CallbackStatusEnum","description":"참조 상태\n\n- pending: 아직 사용/회수되지 않음\n- partial: 일부 사용됨\n- resolved: 완전히 사용/회수됨\n- abandoned: 사용하지 않기로 함"},"CategoryCreateRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"카테고리 이름"},"slug":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Slug","description":"URL용 슬러그"},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description","description":"설명"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id","description":"상위 카테고리 ID"},"icon":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Icon","description":"아이콘"},"image_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Image Url","description":"이미지 URL"},"display_order":{"type":"integer","title":"Display Order","description":"표시 순서","default":0}},"type":"object","required":["name"],"title":"CategoryCreateRequest","description":"카테고리 생성 요청"},"CategoryResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"level":{"type":"integer","title":"Level","default":0},"path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"display_order":{"type":"integer","title":"Display Order","default":0},"product_count":{"type":"integer","title":"Product Count","default":0},"is_visible":{"type":"boolean","title":"Is Visible","default":true},"children":{"anyOf":[{"items":{"$ref":"#/components/schemas/CategoryResponse"},"type":"array"},{"type":"null"}],"title":"Children"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","name","created_at"],"title":"CategoryResponse","description":"카테고리 응답"},"ChannelResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"channel_type":{"type":"string","title":"Channel Type"},"is_enabled":{"type":"boolean","title":"Is Enabled"},"severity_filter":{"items":{"type":"string"},"type":"array","title":"Severity Filter"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"email_recipients":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Email Recipients"},"slack_webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slack Webhook Url"},"slack_channel":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slack Channel"},"discord_webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Discord Webhook Url"},"sms_phone_numbers":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Sms Phone Numbers"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","name","channel_type","is_enabled","severity_filter","description"],"title":"ChannelResponse"},"ChannelUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"is_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Enabled"},"severity_filter":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Severity Filter"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"email_recipients":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Email Recipients"},"slack_webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slack Webhook Url"},"slack_channel":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slack Channel"},"discord_webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Discord Webhook Url"},"sms_phone_numbers":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Sms Phone Numbers"}},"type":"object","title":"ChannelUpdate"},"CharacterAPIKeyResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"character_id":{"type":"string","format":"uuid","title":"Character Id"},"character_name":{"type":"string","title":"Character Name"},"key_name":{"type":"string","title":"Key Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"allowed_scopes":{"items":{"type":"string"},"type":"array","title":"Allowed Scopes"},"rate_limit_per_minute":{"type":"integer","title":"Rate Limit Per Minute"},"rate_limit_per_hour":{"type":"integer","title":"Rate Limit Per Hour"},"rate_limit_per_day":{"type":"integer","title":"Rate Limit Per Day"},"allowed_domains":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Domains"},"allowed_origins":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Origins"},"allowed_ips":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Ips"},"blocked_ips":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Blocked Ips"},"require_https":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Require Https","default":true},"status":{"type":"string","title":"Status"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"total_requests":{"type":"integer","title":"Total Requests","default":0},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"purchase_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Purchase Id"},"llm_provider":{"type":"string","title":"Llm Provider","default":"platform"},"llm_model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Llm Model Id"},"use_byok":{"type":"boolean","title":"Use Byok","default":false}},"type":"object","required":["id","character_id","character_name","key_name","key_prefix","allowed_scopes","rate_limit_per_minute","rate_limit_per_hour","rate_limit_per_day","status","created_at"],"title":"CharacterAPIKeyResponse"},"CharacterAdminUpdateRequest":{"properties":{"is_public":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Public"},"is_featured":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Featured"},"admin_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Notes"}},"type":"object","title":"CharacterAdminUpdateRequest"},"CharacterCategoryCreate":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","description":"카테고리 이름"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"카테고리 설명"},"color":{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$","title":"Color","description":"카테고리 색상 (hex)","default":"#6366F1"},"icon":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Icon","description":"아이콘 이름"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id","description":"부모 카테고리 ID (2단계 구조)"},"sort_order":{"type":"integer","title":"Sort Order","description":"정렬 순서","default":0}},"type":"object","required":["name"],"title":"CharacterCategoryCreate"},"CharacterCategoryListResponse":{"properties":{"categories":{"items":{"$ref":"#/components/schemas/CharacterCategoryResponse"},"type":"array","title":"Categories"},"total_count":{"type":"integer","title":"Total Count"},"parent_categories_count":{"type":"integer","title":"Parent Categories Count"},"child_categories_count":{"type":"integer","title":"Child Categories Count"}},"type":"object","required":["categories","total_count","parent_categories_count","child_categories_count"],"title":"CharacterCategoryListResponse","description":"카테고리 목록 응답"},"CharacterCategoryResponse":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","description":"카테고리 이름"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"카테고리 설명"},"color":{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$","title":"Color","description":"카테고리 색상 (hex)","default":"#6366F1"},"icon":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Icon","description":"아이콘 이름"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id","description":"부모 카테고리 ID (2단계 구조)"},"sort_order":{"type":"integer","title":"Sort Order","description":"정렬 순서","default":0},"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"is_parent_category":{"type":"boolean","title":"Is Parent Category","description":"부모 카테고리 여부"},"is_child_category":{"type":"boolean","title":"Is Child Category","description":"자식 카테고리 여부"},"full_name":{"type":"string","title":"Full Name","description":"전체 카테고리 경로"},"character_count":{"type":"integer","title":"Character Count","description":"이 카테고리에 속한 캐릭터 수","default":0},"children":{"items":{"$ref":"#/components/schemas/CharacterCategoryResponse"},"type":"array","title":"Children","description":"자식 카테고리들","default":[]},"parent":{"anyOf":[{"$ref":"#/components/schemas/CharacterCategoryResponse"},{"type":"null"}],"description":"부모 카테고리"}},"type":"object","required":["name","id","user_id","is_active","created_at","updated_at","is_parent_category","is_child_category","full_name"],"title":"CharacterCategoryResponse"},"CharacterCategoryTree":{"properties":{"category":{"$ref":"#/components/schemas/CharacterCategoryResponse"},"children":{"items":{"$ref":"#/components/schemas/CharacterCategoryTree"},"type":"array","title":"Children","default":[]},"character_count":{"type":"integer","title":"Character Count","default":0},"total_character_count":{"type":"integer","title":"Total Character Count","default":0}},"type":"object","required":["category"],"title":"CharacterCategoryTree","description":"계층구조 트리 형태의 카테고리 응답"},"CharacterCategoryUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Name","description":"카테고리 이름"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"카테고리 설명"},"color":{"anyOf":[{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$"},{"type":"null"}],"title":"Color","description":"카테고리 색상 (hex)"},"icon":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Icon","description":"아이콘 이름"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id","description":"부모 카테고리 ID"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order","description":"정렬 순서"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active","description":"활성 상태"}},"type":"object","title":"CharacterCategoryUpdate"},"CharacterCreate":{"properties":{"name":{"type":"string","title":"Name"},"seed_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Seed Prompt"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"appearance_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Appearance Description"},"backstory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Backstory"},"personality_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Personality Type"},"mbti":{"anyOf":[{"$ref":"#/components/schemas/MBTIType"},{"type":"null"}]},"mbti_stats":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Mbti Stats"},"use_mbti_in_chat":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Use Mbti In Chat","default":true},"use_knowledge_base":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Use Knowledge Base","default":true},"speech_style":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Speech Style"},"character_traits":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Character Traits"},"idol_profile":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Idol Profile"},"character_category_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Character Category Id"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"voice_provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Provider","default":"openai"},"voice_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Voice Config"},"mood_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Mood Enabled","default":true},"enable_emotional_images":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enable Emotional Images","default":false},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender","default":"neutral"},"use_story_memory":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Use Story Memory","default":false},"is_public":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Public","default":true},"commercial_usage":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Commercial Usage","default":false},"expertise_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expertise Summary"},"is_expert":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Expert","default":false},"expert_level":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"Expert Level","default":1},"traits_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Traits Json"}},"type":"object","required":["name"],"title":"CharacterCreate","description":"캐릭터 생성 스키마\n\n필수 필드:\n- name: 캐릭터 이름 (2-50자, 한글/영문/숫자/공백/하이픈/언더스코어만 허용)\n\n선택 필드 (프론트 위자드는 description/seed_prompt를 필수로 요구하지만\nquick-create 등 서버 내부 경로는 생략 가능):\n- description: 마켓플레이스 설명 (10-500자)\n- seed_prompt: AI 프롬프트 (20-2000자)\n- tags: 태그 목록 (최대 10개, 각 태그 최대 30자)\n- backstory, notes, personality_type 등"},"CharacterFeedbackCreate":{"properties":{"overall_rating":{"type":"integer","maximum":5.0,"minimum":1.0,"title":"Overall Rating"},"personality_rating":{"anyOf":[{"type":"integer","maximum":5.0,"minimum":1.0},{"type":"null"}],"title":"Personality Rating"},"knowledge_rating":{"anyOf":[{"type":"integer","maximum":5.0,"minimum":1.0},{"type":"null"}],"title":"Knowledge Rating"},"creativity_rating":{"anyOf":[{"type":"integer","maximum":5.0,"minimum":1.0},{"type":"null"}],"title":"Creativity Rating"},"responsiveness_rating":{"anyOf":[{"type":"integer","maximum":5.0,"minimum":1.0},{"type":"null"}],"title":"Responsiveness Rating"},"what_you_liked":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"What You Liked"},"what_needs_improvement":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"What Needs Improvement"},"would_recommend":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Would Recommend"}},"type":"object","required":["overall_rating"],"title":"CharacterFeedbackCreate","description":"캐릭터 피드백 생성"},"CharacterFeedbackResponse":{"properties":{"id":{"type":"string","title":"Id"},"character_id":{"type":"string","title":"Character Id"},"overall_rating":{"type":"integer","title":"Overall Rating"},"personality_rating":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Personality Rating"},"knowledge_rating":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Knowledge Rating"},"creativity_rating":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Creativity Rating"},"responsiveness_rating":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Responsiveness Rating"},"what_you_liked":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"What You Liked"},"what_needs_improvement":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"What Needs Improvement"},"would_recommend":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Would Recommend"},"is_public":{"type":"boolean","title":"Is Public"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","character_id","overall_rating","personality_rating","knowledge_rating","creativity_rating","responsiveness_rating","what_you_liked","what_needs_improvement","would_recommend","is_public","created_at"],"title":"CharacterFeedbackResponse","description":"캐릭터 피드백 응답"},"CharacterFeedbackStats":{"properties":{"total_feedbacks":{"type":"integer","title":"Total Feedbacks"},"average_rating":{"type":"number","title":"Average Rating"},"rating_distribution":{"additionalProperties":true,"type":"object","title":"Rating Distribution"},"positive_percentage":{"type":"number","title":"Positive Percentage"},"recommendation_rate":{"type":"number","title":"Recommendation Rate"}},"type":"object","required":["total_feedbacks","average_rating","rating_distribution","positive_percentage","recommendation_rate"],"title":"CharacterFeedbackStats","description":"캐릭터 피드백 통계"},"CharacterKnowledgeSettingsUpdate":{"properties":{"knowledge_search_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Knowledge Search Enabled"},"knowledge_search_limit":{"anyOf":[{"type":"integer","maximum":50.0,"minimum":1.0},{"type":"null"}],"title":"Knowledge Search Limit"},"knowledge_min_similarity":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Knowledge Min Similarity"},"multi_tier_search_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Multi Tier Search Enabled"},"high_similarity_threshold":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"High Similarity Threshold"},"high_similarity_limit":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"High Similarity Limit"},"medium_similarity_threshold":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Medium Similarity Threshold"},"medium_similarity_limit":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"Medium Similarity Limit"},"low_similarity_limit":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"Low Similarity Limit"},"conversation_history_limit":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":1.0},{"type":"null"}],"title":"Conversation History Limit"},"max_context_tokens":{"anyOf":[{"type":"integer","maximum":10000.0,"minimum":500.0},{"type":"null"}],"title":"Max Context Tokens"},"use_smart_memory_window":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Use Smart Memory Window"},"use_enhanced_memory":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Use Enhanced Memory"},"session_memory_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Session Memory Enabled"},"conversation_memory_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Conversation Memory Enabled"},"favorite_memory_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Favorite Memory Enabled"}},"type":"object","title":"CharacterKnowledgeSettingsUpdate","description":"캐릭터 지식베이스 설정 업데이트"},"CharacterListingCreate":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"리스팅 제목"},"description":{"type":"string","title":"Description","description":"리스팅 설명"},"short_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Short Description","description":"짧은 설명"},"category":{"type":"string","title":"Category","description":"카테고리"},"subcategory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subcategory","description":"서브카테고리"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","description":"태그"},"target_audience":{"additionalProperties":true,"type":"object","title":"Target Audience","description":"타겟 고객"},"pricing_model":{"type":"string","title":"Pricing Model","description":"가격 모델"},"base_price":{"type":"number","title":"Base Price","description":"기본 가격"},"pricing_tiers":{"additionalProperties":true,"type":"object","title":"Pricing Tiers","description":"가격 티어"},"license_type":{"type":"string","title":"License Type","description":"라이센스 타입","default":"non_exclusive"},"usage_restrictions":{"additionalProperties":true,"type":"object","title":"Usage Restrictions","description":"사용 제한"},"commercial_use_allowed":{"type":"boolean","title":"Commercial Use Allowed","description":"상업적 사용 허용","default":true},"service_features":{"additionalProperties":true,"type":"object","title":"Service Features","description":"서비스 기능"},"delivery_time":{"type":"string","title":"Delivery Time","description":"배송 시간","default":"24 hours"},"revision_count":{"type":"integer","title":"Revision Count","description":"수정 횟수","default":1},"response_time":{"type":"string","title":"Response Time","description":"응답 시간","default":"1 hour"},"satisfaction_guarantee":{"type":"boolean","title":"Satisfaction Guarantee","description":"만족 보장","default":false},"money_back_guarantee":{"type":"boolean","title":"Money Back Guarantee","description":"환불 보장","default":false}},"type":"object","required":["description","category","pricing_model","base_price"],"title":"CharacterListingCreate","description":"캐릭터 리스팅 생성 요청"},"CharacterListingResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"character_id":{"type":"string","format":"uuid","title":"Character Id"},"seller_id":{"type":"string","format":"uuid","title":"Seller Id"},"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description"},"short_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Short Description"},"category":{"type":"string","title":"Category"},"subcategory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subcategory"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"pricing_model":{"type":"string","title":"Pricing Model"},"base_price":{"type":"number","title":"Base Price"},"license_type":{"type":"string","title":"License Type"},"commercial_use_allowed":{"type":"boolean","title":"Commercial Use Allowed"},"status":{"type":"string","title":"Status"},"view_count":{"type":"integer","title":"View Count"},"purchase_count":{"type":"integer","title":"Purchase Count"},"rating_average":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating Average","default":4.0},"rating_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rating Count","default":10},"is_featured":{"type":"boolean","title":"Is Featured"},"is_promoted":{"type":"boolean","title":"Is Promoted"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","character_id","seller_id","title","description","short_description","category","subcategory","tags","pricing_model","base_price","license_type","commercial_use_allowed","status","view_count","purchase_count","is_featured","is_promoted","created_at","updated_at"],"title":"CharacterListingResponse","description":"캐릭터 리스팅 응답"},"CharacterMarketplaceSettings":{"properties":{"consultation_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Consultation Price"},"is_public":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Public"},"is_free":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Free"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"}},"type":"object","title":"CharacterMarketplaceSettings","description":"캐릭터 제작자용 마켓플레이스 설정"},"CharacterMemorySettingsResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"character_id":{"type":"string","format":"uuid","title":"Character Id"},"creator_id":{"type":"string","format":"uuid","title":"Creator Id"},"conversation_retention_days":{"type":"integer","title":"Conversation Retention Days"},"session_memory_retention_hours":{"type":"integer","title":"Session Memory Retention Hours"},"importance_threshold":{"type":"number","title":"Importance Threshold"},"session_memory_enabled":{"type":"boolean","title":"Session Memory Enabled"},"conversation_memory_enabled":{"type":"boolean","title":"Conversation Memory Enabled"},"favorite_memory_enabled":{"type":"boolean","title":"Favorite Memory Enabled"},"knowledge_base_enabled":{"type":"boolean","title":"Knowledge Base Enabled"},"search_scope_days":{"type":"integer","title":"Search Scope Days"},"extended_search_enabled":{"type":"boolean","title":"Extended Search Enabled"},"max_search_results":{"type":"integer","title":"Max Search Results"},"auto_analysis_enabled":{"type":"boolean","title":"Auto Analysis Enabled"},"analysis_interval_hours":{"type":"integer","title":"Analysis Interval Hours"},"auto_promotion_threshold":{"type":"number","title":"Auto Promotion Threshold"},"personalization_enabled":{"type":"boolean","title":"Personalization Enabled"},"user_specific_memories":{"type":"boolean","title":"User Specific Memories"},"memory_cleanup_policy":{"type":"string","title":"Memory Cleanup Policy"},"max_session_memories_per_user":{"type":"integer","title":"Max Session Memories Per User"},"max_conversation_memories_per_user":{"type":"integer","title":"Max Conversation Memories Per User"},"max_favorite_memories_per_user":{"type":"integer","title":"Max Favorite Memories Per User"},"knowledge_base_shared":{"type":"boolean","title":"Knowledge Base Shared"},"knowledge_base_max_size_mb":{"type":"integer","title":"Knowledge Base Max Size Mb"},"advanced_settings":{"additionalProperties":true,"type":"object","title":"Advanced Settings","default":{}},"is_active":{"type":"boolean","title":"Is Active"},"last_cleanup_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Cleanup At"},"last_analysis_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Analysis At"},"total_memories_count":{"type":"integer","title":"Total Memories Count"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","character_id","creator_id","conversation_retention_days","session_memory_retention_hours","importance_threshold","session_memory_enabled","conversation_memory_enabled","favorite_memory_enabled","knowledge_base_enabled","search_scope_days","extended_search_enabled","max_search_results","auto_analysis_enabled","analysis_interval_hours","auto_promotion_threshold","personalization_enabled","user_specific_memories","memory_cleanup_policy","max_session_memories_per_user","max_conversation_memories_per_user","max_favorite_memories_per_user","knowledge_base_shared","knowledge_base_max_size_mb","is_active","total_memories_count","created_at","updated_at"],"title":"CharacterMemorySettingsResponse"},"CharacterMemorySettingsUpdate":{"properties":{"conversation_retention_days":{"anyOf":[{"type":"integer","maximum":365.0,"minimum":1.0},{"type":"null"}],"title":"Conversation Retention Days"},"session_memory_retention_hours":{"anyOf":[{"type":"integer","maximum":168.0,"minimum":1.0},{"type":"null"}],"title":"Session Memory Retention Hours"},"importance_threshold":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Importance Threshold"},"session_memory_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Session Memory Enabled"},"conversation_memory_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Conversation Memory Enabled"},"favorite_memory_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Favorite Memory Enabled"},"knowledge_base_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Knowledge Base Enabled"},"search_scope_days":{"anyOf":[{"type":"integer","maximum":365.0,"minimum":1.0},{"type":"null"}],"title":"Search Scope Days"},"extended_search_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Extended Search Enabled"},"max_search_results":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":5.0},{"type":"null"}],"title":"Max Search Results"},"auto_analysis_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Auto Analysis Enabled"},"analysis_interval_hours":{"anyOf":[{"type":"integer","maximum":24.0,"minimum":1.0},{"type":"null"}],"title":"Analysis Interval Hours"},"auto_promotion_threshold":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Auto Promotion Threshold"},"personalization_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Personalization Enabled"},"user_specific_memories":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"User Specific Memories"},"memory_cleanup_policy":{"anyOf":[{"type":"string","pattern":"^(time_based|importance_based|hybrid)$"},{"type":"null"}],"title":"Memory Cleanup Policy"},"max_session_memories_per_user":{"anyOf":[{"type":"integer","maximum":10000.0,"minimum":100.0},{"type":"null"}],"title":"Max Session Memories Per User"},"max_conversation_memories_per_user":{"anyOf":[{"type":"integer","maximum":5000.0,"minimum":50.0},{"type":"null"}],"title":"Max Conversation Memories Per User"},"max_favorite_memories_per_user":{"anyOf":[{"type":"integer","maximum":1000.0,"minimum":10.0},{"type":"null"}],"title":"Max Favorite Memories Per User"},"knowledge_base_shared":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Knowledge Base Shared"},"knowledge_base_max_size_mb":{"anyOf":[{"type":"integer","maximum":5000.0,"minimum":10.0},{"type":"null"}],"title":"Knowledge Base Max Size Mb"},"advanced_settings":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Advanced Settings"}},"type":"object","title":"CharacterMemorySettingsUpdate"},"CharacterPresetListResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"category_id":{"type":"string","format":"uuid","title":"Category Id"},"subcategory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subcategory"},"short_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Short Description"},"preview_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview Image Url"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"is_featured":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Featured","default":false},"is_premium":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Premium","default":false},"premium_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Premium Price","default":0.0},"use_count":{"type":"integer","title":"Use Count","default":0},"rating_average":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating Average","default":0.0},"category":{"anyOf":[{"$ref":"#/components/schemas/PresetCategoryResponse"},{"type":"null"}]}},"type":"object","required":["id","name","category_id"],"title":"CharacterPresetListResponse","description":"프리셋 목록 응답 (간략 정보)"},"CharacterPresetResponse":{"properties":{"name":{"type":"string","maxLength":200,"title":"Name"},"category_id":{"type":"string","format":"uuid","title":"Category Id"},"subcategory":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Subcategory"},"description":{"type":"string","title":"Description"},"short_description":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Short Description"},"seed_prompt":{"type":"string","title":"Seed Prompt"},"backstory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Backstory"},"appearance_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Appearance Description"},"mbti":{"anyOf":[{"$ref":"#/components/schemas/MBTIType"},{"type":"null"}]},"mbti_stats":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Mbti Stats"},"personality_type":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Personality Type"},"speech_style":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Speech Style"},"character_traits":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Character Traits"},"voice_provider":{"anyOf":[{"$ref":"#/components/schemas/VoiceProvider"},{"type":"null"}],"default":"openai"},"voice_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Voice Config"},"gender":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Gender","default":"neutral"},"preview_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview Image Url"},"sample_avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sample Avatar Url"},"emotional_images_sample":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Emotional Images Sample"},"default_knowledge_items":{"anyOf":[{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array"},{"type":"null"}],"title":"Default Knowledge Items"},"sample_conversations":{"anyOf":[{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array"},{"type":"null"}],"title":"Sample Conversations"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"target_audience":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Target Audience"},"use_cases":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Use Cases"},"setup_guide":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Setup Guide"},"customization_tips":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Customization Tips"},"is_active":{"type":"boolean","title":"Is Active","default":true},"is_featured":{"type":"boolean","title":"Is Featured","default":false},"is_premium":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Premium","default":false},"premium_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Premium Price","default":0.0},"id":{"type":"string","format":"uuid","title":"Id"},"created_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"use_count":{"type":"integer","title":"Use Count","default":0},"rating_average":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating Average","default":0.0},"rating_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rating Count","default":0},"category":{"anyOf":[{"$ref":"#/components/schemas/PresetCategoryResponse"},{"type":"null"}]}},"type":"object","required":["name","category_id","description","seed_prompt","id","created_at","updated_at"],"title":"CharacterPresetResponse"},"CharacterPreviewResponse":{"properties":{"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"appearance_description":{"type":"string","title":"Appearance Description"},"backstory":{"type":"string","title":"Backstory"},"personality_type":{"type":"string","title":"Personality Type"},"mbti":{"$ref":"#/components/schemas/MBTIType"},"mbti_stats":{"additionalProperties":{"type":"integer"},"type":"object","title":"Mbti Stats"},"speech_style":{"additionalProperties":true,"type":"object","title":"Speech Style"},"character_traits":{"additionalProperties":true,"type":"object","title":"Character Traits"},"gender":{"type":"string","title":"Gender"},"greeting_message":{"type":"string","title":"Greeting Message"}},"type":"object","required":["name","description","tags","appearance_description","backstory","personality_type","mbti","mbti_stats","speech_style","character_traits","gender","greeting_message"],"title":"CharacterPreviewResponse","description":"하이브리드 모드 - AI 생성 미리보기 응답"},"CharacterPricingPlanCreate":{"properties":{"plan_name":{"type":"string","title":"Plan Name"},"plan_type":{"type":"string","title":"Plan Type","default":"premium"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"pricing_model":{"type":"string","title":"Pricing Model","default":"per_message"},"base_price":{"type":"number","title":"Base Price","default":0.0},"currency":{"type":"string","title":"Currency","default":"USD"},"usage_tiers":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Usage Tiers"},"time_based_pricing":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Time Based Pricing"},"subscription_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Subscription Config"},"feature_pricing":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Feature Pricing"},"user_group_pricing":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"User Group Pricing"},"discounts":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Discounts"},"access_restrictions":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Access Restrictions"},"service_level":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Service Level"},"analytics_included":{"type":"boolean","title":"Analytics Included","default":false},"custom_branding":{"type":"boolean","title":"Custom Branding","default":false},"api_access":{"type":"boolean","title":"Api Access","default":false},"valid_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Valid Until"}},"type":"object","required":["plan_name"],"title":"CharacterPricingPlanCreate"},"CharacterPricingPlanResponse":{"properties":{"id":{"type":"string","title":"Id"},"character_id":{"type":"string","title":"Character Id"},"plan_name":{"type":"string","title":"Plan Name"},"plan_type":{"type":"string","title":"Plan Type"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"pricing_model":{"type":"string","title":"Pricing Model"},"base_price":{"type":"number","title":"Base Price"},"currency":{"type":"string","title":"Currency"},"is_active":{"type":"boolean","title":"Is Active"},"is_default":{"type":"boolean","title":"Is Default"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"subscription_count":{"type":"integer","title":"Subscription Count","default":0},"monthly_revenue":{"type":"number","title":"Monthly Revenue","default":0.0}},"type":"object","required":["id","character_id","plan_name","plan_type","description","pricing_model","base_price","currency","is_active","is_default","created_at"],"title":"CharacterPricingPlanResponse"},"CharacterRejectRequest":{"properties":{"reason":{"type":"string","title":"Reason"}},"type":"object","required":["reason"],"title":"CharacterRejectRequest"},"CharacterResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"name":{"type":"string","title":"Name"},"seed_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Seed Prompt"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"appearance_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Appearance Description"},"traits_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Traits Json"},"backstory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Backstory"},"personality_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Personality Type"},"mbti":{"anyOf":[{"$ref":"#/components/schemas/MBTIType"},{"type":"null"}]},"mbti_stats":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Mbti Stats"},"use_mbti_in_chat":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Use Mbti In Chat","default":true},"use_knowledge_base":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Use Knowledge Base","default":true},"speech_style":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Speech Style"},"character_traits":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Character Traits"},"idol_profile":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Idol Profile"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"},"main_image_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Main Image Id"},"main_image":{"anyOf":[{"$ref":"#/components/schemas/app__schemas__character__character__ImageResponse"},{"type":"null"}]},"small_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Small Image Url"},"main_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Main Image Url"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"character_category_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Character Category Id"},"category_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category Name"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"voice_provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Provider"},"voice_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Voice Config"},"mood_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Mood Enabled","default":true},"enable_emotional_images":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enable Emotional Images","default":false},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender","default":"neutral"},"use_story_memory":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Use Story Memory","default":false},"is_public":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Public","default":true},"commercial_usage":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Commercial Usage","default":false},"expertise_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expertise Summary"},"is_expert":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Expert","default":false},"expert_level":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expert Level","default":1},"is_featured":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Featured","default":false},"rating_average":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating Average","default":0.0},"rating_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rating Count","default":0},"consultation_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Consultation Price","default":0.0},"is_free":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Free","default":true},"creator_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creator Name"},"creator_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creator Email"}},"type":"object","required":["id","user_id","name","seed_prompt","traits_json","backstory","avatar_url","main_image_id","main_image","created_at"],"title":"CharacterResponse"},"CharacterSearchResult":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"},"expertise_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expertise Summary"},"is_expert":{"type":"boolean","title":"Is Expert"},"expert_level":{"type":"integer","title":"Expert Level"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"rating_average":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating Average"},"rating_count":{"type":"integer","title":"Rating Count"}},"type":"object","required":["id","name","description","avatar_url","expertise_summary","is_expert","expert_level","tags","rating_average","rating_count"],"title":"CharacterSearchResult","description":"검색 결과 스키마"},"CharacterSubscriptionCreate":{"properties":{"character_id":{"type":"string","title":"Character Id"},"pricing_plan_id":{"type":"string","title":"Pricing Plan Id"},"subscription_type":{"type":"string","title":"Subscription Type","default":"monthly"},"auto_renewal":{"type":"boolean","title":"Auto Renewal","default":true}},"type":"object","required":["character_id","pricing_plan_id"],"title":"CharacterSubscriptionCreate"},"CharacterUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"seed_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Seed Prompt"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"appearance_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Appearance Description"},"traits_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Traits Json"},"backstory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Backstory"},"personality_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Personality Type"},"mbti":{"anyOf":[{"$ref":"#/components/schemas/MBTIType"},{"type":"null"}]},"mbti_stats":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Mbti Stats"},"use_mbti_in_chat":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Use Mbti In Chat"},"use_knowledge_base":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Use Knowledge Base"},"speech_style":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Speech Style"},"character_traits":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Character Traits"},"idol_profile":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Idol Profile"},"character_category_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Character Category Id"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"is_public":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Public"},"commercial_usage":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Commercial Usage"},"expertise_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expertise Summary"},"is_expert":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Expert"},"expert_level":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"Expert Level"},"voice_provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Provider"},"voice_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Voice Config"},"mood_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Mood Enabled"},"enable_emotional_images":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enable Emotional Images"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"use_story_memory":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Use Story Memory"}},"type":"object","title":"CharacterUpdate","description":"캐릭터 수정 스키마 - CharacterCreate와 동일한 검증 규칙 적용"},"CharacterUpdateRequest":{"properties":{"is_public":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Public"},"is_featured":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Featured"},"consultation_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Consultation Price"},"is_free":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Free"}},"type":"object","title":"CharacterUpdateRequest"},"CharacterVoiceProfileRequest":{"properties":{"character_id":{"type":"string","title":"Character Id","description":"캐릭터 ID"},"character_description":{"type":"string","title":"Character Description","description":"캐릭터 설명"},"personality_traits":{"additionalProperties":true,"type":"object","title":"Personality Traits","description":"성격 특성"}},"type":"object","required":["character_id","character_description"],"title":"CharacterVoiceProfileRequest"},"ChatFeatureSettingsResponse":{"properties":{"flow_detection":{"type":"boolean","title":"Flow Detection"},"response_pacing":{"type":"boolean","title":"Response Pacing"},"time_awareness":{"type":"boolean","title":"Time Awareness"},"emotion_continuity":{"type":"boolean","title":"Emotion Continuity"},"user_profile":{"type":"boolean","title":"User Profile"},"response_variation":{"type":"boolean","title":"Response Variation"},"non_verbal_cues":{"type":"boolean","title":"Non Verbal Cues"},"counter_question":{"type":"boolean","title":"Counter Question"},"time_greeting_enforcement":{"type":"boolean","title":"Time Greeting Enforcement"},"first_visit_greeting":{"type":"boolean","title":"First Visit Greeting"},"use_catchphrases":{"type":"boolean","title":"Use Catchphrases"},"user_name_addressing":{"type":"boolean","title":"User Name Addressing"},"emotional_mirroring":{"type":"boolean","title":"Emotional Mirroring"},"memory_callback":{"type":"boolean","title":"Memory Callback"},"intimacy_nickname":{"type":"boolean","title":"Intimacy Nickname"},"emotion_reaction_pattern":{"type":"boolean","title":"Emotion Reaction Pattern"},"conversation_habits":{"type":"boolean","title":"Conversation Habits"},"relationship_depth_awareness":{"type":"boolean","title":"Relationship Depth Awareness"},"sensitive_topics":{"type":"boolean","title":"Sensitive Topics"},"imperfection":{"type":"boolean","title":"Imperfection"},"time_based_condition":{"type":"boolean","title":"Time Based Condition"},"input_moderation":{"type":"boolean","title":"Input Moderation","default":false}},"type":"object","required":["flow_detection","response_pacing","time_awareness","emotion_continuity","user_profile","response_variation","non_verbal_cues","counter_question","time_greeting_enforcement","first_visit_greeting","use_catchphrases","user_name_addressing","emotional_mirroring","memory_callback","intimacy_nickname","emotion_reaction_pattern","conversation_habits","relationship_depth_awareness","sensitive_topics","imperfection","time_based_condition"],"title":"ChatFeatureSettingsResponse","description":"설정 응답"},"ChatFeatureSettingsUpdate":{"properties":{"flow_detection":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Flow Detection"},"response_pacing":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Response Pacing"},"time_awareness":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Time Awareness"},"emotion_continuity":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Emotion Continuity"},"user_profile":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"User Profile"},"response_variation":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Response Variation"},"non_verbal_cues":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Non Verbal Cues"},"counter_question":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Counter Question"},"time_greeting_enforcement":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Time Greeting Enforcement"},"first_visit_greeting":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"First Visit Greeting"},"use_catchphrases":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Use Catchphrases"},"user_name_addressing":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"User Name Addressing"},"emotional_mirroring":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Emotional Mirroring"},"memory_callback":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Memory Callback"},"intimacy_nickname":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Intimacy Nickname"},"emotion_reaction_pattern":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Emotion Reaction Pattern"},"conversation_habits":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Conversation Habits"},"relationship_depth_awareness":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Relationship Depth Awareness"},"sensitive_topics":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Sensitive Topics"},"imperfection":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Imperfection"},"time_based_condition":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Time Based Condition"},"input_moderation":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Input Moderation"}},"type":"object","title":"ChatFeatureSettingsUpdate","description":"설정 업데이트 요청"},"ChatFeaturesWithDescriptions":{"properties":{"settings":{"$ref":"#/components/schemas/ChatFeatureSettingsResponse"},"overrides":{"anyOf":[{"additionalProperties":{"type":"boolean"},"type":"object"},{"type":"null"}],"title":"Overrides"},"descriptions":{"additionalProperties":{"$ref":"#/components/schemas/FeatureDescription"},"type":"object","title":"Descriptions"}},"type":"object","required":["settings","descriptions"],"title":"ChatFeaturesWithDescriptions","description":"설정 + 설명"},"ChatRequest":{"properties":{"character_id":{"type":"string","title":"Character Id"},"message":{"type":"string","title":"Message"},"conversation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversation Id"},"strategy":{"anyOf":[{"$ref":"#/components/schemas/RoutingStrategy"},{"type":"null"}],"default":"balanced"},"stream":{"type":"boolean","title":"Stream","default":false},"context":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Context"}},"type":"object","required":["character_id","message"],"title":"ChatRequest"},"ChatResponse":{"properties":{"response":{"type":"string","title":"Response"},"character_id":{"type":"string","title":"Character Id"},"conversation_id":{"type":"string","title":"Conversation Id"},"message_id":{"type":"string","title":"Message Id"},"provider":{"type":"string","title":"Provider"},"model":{"type":"string","title":"Model"},"tokens_used":{"type":"integer","title":"Tokens Used"},"cost":{"type":"number","title":"Cost"},"response_time":{"type":"number","title":"Response Time"},"cached":{"type":"boolean","title":"Cached","default":false},"sources":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Sources"}},"type":"object","required":["response","character_id","conversation_id","message_id","provider","model","tokens_used","cost","response_time"],"title":"ChatResponse"},"ChatSettings":{"properties":{"emotion_preset":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Emotion Preset"},"emotion_intensity":{"type":"number","title":"Emotion Intensity","default":0.8},"tone_preset":{"type":"string","title":"Tone Preset","default":"balanced"},"templates":{"anyOf":[{"items":{"$ref":"#/components/schemas/TemplateMessage"},"type":"array"},{"type":"null"}],"title":"Templates"}},"type":"object","title":"ChatSettings","description":"통합 채팅 설정"},"ChatStatisticsResponse":{"properties":{"total_conversations":{"type":"integer","title":"Total Conversations"},"total_messages":{"type":"integer","title":"Total Messages"},"user_messages":{"type":"integer","title":"User Messages"},"ai_messages":{"type":"integer","title":"Ai Messages"},"average_response_time_seconds":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Average Response Time Seconds"},"total_tokens_used":{"type":"integer","title":"Total Tokens Used"},"total_cost":{"type":"number","title":"Total Cost"},"emotional_distribution":{"additionalProperties":{"type":"integer"},"type":"object","title":"Emotional Distribution"},"message_length_stats":{"additionalProperties":{"type":"number"},"type":"object","title":"Message Length Stats"},"conversation_duration_stats":{"additionalProperties":{"type":"number"},"type":"object","title":"Conversation Duration Stats"},"messages_per_conversation":{"type":"number","title":"Messages Per Conversation"},"active_days":{"type":"integer","title":"Active Days"},"messages_by_hour":{"additionalProperties":{"type":"integer"},"type":"object","title":"Messages By Hour"},"messages_by_day_of_week":{"additionalProperties":{"type":"integer"},"type":"object","title":"Messages By Day Of Week"}},"type":"object","required":["total_conversations","total_messages","user_messages","ai_messages","average_response_time_seconds","total_tokens_used","total_cost","emotional_distribution","message_length_stats","conversation_duration_stats","messages_per_conversation","active_days","messages_by_hour","messages_by_day_of_week"],"title":"ChatStatisticsResponse","description":"대화 통계 응답"},"CheckoutRequest":{"properties":{"plan_id":{"type":"string","format":"uuid","title":"Plan Id"},"customer_email":{"type":"string","title":"Customer Email"},"success_url":{"type":"string","title":"Success Url"},"cancel_url":{"type":"string","title":"Cancel Url"}},"type":"object","required":["plan_id","customer_email","success_url","cancel_url"],"title":"CheckoutRequest"},"ClientStatsResponse":{"properties":{"client_id":{"type":"string","title":"Client Id"},"period_hours":{"type":"integer","title":"Period Hours"},"total_requests":{"type":"integer","title":"Total Requests"},"blocked_requests":{"type":"integer","title":"Blocked Requests"},"block_rate":{"type":"number","title":"Block Rate"},"hourly_stats":{"additionalProperties":true,"type":"object","title":"Hourly Stats"}},"type":"object","required":["client_id","period_hours","total_requests","blocked_requests","block_rate","hourly_stats"],"title":"ClientStatsResponse","description":"클라이언트 통계 응답"},"CollaborationRoomRequest":{"properties":{"character_id":{"type":"string","title":"Character Id","description":"캐릭터 ID"},"room_name":{"type":"string","maxLength":50,"minLength":1,"title":"Room Name","description":"룸 이름"}},"type":"object","required":["character_id","room_name"],"title":"CollaborationRoomRequest"},"CollectionConfigResponse":{"properties":{"collection_name":{"type":"string","title":"Collection Name"},"vector_size":{"type":"integer","title":"Vector Size"},"top_k":{"type":"integer","title":"Top K"},"min_similarity":{"type":"number","title":"Min Similarity"},"enable_mmr":{"type":"boolean","title":"Enable Mmr"},"mmr_lambda":{"type":"number","title":"Mmr Lambda"},"enable_time_decay":{"type":"boolean","title":"Enable Time Decay"},"time_decay_alpha":{"type":"number","title":"Time Decay Alpha"},"cache_ttl_seconds":{"type":"integer","title":"Cache Ttl Seconds"},"chunk_size":{"type":"integer","title":"Chunk Size"},"chunk_overlap":{"type":"integer","title":"Chunk Overlap"}},"type":"object","required":["collection_name","vector_size","top_k","min_similarity","enable_mmr","mmr_lambda","enable_time_decay","time_decay_alpha","cache_ttl_seconds","chunk_size","chunk_overlap"],"title":"CollectionConfigResponse"},"CollectionInfo":{"properties":{"name":{"type":"string","title":"Name"},"vectors_count":{"type":"integer","title":"Vectors Count"},"indexed_vectors_count":{"type":"integer","title":"Indexed Vectors Count"},"points_count":{"type":"integer","title":"Points Count"},"segments_count":{"type":"integer","title":"Segments Count"},"status":{"type":"string","title":"Status"},"optimizer_status":{"type":"string","title":"Optimizer Status"},"vector_size":{"type":"integer","title":"Vector Size"},"distance_metric":{"type":"string","title":"Distance Metric"}},"type":"object","required":["name","vectors_count","indexed_vectors_count","points_count","segments_count","status","optimizer_status","vector_size","distance_metric"],"title":"CollectionInfo","description":"컬렉션 정보"},"CollectionStats":{"properties":{"hits":{"type":"integer","title":"Hits"},"misses":{"type":"integer","title":"Misses"},"invalidations":{"type":"integer","title":"Invalidations"},"hit_rate":{"type":"number","title":"Hit Rate"},"total_lookups":{"type":"integer","title":"Total Lookups"}},"type":"object","required":["hits","misses","invalidations","hit_rate","total_lookups"],"title":"CollectionStats"},"CommunityPublicResponse":{"properties":{"platforms":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Platforms"},"contributors":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Contributors"},"guidelines":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Guidelines"},"resources":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Resources"}},"type":"object","required":["platforms","contributors","guidelines","resources"],"title":"CommunityPublicResponse","description":"공개 커뮤니티 설정 응답"},"CommunitySettingsRequest":{"properties":{"platforms":{"items":{"$ref":"#/components/schemas/PlatformItem"},"type":"array","title":"Platforms"},"contributors":{"items":{"$ref":"#/components/schemas/ContributorItem"},"type":"array","title":"Contributors"},"guidelines":{"items":{"$ref":"#/components/schemas/GuidelineItem"},"type":"array","title":"Guidelines"},"resources":{"items":{"$ref":"#/components/schemas/ResourceItem"},"type":"array","title":"Resources"}},"type":"object","required":["platforms","contributors","guidelines","resources"],"title":"CommunitySettingsRequest","description":"커뮤니티 설정 요청"},"CommunitySettingsResponse":{"properties":{"platforms":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Platforms"},"contributors":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Contributors"},"guidelines":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Guidelines"},"resources":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Resources"}},"type":"object","required":["platforms","contributors","guidelines","resources"],"title":"CommunitySettingsResponse","description":"커뮤니티 설정 응답"},"ComplianceReportResponse":{"properties":{"data_retention":{"additionalProperties":true,"type":"object","title":"Data Retention"},"audit_logging":{"additionalProperties":true,"type":"object","title":"Audit Logging"},"encryption":{"additionalProperties":true,"type":"object","title":"Encryption"},"access_controls":{"additionalProperties":true,"type":"object","title":"Access Controls"},"compliance_score":{"type":"integer","title":"Compliance Score"}},"type":"object","required":["data_retention","audit_logging","encryption","access_controls","compliance_score"],"title":"ComplianceReportResponse"},"ComprehensiveAnalysisRequest":{"properties":{"current_prompt":{"type":"string","title":"Current Prompt"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"personality_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Personality Type"},"target_industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Industry"},"target_audience":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Audience"}},"type":"object","required":["current_prompt"],"title":"ComprehensiveAnalysisRequest","description":"통합 프리셋 분석 요청"},"ComprehensiveAnalysisResponse":{"properties":{"validation":{"additionalProperties":true,"type":"object","title":"Validation"},"optimization":{"additionalProperties":true,"type":"object","title":"Optimization"},"extracted_tags":{"items":{"type":"string"},"type":"array","title":"Extracted Tags"},"target_audience_analysis":{"additionalProperties":true,"type":"object","title":"Target Audience Analysis"},"recommended_categories":{"items":{"type":"string"},"type":"array","title":"Recommended Categories"},"overall_score":{"type":"number","title":"Overall Score"},"readiness_level":{"type":"string","title":"Readiness Level"}},"type":"object","required":["validation","optimization","extracted_tags","target_audience_analysis","recommended_categories","overall_score","readiness_level"],"title":"ComprehensiveAnalysisResponse","description":"통합 프리셋 분석 응답 (검증 + 최적화 + 태그 추출)"},"ContactRequest":{"properties":{"name":{"type":"string","maxLength":100,"minLength":2,"title":"Name"},"email":{"type":"string","format":"email","title":"Email"},"subject":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Subject","default":""},"category":{"type":"string","title":"Category","default":"general"},"message":{"type":"string","maxLength":5000,"minLength":10,"title":"Message"}},"type":"object","required":["name","email","message"],"title":"ContactRequest","description":"문의 요청 데이터"},"ContactResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"},"ticket_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ticket Id"},"inquiry_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inquiry Id"}},"type":"object","required":["success","message"],"title":"ContactResponse","description":"문의 응답 데이터"},"ContentAction":{"properties":{"action_type":{"type":"string","title":"Action Type","description":"approve, remove, warn, temporary_ban, permanent_ban"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"duration_hours":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Hours"}},"type":"object","required":["action_type"],"title":"ContentAction"},"ContentPageCreate":{"properties":{"slug":{"type":"string","title":"Slug"},"title":{"type":"string","title":"Title"},"content":{"type":"string","title":"Content"},"is_active":{"type":"boolean","title":"Is Active","default":true},"meta_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Meta Description"},"meta_keywords":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Meta Keywords"}},"type":"object","required":["slug","title","content"],"title":"ContentPageCreate"},"ContentPageResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"slug":{"type":"string","title":"Slug"},"title":{"type":"string","title":"Title"},"content":{"type":"string","title":"Content"},"is_active":{"type":"boolean","title":"Is Active"},"meta_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Meta Description"},"meta_keywords":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Meta Keywords"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","slug","title","content","is_active","meta_description","meta_keywords","created_at","updated_at"],"title":"ContentPageResponse"},"ContentPageUpdate":{"properties":{"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"meta_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Meta Description"},"meta_keywords":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Meta Keywords"}},"type":"object","title":"ContentPageUpdate"},"ContentReportCreate":{"properties":{"content_type":{"type":"string","title":"Content Type","description":"character, message, image"},"content_id":{"type":"string","title":"Content Id"},"reason":{"type":"string","title":"Reason","description":"inappropriate, spam, harassment, copyright, other"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"severity":{"type":"string","title":"Severity","description":"low, medium, high, critical","default":"medium"}},"type":"object","required":["content_type","content_id","reason"],"title":"ContentReportCreate"},"ContentType":{"type":"string","enum":["document","conversation","training_data","faq","tutorial","case_study","reference","video","audio","image"],"title":"ContentType","description":"콘텐츠 타입"},"ContributorItem":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"avatar":{"type":"string","title":"Avatar"},"contribution":{"type":"string","title":"Contribution"},"active":{"type":"boolean","title":"Active"}},"type":"object","required":["id","name","avatar","contribution","active"],"title":"ContributorItem","description":"기여자 항목"},"ConversationMemoryResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"character_id":{"type":"string","format":"uuid","title":"Character Id"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"memory_type":{"type":"string","title":"Memory Type"},"title":{"type":"string","title":"Title"},"content":{"type":"string","title":"Content"},"summary":{"type":"string","title":"Summary"},"importance_level":{"type":"integer","title":"Importance Level"},"importance_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Importance Reason"},"auto_detected":{"type":"boolean","title":"Auto Detected"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"subcategory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subcategory"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"keywords":{"items":{"type":"string"},"type":"array","title":"Keywords","default":[]},"related_topics":{"items":{"type":"string"},"type":"array","title":"Related Topics","default":[]},"mentioned_entities":{"additionalProperties":true,"type":"object","title":"Mentioned Entities","default":{}},"emotional_context":{"additionalProperties":true,"type":"object","title":"Emotional Context","default":{}},"learning_weight":{"type":"number","title":"Learning Weight"},"personality_impact":{"type":"number","title":"Personality Impact"},"relationship_impact":{"type":"number","title":"Relationship Impact"},"retrieval_count":{"type":"integer","title":"Retrieval Count"},"last_retrieved":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Retrieved"},"effectiveness_score":{"type":"number","title":"Effectiveness Score"},"is_active":{"type":"boolean","title":"Is Active"},"confidence_score":{"type":"number","title":"Confidence Score"},"needs_review":{"type":"boolean","title":"Needs Review"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","character_id","memory_type","title","content","summary","importance_level","auto_detected","learning_weight","personality_impact","relationship_impact","retrieval_count","effectiveness_score","is_active","confidence_score","needs_review","created_at","updated_at"],"title":"ConversationMemoryResponse"},"ConversationResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"대화 ID"},"character_id":{"type":"string","format":"uuid","title":"Character Id","description":"캐릭터 ID"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"생성 시간"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At","description":"마지막 대화 시간"},"last_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Message","description":"마지막 메시지"},"message_count":{"type":"integer","title":"Message Count","description":"메시지 수","default":0}},"type":"object","required":["id","character_id","created_at"],"title":"ConversationResponse","description":"대화 응답"},"ConversationStatsResponse":{"properties":{"conversation_id":{"type":"string","title":"Conversation Id"},"character_name":{"type":"string","title":"Character Name"},"total_messages":{"type":"integer","title":"Total Messages"},"user_messages":{"type":"integer","title":"User Messages"},"ai_messages":{"type":"integer","title":"Ai Messages"},"first_message_at":{"type":"string","title":"First Message At"},"last_message_at":{"type":"string","title":"Last Message At"},"duration_minutes":{"type":"number","title":"Duration Minutes"},"total_cost":{"type":"number","title":"Total Cost"},"relationship_level":{"type":"integer","title":"Relationship Level"},"intimacy_score":{"type":"number","title":"Intimacy Score"}},"type":"object","required":["conversation_id","character_name","total_messages","user_messages","ai_messages","first_message_at","last_message_at","duration_minutes","total_cost","relationship_level","intimacy_score"],"title":"ConversationStatsResponse","description":"개별 대화 통계"},"ConversationSummaryDetailResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"conversation_id":{"type":"string","format":"uuid","title":"Conversation Id"},"summary_text":{"type":"string","title":"Summary Text"},"importance_score":{"type":"number","title":"Importance Score"},"topics":{"items":{"type":"string"},"type":"array","title":"Topics"},"emotions":{"additionalProperties":{"type":"number"},"type":"object","title":"Emotions"},"message_count":{"type":"integer","title":"Message Count"},"total_tokens":{"type":"integer","title":"Total Tokens"},"summary_period_start":{"type":"string","format":"date-time","title":"Summary Period Start"},"summary_period_end":{"type":"string","format":"date-time","title":"Summary Period End"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"original_messages":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Original Messages","description":"요약에 포함된 원본 메시지들"}},"type":"object","required":["id","conversation_id","summary_text","importance_score","topics","emotions","message_count","total_tokens","summary_period_start","summary_period_end","created_at","original_messages"],"title":"ConversationSummaryDetailResponse","description":"대화 요약 상세 응답 (원본 메시지 포함)"},"ConversationSummaryResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"conversation_id":{"type":"string","format":"uuid","title":"Conversation Id"},"summary_text":{"type":"string","title":"Summary Text"},"importance_score":{"type":"number","title":"Importance Score"},"topics":{"items":{"type":"string"},"type":"array","title":"Topics"},"emotions":{"additionalProperties":{"type":"number"},"type":"object","title":"Emotions"},"message_count":{"type":"integer","title":"Message Count"},"total_tokens":{"type":"integer","title":"Total Tokens"},"summary_period_start":{"type":"string","format":"date-time","title":"Summary Period Start"},"summary_period_end":{"type":"string","format":"date-time","title":"Summary Period End"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","conversation_id","summary_text","importance_score","topics","emotions","message_count","total_tokens","summary_period_start","summary_period_end","created_at"],"title":"ConversationSummaryResponse","description":"대화 요약 응답 스키마"},"CostAlertCreate":{"properties":{"alert_type":{"type":"string","title":"Alert Type"},"threshold_amount":{"type":"number","title":"Threshold Amount"},"threshold_currency":{"type":"string","title":"Threshold Currency","default":"USD"},"period":{"type":"string","title":"Period"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"notification_channels":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Notification Channels"},"is_active":{"type":"boolean","title":"Is Active","default":true}},"type":"object","required":["alert_type","threshold_amount","period"],"title":"CostAlertCreate"},"CrawlWebsiteRequest":{"properties":{"start_url":{"type":"string","title":"Start Url"},"max_depth":{"type":"integer","title":"Max Depth","default":3},"max_pages":{"type":"integer","title":"Max Pages","default":50},"delay":{"type":"number","title":"Delay","default":1.0},"respect_robots":{"type":"boolean","title":"Respect Robots","default":true},"allowed_domains":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Domains"},"excluded_patterns":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Excluded Patterns"},"use_playwright":{"type":"boolean","title":"Use Playwright","default":false}},"type":"object","required":["start_url"],"title":"CrawlWebsiteRequest","description":"웹사이트 크롤링 요청"},"CreateAPIKeyRequest":{"properties":{"user_id":{"type":"string","format":"uuid","title":"User Id"},"key_name":{"type":"string","title":"Key Name"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"},"quota_daily":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quota Daily"},"quota_monthly":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quota Monthly"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","required":["user_id","key_name","scopes"],"title":"CreateAPIKeyRequest"},"CreateBudgetRequest":{"properties":{"budget_type":{"type":"string","title":"Budget Type"},"period_type":{"type":"string","title":"Period Type"},"budget_limit_usd":{"type":"number","title":"Budget Limit Usd"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"character_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Character Id"}},"type":"object","required":["budget_type","period_type","budget_limit_usd"],"title":"CreateBudgetRequest"},"CreateCategoryRequest":{"properties":{"name":{"type":"string","maxLength":100,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"display_order":{"type":"integer","title":"Display Order","default":0},"icon":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Icon"},"color":{"type":"string","maxLength":7,"title":"Color","default":"#6366F1"},"is_active":{"type":"boolean","title":"Is Active","default":true}},"type":"object","required":["name"],"title":"CreateCategoryRequest","description":"관리자 카테고리 생성 요청"},"CreateCharacterAPIKeyRequest":{"properties":{"character_id":{"type":"string","format":"uuid","title":"Character Id"},"key_name":{"type":"string","maxLength":100,"minLength":1,"title":"Key Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"allowed_scopes":{"items":{"type":"string"},"type":"array","title":"Allowed Scopes","default":["chat_only"]},"rate_limit_per_minute":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Rate Limit Per Minute","default":60},"rate_limit_per_hour":{"type":"integer","maximum":100000.0,"minimum":1.0,"title":"Rate Limit Per Hour","default":1000},"rate_limit_per_day":{"type":"integer","maximum":1000000.0,"minimum":1.0,"title":"Rate Limit Per Day","default":10000},"allowed_domains":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Domains"},"allowed_origins":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Origins"},"expires_in_days":{"anyOf":[{"type":"integer","maximum":365.0,"minimum":1.0},{"type":"null"}],"title":"Expires In Days"},"require_https":{"type":"boolean","title":"Require Https","default":true},"llm_provider":{"type":"string","title":"Llm Provider","default":"platform"},"llm_model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Llm Model Id"},"use_byok":{"type":"boolean","title":"Use Byok","default":false}},"type":"object","required":["character_id","key_name"],"title":"CreateCharacterAPIKeyRequest","description":"레거시: 캐릭터 기반 API Key 생성"},"CreateCharacterFromPresetRequest":{"properties":{"preset_id":{"type":"string","format":"uuid","title":"Preset Id"},"custom_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Custom Name","description":"커스텀 이름 (선택)"},"customizations":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Customizations","description":"커스터마이징 옵션:\n        {\n            \"seed_prompt\": \"추가 프롬프트\",\n            \"backstory\": \"커스텀 배경\",\n            \"voice_config\": {...},\n            \"is_public\": true/false\n        }"}},"type":"object","required":["preset_id"],"title":"CreateCharacterFromPresetRequest","example":{"custom_name":"나만의 패션 스타일리스트","customizations":{"is_public":false,"seed_prompt":"특히 20대 여성을 위한 데일리룩에 집중해주세요."},"preset_id":"3fa85f64-5717-4562-b3fc-2c963f66afa6"}},"CreateFavoriteRequest":{"properties":{"favorite_type":{"$ref":"#/components/schemas/FavoriteType"},"message_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Message Id"},"memory_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Memory Id"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"image_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Description"},"custom_content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Content"},"custom_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Title"},"user_note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Note"},"emotional_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Emotional Reason"},"session_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Session Id"},"conversation_context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversation Context"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"mood":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mood"},"occasion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Occasion"}},"type":"object","required":["favorite_type"],"title":"CreateFavoriteRequest"},"CreateOptimizationJobRequest":{"properties":{"optimization_type":{"type":"string","title":"Optimization Type"},"target":{"type":"string","title":"Target"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"}},"type":"object","required":["optimization_type","target"],"title":"CreateOptimizationJobRequest"},"CreatePresetRequest":{"properties":{"name":{"type":"string","maxLength":200,"title":"Name"},"category_id":{"type":"string","format":"uuid","title":"Category Id"},"subcategory":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Subcategory"},"description":{"type":"string","title":"Description"},"short_description":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Short Description"},"seed_prompt":{"type":"string","title":"Seed Prompt"},"backstory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Backstory"},"appearance_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Appearance Description"},"mbti":{"anyOf":[{"$ref":"#/components/schemas/MBTIType"},{"type":"null"}]},"mbti_stats":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Mbti Stats"},"personality_type":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Personality Type"},"speech_style":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Speech Style"},"character_traits":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Character Traits"},"voice_provider":{"anyOf":[{"$ref":"#/components/schemas/VoiceProvider"},{"type":"null"}],"default":"openai"},"voice_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Voice Config"},"gender":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Gender","default":"neutral"},"preview_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview Image Url"},"sample_avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sample Avatar Url"},"emotional_images_sample":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Emotional Images Sample"},"default_knowledge_items":{"anyOf":[{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array"},{"type":"null"}],"title":"Default Knowledge Items"},"sample_conversations":{"anyOf":[{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array"},{"type":"null"}],"title":"Sample Conversations"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"target_audience":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Target Audience"},"use_cases":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Use Cases"},"setup_guide":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Setup Guide"},"customization_tips":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Customization Tips"},"is_active":{"type":"boolean","title":"Is Active","default":true},"is_featured":{"type":"boolean","title":"Is Featured","default":false},"is_premium":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Premium","default":false},"premium_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Premium Price","default":0.0},"created_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By"}},"type":"object","required":["name","category_id","description","seed_prompt"],"title":"CreatePresetRequest","description":"관리자 프리셋 생성 요청"},"CreateProjectAPIKeyRequest":{"properties":{"project_id":{"type":"string","format":"uuid","title":"Project Id"},"key_name":{"type":"string","maxLength":100,"minLength":1,"title":"Key Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"allowed_scopes":{"items":{"type":"string"},"type":"array","title":"Allowed Scopes","default":["chat_only","character_info"]},"rate_limit_per_minute":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Rate Limit Per Minute","default":60},"rate_limit_per_hour":{"type":"integer","maximum":100000.0,"minimum":1.0,"title":"Rate Limit Per Hour","default":1000},"rate_limit_per_day":{"type":"integer","maximum":1000000.0,"minimum":1.0,"title":"Rate Limit Per Day","default":10000},"allowed_domains":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Domains"},"allowed_origins":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Origins"},"expires_in_days":{"anyOf":[{"type":"integer","maximum":365.0,"minimum":1.0},{"type":"null"}],"title":"Expires In Days"},"require_https":{"type":"boolean","title":"Require Https","default":true},"require_user_validation":{"type":"boolean","title":"Require User Validation","default":false},"llm_provider":{"type":"string","title":"Llm Provider","default":"platform"},"llm_model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Llm Model Id"},"use_byok":{"type":"boolean","title":"Use Byok","default":false}},"type":"object","required":["project_id","key_name"],"title":"CreateProjectAPIKeyRequest","description":"프로젝트 기반 API Key 생성"},"CreateProjectRequest":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"project_type":{"type":"string","title":"Project Type","default":"website"},"site_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Url"}},"type":"object","required":["name"],"title":"CreateProjectRequest"},"CreateSessionRequest":{"properties":{"character_id":{"type":"string","title":"Character Id"}},"type":"object","required":["character_id"],"title":"CreateSessionRequest"},"CreateShareRequest":{"properties":{"conversation_id":{"type":"string","format":"uuid","title":"Conversation Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"expires_in_hours":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expires In Hours"},"max_views":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Views"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"}},"type":"object","required":["conversation_id"],"title":"CreateShareRequest"},"CreateVersionRequest":{"properties":{"knowledge_id":{"type":"string","format":"uuid","title":"Knowledge Id"},"change_description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Change Description"},"change_type":{"type":"string","title":"Change Type","description":"create, update, content_update, metadata_update","default":"update"},"version_type":{"type":"string","title":"Version Type","description":"major, minor, patch","default":"minor"}},"type":"object","required":["knowledge_id"],"title":"CreateVersionRequest","description":"버전 생성 요청"},"CreatedAPIKeyResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"api_key":{"type":"string","title":"Api Key"},"key_prefix":{"type":"string","title":"Key Prefix"},"key_name":{"type":"string","title":"Key Name"},"character_id":{"type":"string","format":"uuid","title":"Character Id"},"warning":{"type":"string","title":"Warning","default":"⚠️ 이 API 키를 안전한 곳에 저장하세요. 다시 볼 수 없습니다."}},"type":"object","required":["id","api_key","key_prefix","key_name","character_id"],"title":"CreatedAPIKeyResponse","description":"API 키 생성 직후에만 반환되는 응답 (전체 키 포함)"},"CreatedProjectAPIKeyResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"api_key":{"type":"string","title":"Api Key"},"key_prefix":{"type":"string","title":"Key Prefix"},"key_name":{"type":"string","title":"Key Name"},"project_id":{"type":"string","format":"uuid","title":"Project Id"},"signing_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signing Secret"},"warning":{"type":"string","title":"Warning","default":"⚠️ 이 API 키와 signing_secret을 안전한 곳에 저장하세요. 다시 볼 수 없습니다."}},"type":"object","required":["id","api_key","key_prefix","key_name","project_id"],"title":"CreatedProjectAPIKeyResponse","description":"프로젝트 API 키 생성 직후에만 반환되는 응답"},"CreditCheckoutRequest":{"properties":{"amount":{"type":"number","exclusiveMinimum":0.0,"title":"Amount","description":"Credit amount to purchase"},"success_url":{"type":"string","title":"Success Url"},"cancel_url":{"type":"string","title":"Cancel Url"},"payment_method":{"type":"string","title":"Payment Method","description":"Payment method: 'stripe' or 'paypal'","default":"paypal"}},"type":"object","required":["amount","success_url","cancel_url"],"title":"CreditCheckoutRequest"},"CreditPackageCreate":{"properties":{"package_name":{"type":"string","title":"Package Name","description":"Package identifier (e.g., 'starter', 'popular')"},"display_name":{"type":"string","title":"Display Name","description":"Display name for users"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Package description"},"amount":{"type":"number","title":"Amount","description":"Credit amount in USD ($10, $25, $50, $100)"},"bonus_percentage":{"type":"number","title":"Bonus Percentage","description":"Bonus percentage (0~100)","default":0.0},"is_active":{"type":"boolean","title":"Is Active","description":"Whether package is active","default":true},"is_popular":{"type":"boolean","title":"Is Popular","description":"Whether to show popular badge","default":false},"sort_order":{"type":"integer","title":"Sort Order","description":"Display order","default":0},"badge_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Badge Text","description":"Badge text (e.g., 'BEST', '50% 보너스')"},"features":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Features","description":"Additional features"}},"type":"object","required":["package_name","display_name","amount"],"title":"CreditPackageCreate"},"CreditPackageResponse":{"properties":{"package_name":{"type":"string","title":"Package Name","description":"Package identifier (e.g., 'starter', 'popular')"},"display_name":{"type":"string","title":"Display Name","description":"Display name for users"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Package description"},"amount":{"type":"number","title":"Amount","description":"Credit amount in USD ($10, $25, $50, $100)"},"bonus_percentage":{"type":"number","title":"Bonus Percentage","description":"Bonus percentage (0~100)","default":0.0},"is_active":{"type":"boolean","title":"Is Active","description":"Whether package is active","default":true},"is_popular":{"type":"boolean","title":"Is Popular","description":"Whether to show popular badge","default":false},"sort_order":{"type":"integer","title":"Sort Order","description":"Display order","default":0},"badge_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Badge Text","description":"Badge text (e.g., 'BEST', '50% 보너스')"},"features":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Features","description":"Additional features"},"id":{"type":"string","title":"Id"},"final_amount":{"type":"number","title":"Final Amount"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["package_name","display_name","amount","id","final_amount","created_at","updated_at"],"title":"CreditPackageResponse"},"CreditPackageUpdate":{"properties":{"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Amount"},"bonus_percentage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Bonus Percentage"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"is_popular":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Popular"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"},"badge_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Badge Text"},"features":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Features"}},"type":"object","title":"CreditPackageUpdate"},"CreditRefundRequest":{"properties":{"reason":{"type":"string","maxLength":1000,"minLength":1,"title":"Reason"}},"additionalProperties":false,"type":"object","required":["reason"],"title":"CreditRefundRequest"},"CreditsResponse":{"properties":{"user_id":{"type":"string","format":"uuid","title":"User Id"},"balance":{"type":"number","title":"Balance"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["user_id","balance","updated_at"],"title":"CreditsResponse"},"CustomKnowledgeFromUrlRequest":{"properties":{"api_key_id":{"type":"string","title":"Api Key Id","description":"API 키 ID (구매자 식별)"},"url":{"type":"string","title":"Url","description":"크롤링할 URL"},"max_depth":{"type":"integer","maximum":5.0,"minimum":1.0,"title":"Max Depth","description":"크롤링 깊이","default":2},"max_pages":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Max Pages","description":"최대 페이지 수","default":20}},"type":"object","required":["api_key_id","url"],"title":"CustomKnowledgeFromUrlRequest","description":"URL에서 커스텀 지식 추가 요청"},"CustomKnowledgeRequest":{"properties":{"api_key_id":{"type":"string","title":"Api Key Id","description":"API 키 ID (구매자 식별)"},"title":{"type":"string","maxLength":500,"minLength":1,"title":"Title"},"content":{"type":"string","minLength":10,"title":"Content"},"content_type":{"$ref":"#/components/schemas/ContentType","default":"document"},"source_type":{"type":"string","title":"Source Type","description":"지식 출처","default":"manual"}},"type":"object","required":["api_key_id","title","content"],"title":"CustomKnowledgeRequest","description":"커스텀 지식 추가 요청"},"CustomLimitRequest":{"properties":{"limit_type":{"type":"string","title":"Limit Type","description":"제한 타입"},"limit_value":{"type":"integer","exclusiveMinimum":0.0,"title":"Limit Value","description":"제한값"},"window_seconds":{"type":"integer","exclusiveMinimum":0.0,"title":"Window Seconds","description":"시간 윈도우 (초)"},"burst_allowance":{"type":"integer","title":"Burst Allowance","description":"버스트 허용량","default":0}},"type":"object","required":["limit_type","limit_value","window_seconds"],"title":"CustomLimitRequest"},"DailyQuoteResponse":{"properties":{"quote":{"type":"string","title":"Quote"},"created_date":{"type":"string","title":"Created Date"},"mood":{"type":"string","title":"Mood"},"mood_emoji":{"type":"string","title":"Mood Emoji"}},"type":"object","required":["quote","created_date","mood","mood_emoji"],"title":"DailyQuoteResponse","description":"오늘의 한마디 응답"},"DailyStats":{"properties":{"date":{"type":"string","title":"Date"},"requests":{"type":"integer","title":"Requests"},"users":{"type":"integer","title":"Users"}},"type":"object","required":["date","requests","users"],"title":"DailyStats"},"DashboardResponse":{"properties":{"summary":{"additionalProperties":true,"type":"object","title":"Summary"},"daily_trend":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Daily Trend"},"by_inquiry_type":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"By Inquiry Type"},"top_unresolved":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Top Unresolved"},"period":{"additionalProperties":true,"type":"object","title":"Period"}},"type":"object","required":["summary","daily_trend","by_inquiry_type","top_unresolved","period"],"title":"DashboardResponse"},"DecayConfigUpdate":{"properties":{"decay_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Decay Rate"},"min_importance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Importance"},"retrieval_boost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Retrieval Boost"},"max_importance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Importance"},"decay_start_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Decay Start Days"},"favorite_immunity":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Favorite Immunity"}},"type":"object","title":"DecayConfigUpdate","description":"망각 곡선 설정 업데이트"},"DeletionResponse":{"properties":{"deleted_conversations":{"type":"integer","title":"Deleted Conversations"},"deleted_messages":{"type":"integer","title":"Deleted Messages"},"deleted_user":{"type":"boolean","title":"Deleted User"},"qdrant_attempted":{"type":"boolean","title":"Qdrant Attempted"},"qdrant_deleted":{"additionalProperties":true,"type":"object","title":"Qdrant Deleted","default":{}}},"type":"object","required":["deleted_conversations","deleted_messages","deleted_user","qdrant_attempted"],"title":"DeletionResponse"},"DisputeCreate":{"properties":{"transaction_id":{"type":"string","format":"uuid","title":"Transaction Id"},"subject":{"type":"string","title":"Subject"},"description":{"type":"string","title":"Description"},"evidence":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Evidence"}},"type":"object","required":["transaction_id","subject","description"],"title":"DisputeCreate","description":"분쟁 제기"},"DocumentFileSearchRequest":{"properties":{"query":{"type":"string","title":"Query"},"max_results":{"type":"integer","title":"Max Results","default":5},"filters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Filters"}},"type":"object","required":["query"],"title":"DocumentFileSearchRequest"},"DocumentListResponse":{"properties":{"documents":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Documents"},"total_count":{"type":"integer","title":"Total Count"},"chatbot_id":{"type":"string","title":"Chatbot Id"}},"type":"object","required":["documents","total_count","chatbot_id"],"title":"DocumentListResponse"},"DocumentSearchRequest":{"properties":{"query":{"type":"string","title":"Query"},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit","default":5},"min_similarity":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Similarity","default":0.3}},"type":"object","required":["query"],"title":"DocumentSearchRequest"},"DocumentSearchResponse":{"properties":{"results":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Results"},"query":{"type":"string","title":"Query"},"total_results":{"type":"integer","title":"Total Results"}},"type":"object","required":["results","query","total_results"],"title":"DocumentSearchResponse"},"DocumentUploadResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"},"task_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Task Id"},"document_info":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Document Info"}},"type":"object","required":["success","message"],"title":"DocumentUploadResponse"},"DomainAddRequest":{"properties":{"domain":{"type":"string","title":"Domain"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"crawl_frequency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Crawl Frequency","default":"daily"},"max_pages":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Pages","default":50},"max_depth":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Depth","default":3},"use_playwright":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Use Playwright","default":false}},"type":"object","required":["domain"],"title":"DomainAddRequest"},"EmotionListResponse":{"properties":{"emotions":{"items":{"type":"string"},"type":"array","title":"Emotions"}},"type":"object","required":["emotions"],"title":"EmotionListResponse"},"EmotionPresetRequest":{"properties":{"emotion":{"type":"string","title":"Emotion"},"intensity":{"type":"number","title":"Intensity","default":0.8}},"type":"object","required":["emotion"],"title":"EmotionPresetRequest"},"EmotionPresetResponse":{"properties":{"emotion":{"type":"string","title":"Emotion"},"prompt_addon":{"type":"string","title":"Prompt Addon"},"emoji":{"type":"string","title":"Emoji"},"temperature_modifier":{"type":"number","title":"Temperature Modifier"},"intensity":{"type":"number","title":"Intensity"}},"type":"object","required":["emotion","prompt_addon","emoji","temperature_modifier","intensity"],"title":"EmotionPresetResponse"},"EmotionalImageResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"character_id":{"type":"string","format":"uuid","title":"Character Id"},"emotion":{"type":"string","title":"Emotion"},"image_url":{"type":"string","title":"Image Url"},"thumbnail_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail Url"},"usage_count":{"type":"integer","title":"Usage Count"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","character_id","emotion","image_url","usage_count","created_at"],"title":"EmotionalImageResponse"},"EndpointStats":{"properties":{"endpoint":{"type":"string","title":"Endpoint"},"count":{"type":"integer","title":"Count"},"avgTime":{"type":"integer","title":"Avgtime"}},"type":"object","required":["endpoint","count","avgTime"],"title":"EndpointStats"},"EnhancedChatRequest":{"properties":{"message":{"type":"string","title":"Message"},"character_id":{"type":"string","format":"uuid","title":"Character Id"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"context":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Context"}},"type":"object","required":["message","character_id"],"title":"EnhancedChatRequest"},"EnterpriseAnalyticsRequest":{"properties":{"character_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Character Ids"},"date_range":{"additionalProperties":{"type":"string","format":"date-time"},"type":"object","title":"Date Range"},"metrics":{"items":{"type":"string"},"type":"array","title":"Metrics","default":["revenue","usage","engagement","compliance"]},"granularity":{"type":"string","title":"Granularity","default":"daily"}},"type":"object","required":["date_range"],"title":"EnterpriseAnalyticsRequest"},"EnterpriseCharacterCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"source_organization":{"type":"string","title":"Source Organization"},"license_type":{"type":"string","title":"License Type","default":"enterprise"},"commercial_usage":{"type":"boolean","title":"Commercial Usage","default":true},"brand_guidelines":{"additionalProperties":true,"type":"object","title":"Brand Guidelines"},"personality_profile":{"additionalProperties":true,"type":"object","title":"Personality Profile"},"target_audience":{"items":{"type":"string"},"type":"array","title":"Target Audience"},"usage_restrictions":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Usage Restrictions"},"compliance_requirements":{"items":{"type":"string"},"type":"array","title":"Compliance Requirements","default":[]},"initial_pricing_plan":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Initial Pricing Plan"}},"type":"object","required":["name","description","source_organization","brand_guidelines","personality_profile","target_audience"],"title":"EnterpriseCharacterCreate","description":"엔터프라이즈 캐릭터 생성 요청"},"EnterpriseCharacterResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"source_organization":{"type":"string","title":"Source Organization"},"license_type":{"type":"string","title":"License Type"},"commercial_usage":{"type":"boolean","title":"Commercial Usage"},"creation_type":{"type":"string","title":"Creation Type"},"total_revenue":{"type":"number","title":"Total Revenue"},"active_subscriptions":{"type":"integer","title":"Active Subscriptions"},"total_interactions":{"type":"integer","title":"Total Interactions"},"compliance_status":{"type":"string","title":"Compliance Status"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_updated":{"type":"string","format":"date-time","title":"Last Updated"}},"type":"object","required":["id","name","source_organization","license_type","commercial_usage","creation_type","total_revenue","active_subscriptions","total_interactions","compliance_status","created_at","last_updated"],"title":"EnterpriseCharacterResponse"},"EnterpriseDiscountRequest":{"properties":{"annual_payment":{"type":"boolean","title":"Annual Payment","default":false},"loyalty_months":{"type":"integer","minimum":0.0,"title":"Loyalty Months","description":"서비스 이용 개월 수","default":0}},"type":"object","title":"EnterpriseDiscountRequest","description":"기업 할인 계산 요청"},"ErrorLogListResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"data":{"items":{"$ref":"#/components/schemas/ErrorLogResponse"},"type":"array","title":"Data"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"limit":{"type":"integer","title":"Limit"}},"type":"object","required":["success","data","total","page","limit"],"title":"ErrorLogListResponse"},"ErrorLogResponse":{"properties":{"id":{"type":"string","title":"Id"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"level":{"type":"string","title":"Level"},"source":{"type":"string","title":"Source"},"error_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Type"},"message":{"type":"string","title":"Message"},"stack_trace":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stack Trace"},"request_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Path"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"resolved":{"type":"boolean","title":"Resolved","default":false},"resolved_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Resolved At"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["id","timestamp","level","source","message"],"title":"ErrorLogResponse"},"ErrorStatsResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"data":{"additionalProperties":true,"type":"object","title":"Data"}},"type":"object","required":["success","data"],"title":"ErrorStatsResponse"},"EscalationRequest":{"properties":{"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","title":"EscalationRequest"},"EvaluationRunResponse":{"properties":{"collection":{"type":"string","title":"Collection"},"total_queries":{"type":"integer","title":"Total Queries"},"mrr":{"type":"number","title":"Mrr"},"recall_at_k":{"additionalProperties":{"type":"number"},"type":"object","title":"Recall At K"},"precision_at_k":{"additionalProperties":{"type":"number"},"type":"object","title":"Precision At K"},"ndcg_at_k":{"additionalProperties":{"type":"number"},"type":"object","title":"Ndcg At K"}},"type":"object","required":["collection","total_queries","mrr","recall_at_k","precision_at_k","ndcg_at_k"],"title":"EvaluationRunResponse"},"ExpirationRequest":{"properties":{"knowledge_id":{"type":"string","format":"uuid","title":"Knowledge Id"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["knowledge_id","expires_at"],"title":"ExpirationRequest","description":"만료일 설정 요청"},"ExpiringKnowledgeItem":{"properties":{"id":{"type":"string","title":"Id"},"title":{"type":"string","title":"Title"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"days_until_expiration":{"type":"integer","title":"Days Until Expiration"},"character_id":{"type":"string","title":"Character Id"}},"type":"object","required":["id","title","expires_at","days_until_expiration","character_id"],"title":"ExpiringKnowledgeItem","description":"곧 만료될 지식 아이템"},"ExportFormat":{"type":"string","enum":["json","csv","jsonl"],"title":"ExportFormat"},"ExternalApiKeyCreate":{"properties":{"key_name":{"type":"string","maxLength":255,"minLength":1,"title":"Key Name"},"organization":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Organization"},"contact_email":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Contact Email"},"website_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Website Url"},"plan_type":{"type":"string","title":"Plan Type","default":"free"},"allowed_domains":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Domains"},"allowed_ips":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Ips"}},"type":"object","required":["key_name"],"title":"ExternalApiKeyCreate"},"ExternalApiKeyResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"key_name":{"type":"string","title":"Key Name"},"api_key":{"type":"string","title":"Api Key"},"secret_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secret Key"},"organization":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization"},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email"},"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Url"},"is_active":{"type":"boolean","title":"Is Active"},"plan_type":{"type":"string","title":"Plan Type"},"rate_limit_per_minute":{"type":"integer","title":"Rate Limit Per Minute"},"rate_limit_per_day":{"type":"integer","title":"Rate Limit Per Day"},"monthly_quota":{"type":"integer","title":"Monthly Quota"},"cost_per_request":{"type":"number","title":"Cost Per Request"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"}},"type":"object","required":["id","key_name","api_key","organization","contact_email","website_url","is_active","plan_type","rate_limit_per_minute","rate_limit_per_day","monthly_quota","cost_per_request","created_at","last_used_at"],"title":"ExternalApiKeyResponse"},"ExternalChatRequest":{"properties":{"message":{"type":"string","maxLength":4000,"minLength":1,"title":"Message"},"external_user_id":{"type":"string","maxLength":255,"minLength":1,"title":"External User Id"},"session_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Session Id"},"additional_context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Additional Context","description":"추가 컨텍스트"},"context":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Context","default":{}}},"type":"object","required":["message","external_user_id"],"title":"ExternalChatRequest"},"ExternalChatResponse":{"properties":{"response":{"type":"string","title":"Response"},"character_id":{"type":"string","title":"Character Id"},"external_user_id":{"type":"string","title":"External User Id"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"message_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message Id"},"tokens_used":{"type":"integer","title":"Tokens Used","default":0},"processing_time_ms":{"type":"integer","title":"Processing Time Ms","default":0},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata","default":{}}},"type":"object","required":["response","character_id","external_user_id"],"title":"ExternalChatResponse"},"ExternalKnowledgeAddRequest":{"properties":{"title":{"type":"string","maxLength":200,"minLength":1,"title":"Title","description":"지식 제목"},"content":{"type":"string","maxLength":50000,"minLength":1,"title":"Content","description":"지식 내용"},"content_type":{"type":"string","pattern":"^(document|url|code|markdown)$","title":"Content Type","description":"컨텐츠 유형","default":"document"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":10},{"type":"null"}],"title":"Tags","description":"태그 목록"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"추가 메타데이터"}},"type":"object","required":["title","content"],"title":"ExternalKnowledgeAddRequest","description":"외부 API로 지식 추가 요청"},"ExternalKnowledgeSearchRequest":{"properties":{"query":{"type":"string","maxLength":500,"minLength":1,"title":"Query","description":"검색 쿼리"},"limit":{"type":"integer","maximum":20.0,"minimum":1.0,"title":"Limit","description":"최대 결과 수","default":5},"min_similarity":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Min Similarity","description":"최소 유사도","default":0.0}},"type":"object","required":["query"],"title":"ExternalKnowledgeSearchRequest","description":"외부 API 지식 검색 요청"},"ExternalMemorySearchRequest":{"properties":{"query":{"type":"string","maxLength":500,"minLength":1,"title":"Query"},"external_user_id":{"type":"string","maxLength":255,"minLength":1,"title":"External User Id"},"search_scope_days":{"anyOf":[{"type":"integer","maximum":365.0,"minimum":1.0},{"type":"null"}],"title":"Search Scope Days","default":30},"include_extended_search":{"type":"boolean","title":"Include Extended Search","default":false},"limit":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Limit","default":10}},"type":"object","required":["query","external_user_id"],"title":"ExternalMemorySearchRequest"},"ExternalMemorySearchResponse":{"properties":{"query":{"type":"string","title":"Query"},"character_id":{"type":"string","title":"Character Id"},"external_user_id":{"type":"string","title":"External User Id"},"results":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Results"},"total_results":{"type":"integer","title":"Total Results"},"search_duration_ms":{"type":"integer","title":"Search Duration Ms"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata","default":{}}},"type":"object","required":["query","character_id","external_user_id","results","total_results","search_duration_ms"],"title":"ExternalMemorySearchResponse"},"ExternalPricingPlan":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"plan_type":{"type":"string","title":"Plan Type"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_active":{"type":"boolean","title":"Is Active"},"is_public":{"type":"boolean","title":"Is Public"},"monthly_price":{"type":"number","title":"Monthly Price"},"yearly_price":{"type":"number","title":"Yearly Price"},"setup_fee":{"type":"number","title":"Setup Fee"},"monthly_request_quota":{"type":"integer","title":"Monthly Request Quota"},"daily_request_limit":{"type":"integer","title":"Daily Request Limit"},"minute_request_limit":{"type":"integer","title":"Minute Request Limit"},"max_chat_messages_per_day":{"type":"integer","title":"Max Chat Messages Per Day"},"max_widget_loads_per_day":{"type":"integer","title":"Max Widget Loads Per Day"},"max_character_data_requests_per_day":{"type":"integer","title":"Max Character Data Requests Per Day"}},"type":"object","required":["id","name","plan_type","is_active","is_public","monthly_price","yearly_price","setup_fee","monthly_request_quota","daily_request_limit","minute_request_limit","max_chat_messages_per_day","max_widget_loads_per_day","max_character_data_requests_per_day"],"title":"ExternalPricingPlan","description":"외부 API 요금제 응답 모델"},"ExternalUserBlockRequest":{"properties":{"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"block_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Block Until"}},"type":"object","title":"ExternalUserBlockRequest","description":"외부 사용자 차단 요청"},"ExtractedElement":{"properties":{"narrative_type":{"type":"string","title":"Narrative Type"},"title":{"type":"string","title":"Title"},"content":{"type":"string","title":"Content"},"importance_score":{"type":"number","title":"Importance Score"},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Keywords"},"characters_involved":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Characters Involved"},"is_foreshadowing":{"type":"boolean","title":"Is Foreshadowing","default":false},"callback_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Callback Status"},"episode_number":{"type":"integer","title":"Episode Number"}},"type":"object","required":["narrative_type","title","content","importance_score","episode_number"],"title":"ExtractedElement","description":"추출된 서사 요소"},"FAQCategoryCreate":{"properties":{"name":{"type":"string","title":"Name"},"name_ko":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name Ko"},"name_ja":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name Ja"},"name_en":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name En"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color"},"display_order":{"type":"integer","title":"Display Order","default":0}},"type":"object","required":["name"],"title":"FAQCategoryCreate"},"FAQCreateRequest":{"properties":{"question":{"type":"string","maxLength":500,"minLength":5,"title":"Question"},"answer":{"type":"string","maxLength":5000,"minLength":10,"title":"Answer"},"character_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Character Id"},"project_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags","default":[]},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Keywords","default":[]},"language":{"type":"string","title":"Language","default":"ko"}},"type":"object","required":["question","answer"],"title":"FAQCreateRequest"},"FAQFeedbackRequest":{"properties":{"helpful":{"type":"boolean","title":"Helpful"}},"type":"object","required":["helpful"],"title":"FAQFeedbackRequest"},"FAQGenerateFromConversationsRequest":{"properties":{"character_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Character Id"},"project_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"},"max_faqs":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Max Faqs","default":20},"categories":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Categories"},"language":{"type":"string","title":"Language","default":"ko"},"days":{"type":"integer","maximum":365.0,"minimum":1.0,"title":"Days","default":30},"min_messages":{"type":"integer","maximum":20.0,"minimum":1.0,"title":"Min Messages","default":3}},"type":"object","title":"FAQGenerateFromConversationsRequest"},"FAQGenerateRequest":{"properties":{"character_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Character Id"},"project_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"},"max_faqs":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Max Faqs","default":20},"categories":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Categories"},"language":{"type":"string","title":"Language","default":"ko"},"source":{"type":"string","title":"Source","default":"knowledge"}},"type":"object","title":"FAQGenerateRequest"},"FAQListResponse":{"properties":{"faqs":{"items":{"$ref":"#/components/schemas/FAQResponse"},"type":"array","title":"Faqs"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["faqs","total","limit","offset"],"title":"FAQListResponse"},"FAQResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"question":{"type":"string","title":"Question"},"answer":{"type":"string","title":"Answer"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"status":{"type":"string","title":"Status"},"source":{"type":"string","title":"Source"},"confidence_score":{"type":"number","title":"Confidence Score"},"view_count":{"type":"integer","title":"View Count"},"helpful_count":{"type":"integer","title":"Helpful Count"},"not_helpful_count":{"type":"integer","title":"Not Helpful Count"},"language":{"type":"string","title":"Language"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","question","answer","category","tags","status","source","confidence_score","view_count","helpful_count","not_helpful_count","language","created_at","updated_at"],"title":"FAQResponse"},"FAQStatsResponse":{"properties":{"total_faqs":{"type":"integer","title":"Total Faqs"},"by_status":{"additionalProperties":true,"type":"object","title":"By Status"},"total_views":{"type":"integer","title":"Total Views"},"total_helpful":{"type":"integer","title":"Total Helpful"},"total_not_helpful":{"type":"integer","title":"Total Not Helpful"},"helpfulness_rate":{"type":"number","title":"Helpfulness Rate"},"used_in_chat":{"type":"integer","title":"Used In Chat"}},"type":"object","required":["total_faqs","by_status","total_views","total_helpful","total_not_helpful","helpfulness_rate","used_in_chat"],"title":"FAQStatsResponse"},"FAQUpdateRequest":{"properties":{"question":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Question"},"answer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Answer"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Keywords"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"is_pinned":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Pinned"},"display_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Display Order"}},"type":"object","title":"FAQUpdateRequest"},"FavoriteMemoryResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"character_id":{"type":"string","format":"uuid","title":"Character Id"},"favorite_type":{"type":"string","title":"Favorite Type"},"message_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Message Id"},"memory_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Memory Id"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"image_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Description"},"custom_content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Content"},"custom_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Title"},"user_note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Note"},"emotional_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Emotional Reason"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"conversation_context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversation Context"},"timestamp_in_conversation":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Timestamp In Conversation"},"reminiscence_triggers":{"items":{"type":"string"},"type":"array","title":"Reminiscence Triggers","default":[]},"reminiscence_count":{"type":"integer","title":"Reminiscence Count","default":0},"last_reminisced":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Reminisced"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"mood":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mood"},"occasion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Occasion"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","character_id","favorite_type","created_at","updated_at"],"title":"FavoriteMemoryResponse"},"FavoriteType":{"type":"string","enum":["message","conversation","image","moment"],"title":"FavoriteType"},"FeatureDescription":{"properties":{"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"cost_level":{"type":"string","title":"Cost Level"}},"type":"object","required":["name","description","cost_level"],"title":"FeatureDescription","description":"기능 설명"},"FeatureFlagCreate":{"properties":{"flag_key":{"type":"string","title":"Flag Key"},"flag_name":{"type":"string","title":"Flag Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_enabled":{"type":"boolean","title":"Is Enabled","default":false},"rollout_percentage":{"type":"integer","title":"Rollout Percentage","default":100},"user_segments":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"User Segments"},"rollout_type":{"type":"string","title":"Rollout Type","default":"all"}},"type":"object","required":["flag_key","flag_name"],"title":"FeatureFlagCreate"},"FeatureFlagUpdate":{"properties":{"flag_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Flag Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Enabled"},"rollout_percentage":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rollout Percentage"},"user_segments":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"User Segments"},"rollout_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rollout Type"}},"type":"object","title":"FeatureFlagUpdate"},"FeatureOverrideCreate":{"properties":{"organization_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Organization Id"},"character_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Character Id"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"feature_type":{"type":"string","title":"Feature Type"},"is_enabled":{"type":"boolean","title":"Is Enabled"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"limit_value":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit Value"},"limit_unit":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Limit Unit"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","required":["feature_type","is_enabled"],"title":"FeatureOverrideCreate","description":"기능 오버라이드 생성"},"FeatureUsageRequest":{"properties":{"feature_name":{"type":"string","title":"Feature Name","description":"기능 이름"},"amount":{"type":"integer","minimum":1.0,"title":"Amount","description":"사용량","default":1}},"type":"object","required":["feature_name"],"title":"FeatureUsageRequest"},"FeedbackCreate":{"properties":{"page_url":{"type":"string","maxLength":500,"title":"Page Url"},"page_name":{"type":"string","maxLength":200,"title":"Page Name"},"feedback_type":{"$ref":"#/components/schemas/FeedbackType"},"urgency":{"$ref":"#/components/schemas/FeedbackUrgency","default":"medium"},"rating":{"anyOf":[{"type":"integer","maximum":5.0,"minimum":1.0},{"type":"null"}],"title":"Rating"},"title":{"type":"string","maxLength":500,"title":"Title"},"description":{"type":"string","title":"Description"}},"type":"object","required":["page_url","page_name","feedback_type","title","description"],"title":"FeedbackCreate","description":"피드백 생성"},"FeedbackStatus":{"type":"string","enum":["pending","reviewed","implemented","rejected"],"title":"FeedbackStatus","description":"처리 상태"},"FeedbackType":{"type":"string","enum":["bug","improvement","feature_request"],"title":"FeedbackType","description":"피드백 유형"},"FeedbackUpdate":{"properties":{"status":{"anyOf":[{"$ref":"#/components/schemas/FeedbackStatus"},{"type":"null"}]},"admin_response":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Response"}},"type":"object","title":"FeedbackUpdate","description":"피드백 업데이트"},"FeedbackUrgency":{"type":"string","enum":["low","medium","high","critical"],"title":"FeedbackUrgency","description":"긴급도"},"FileImportResponse":{"properties":{"success_count":{"type":"integer","title":"Success Count"},"failed_count":{"type":"integer","title":"Failed Count"},"created_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Created Ids"},"errors":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Errors"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings","default":[]}},"type":"object","required":["success_count","failed_count","created_ids","errors"],"title":"FileImportResponse","description":"파일 가져오기 응답"},"FontSettingsRequest":{"properties":{"korean_font":{"type":"string","title":"Korean Font"},"english_font":{"type":"string","title":"English Font"},"japanese_font":{"type":"string","title":"Japanese Font"}},"type":"object","required":["korean_font","english_font","japanese_font"],"title":"FontSettingsRequest"},"FontSettingsResponse":{"properties":{"korean_font":{"type":"string","title":"Korean Font"},"english_font":{"type":"string","title":"English Font"},"japanese_font":{"type":"string","title":"Japanese Font"}},"type":"object","required":["korean_font","english_font","japanese_font"],"title":"FontSettingsResponse"},"FraudType":{"type":"string","enum":["account_takeover","credit_card_fraud","api_abuse","bot_traffic","suspicious_location","velocity_abuse","pattern_anomaly"],"title":"FraudType","description":"사기 유형"},"FreePlanSubscribeRequest":{"properties":{"plan_id":{"type":"string","format":"uuid","title":"Plan Id"}},"type":"object","required":["plan_id"],"title":"FreePlanSubscribeRequest"},"FrontendLogRequest":{"properties":{"event_type":{"type":"string","title":"Event Type"},"message":{"type":"string","title":"Message"},"url":{"type":"string","title":"Url"},"user_agent":{"type":"string","title":"User Agent"},"screen_resolution":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Screen Resolution"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"component":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Component"},"action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"}},"type":"object","required":["event_type","message","url","user_agent"],"title":"FrontendLogRequest"},"FullEpisodeAnalysisRequest":{"properties":{"episode_text":{"type":"string","maxLength":50000,"title":"Episode Text","description":"에피소드 전체 텍스트"},"episode_number":{"type":"integer","minimum":1.0,"title":"Episode Number"},"auto_save":{"type":"boolean","title":"Auto Save","description":"분석 결과를 자동으로 저장할지","default":true},"existing_context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Existing Context","description":"기존 맥락 정보"}},"type":"object","required":["episode_text","episode_number"],"title":"FullEpisodeAnalysisRequest","description":"에피소드 전체 텍스트 분석 요청"},"FullEpisodeAnalysisResponse":{"properties":{"episode_number":{"type":"integer","title":"Episode Number"},"elements_extracted":{"type":"integer","title":"Elements Extracted"},"elements":{"items":{"$ref":"#/components/schemas/ExtractedElement"},"type":"array","title":"Elements"},"saved_count":{"type":"integer","title":"Saved Count","default":0},"saved_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Saved Ids","default":[]}},"type":"object","required":["episode_number","elements_extracted","elements"],"title":"FullEpisodeAnalysisResponse","description":"에피소드 분석 응답"},"FunctionAIModelUpdateNew":{"properties":{"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"model_provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Provider"},"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Id"},"model_display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Display Name"},"input_cost_per_1m_tokens":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Input Cost Per 1M Tokens"},"output_cost_per_1m_tokens":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Output Cost Per 1M Tokens"},"avg_response_time_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Avg Response Time Ms"},"quality_score":{"anyOf":[{"type":"integer","maximum":5.0,"minimum":1.0},{"type":"null"}],"title":"Quality Score"},"speed_score":{"anyOf":[{"type":"integer","maximum":5.0,"minimum":1.0},{"type":"null"}],"title":"Speed Score"},"cost_score":{"anyOf":[{"type":"integer","maximum":5.0,"minimum":1.0},{"type":"null"}],"title":"Cost Score"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default"},"fallback_model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fallback Model Id"}},"type":"object","title":"FunctionAIModelUpdateNew"},"FunctionModelUpdate":{"properties":{"function_name":{"type":"string","title":"Function Name"},"model_id":{"type":"string","title":"Model Id"}},"type":"object","required":["function_name","model_id"],"title":"FunctionModelUpdate","description":"기능별 모델 업데이트"},"GenerateEmotionalImagesRequest":{"properties":{"emotions":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Emotions"},"main_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Main Image Url"},"generation_method":{"type":"string","title":"Generation Method","default":"google_imagen"},"style_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Style Prompt"}},"type":"object","title":"GenerateEmotionalImagesRequest"},"GenerateEmotionalImagesResponse":{"properties":{"skipped":{"items":{"type":"string"},"type":"array","title":"Skipped"},"total":{"type":"integer","title":"Total"},"generated":{"type":"integer","title":"Generated"},"failed":{"type":"integer","title":"Failed"},"images":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Images"},"errors":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Errors"}},"type":"object","required":["total","generated","failed","images","errors"],"title":"GenerateEmotionalImagesResponse"},"GenerateEmotionalVideosRequest":{"properties":{"emotions":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Emotions"},"apply_boomerang":{"type":"boolean","title":"Apply Boomerang","default":false},"video_loop":{"type":"boolean","title":"Video Loop","default":false},"duration":{"type":"number","title":"Duration","default":3.0}},"type":"object","title":"GenerateEmotionalVideosRequest","description":"동영상 생성 요청"},"GenerateEmotionalVideosResponse":{"properties":{"total":{"type":"integer","title":"Total"},"generated":{"type":"integer","title":"Generated"},"failed":{"type":"integer","title":"Failed"},"videos":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Videos"},"errors":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Errors"}},"type":"object","required":["total","generated","failed","videos","errors"],"title":"GenerateEmotionalVideosResponse","description":"동영상 생성 응답"},"GlobalIntelligenceLimitsUpdate":{"properties":{"max_knowledge_search_limit":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":5.0},{"type":"null"}],"title":"Max Knowledge Search Limit"},"max_knowledge_min_similarity":{"anyOf":[{"type":"number","maximum":0.5,"minimum":0.0},{"type":"null"}],"title":"Max Knowledge Min Similarity"},"max_high_similarity_limit":{"anyOf":[{"type":"integer","maximum":20.0,"minimum":1.0},{"type":"null"}],"title":"Max High Similarity Limit"},"max_medium_similarity_limit":{"anyOf":[{"type":"integer","maximum":20.0,"minimum":1.0},{"type":"null"}],"title":"Max Medium Similarity Limit"},"max_low_similarity_limit":{"anyOf":[{"type":"integer","maximum":20.0,"minimum":1.0},{"type":"null"}],"title":"Max Low Similarity Limit"},"max_conversation_history_limit":{"anyOf":[{"type":"integer","maximum":200.0,"minimum":10.0},{"type":"null"}],"title":"Max Conversation History Limit"},"max_context_tokens":{"anyOf":[{"type":"integer","maximum":20000.0,"minimum":1000.0},{"type":"null"}],"title":"Max Context Tokens"},"max_session_memory_retention_hours":{"anyOf":[{"type":"integer","maximum":168.0,"minimum":24.0},{"type":"null"}],"title":"Max Session Memory Retention Hours"},"max_conversation_retention_days":{"anyOf":[{"type":"integer","maximum":365.0,"minimum":30.0},{"type":"null"}],"title":"Max Conversation Retention Days"},"max_search_results":{"anyOf":[{"type":"integer","maximum":200.0,"minimum":10.0},{"type":"null"}],"title":"Max Search Results"}},"type":"object","title":"GlobalIntelligenceLimitsUpdate","description":"글로벌 제한 설정 업데이트 (슈퍼 관리자 전용)"},"GlobalMemorySettingsResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"default_conversation_retention_days":{"type":"integer","title":"Default Conversation Retention Days"},"default_session_memory_retention_hours":{"type":"integer","title":"Default Session Memory Retention Hours"},"default_importance_threshold":{"type":"number","title":"Default Importance Threshold"},"knowledge_base_permanent":{"type":"boolean","title":"Knowledge Base Permanent"},"max_knowledge_base_size_mb":{"type":"integer","title":"Max Knowledge Base Size Mb"},"max_search_results":{"type":"integer","title":"Max Search Results"},"search_timeout_seconds":{"type":"integer","title":"Search Timeout Seconds"},"batch_processing_size":{"type":"integer","title":"Batch Processing Size"},"ai_analysis_enabled":{"type":"boolean","title":"Ai Analysis Enabled"},"ai_analysis_interval_hours":{"type":"integer","title":"Ai Analysis Interval Hours"},"auto_promotion_enabled":{"type":"boolean","title":"Auto Promotion Enabled"},"memory_consolidation_interval_days":{"type":"integer","title":"Memory Consolidation Interval Days"},"duplicate_detection_enabled":{"type":"boolean","title":"Duplicate Detection Enabled"},"auto_backup_enabled":{"type":"boolean","title":"Auto Backup Enabled"},"backup_interval_days":{"type":"integer","title":"Backup Interval Days"},"advanced_settings":{"additionalProperties":true,"type":"object","title":"Advanced Settings","default":{}},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"created_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By"}},"type":"object","required":["id","default_conversation_retention_days","default_session_memory_retention_hours","default_importance_threshold","knowledge_base_permanent","max_knowledge_base_size_mb","max_search_results","search_timeout_seconds","batch_processing_size","ai_analysis_enabled","ai_analysis_interval_hours","auto_promotion_enabled","memory_consolidation_interval_days","duplicate_detection_enabled","auto_backup_enabled","backup_interval_days","created_at","updated_at"],"title":"GlobalMemorySettingsResponse"},"GlobalMemorySettingsUpdate":{"properties":{"default_conversation_retention_days":{"anyOf":[{"type":"integer","maximum":365.0,"minimum":7.0},{"type":"null"}],"title":"Default Conversation Retention Days"},"default_session_memory_retention_hours":{"anyOf":[{"type":"integer","maximum":168.0,"minimum":1.0},{"type":"null"}],"title":"Default Session Memory Retention Hours"},"default_importance_threshold":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Default Importance Threshold"},"knowledge_base_permanent":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Knowledge Base Permanent"},"max_knowledge_base_size_mb":{"anyOf":[{"type":"integer","maximum":10000.0,"minimum":100.0},{"type":"null"}],"title":"Max Knowledge Base Size Mb"},"max_search_results":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":5.0},{"type":"null"}],"title":"Max Search Results"},"search_timeout_seconds":{"anyOf":[{"type":"integer","maximum":120.0,"minimum":5.0},{"type":"null"}],"title":"Search Timeout Seconds"},"batch_processing_size":{"anyOf":[{"type":"integer","maximum":1000.0,"minimum":10.0},{"type":"null"}],"title":"Batch Processing Size"},"ai_analysis_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ai Analysis Enabled"},"ai_analysis_interval_hours":{"anyOf":[{"type":"integer","maximum":24.0,"minimum":1.0},{"type":"null"}],"title":"Ai Analysis Interval Hours"},"auto_promotion_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Auto Promotion Enabled"},"memory_consolidation_interval_days":{"anyOf":[{"type":"integer","maximum":30.0,"minimum":1.0},{"type":"null"}],"title":"Memory Consolidation Interval Days"},"duplicate_detection_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Duplicate Detection Enabled"},"auto_backup_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Auto Backup Enabled"},"backup_interval_days":{"anyOf":[{"type":"integer","maximum":7.0,"minimum":1.0},{"type":"null"}],"title":"Backup Interval Days"},"advanced_settings":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Advanced Settings"}},"type":"object","title":"GlobalMemorySettingsUpdate"},"GrantSubscriptionRequest":{"properties":{"user_id":{"type":"string","format":"uuid","title":"User Id"},"pricing_plan_id":{"type":"string","format":"uuid","title":"Pricing Plan Id"},"subscription_type":{"type":"string","title":"Subscription Type","default":"monthly"},"duration_days":{"type":"integer","title":"Duration Days","default":30},"reason":{"type":"string","title":"Reason"}},"type":"object","required":["user_id","pricing_plan_id","reason"],"title":"GrantSubscriptionRequest"},"GroupChatSSERequest":{"properties":{"message":{"type":"string","title":"Message"},"character_ids":{"items":{"type":"string"},"type":"array","title":"Character Ids"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"conversation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversation Id"}},"type":"object","required":["message","character_ids"],"title":"GroupChatSSERequest","description":"그룹 채팅 SSE 요청"},"GuidelineItem":{"properties":{"id":{"type":"integer","title":"Id"},"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description"},"icon":{"type":"string","title":"Icon"},"enabled":{"type":"boolean","title":"Enabled"}},"type":"object","required":["id","title","description","icon","enabled"],"title":"GuidelineItem","description":"가이드라인 항목"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HandoffRequest":{"properties":{"conversation_id":{"type":"string","format":"uuid","title":"Conversation Id"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","required":["conversation_id"],"title":"HandoffRequest"},"HybridCharacterCreate":{"properties":{"description":{"type":"string","title":"Description"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"appearance_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Appearance Description"},"backstory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Backstory"},"personality_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Personality Type"},"mbti":{"anyOf":[{"$ref":"#/components/schemas/MBTIType"},{"type":"null"}]},"mbti_stats":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Mbti Stats"},"speech_style":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Speech Style"},"character_traits":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Character Traits"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"auto_generate_image":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Auto Generate Image","default":true},"auto_generate_emotional_images":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Auto Generate Emotional Images","default":false},"emotional_image_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Emotional Image Method","default":"stability_inpaint"}},"type":"object","required":["description"],"title":"HybridCharacterCreate","description":"하이브리드 모드 - AI 미리보기 후 사용자 조정"},"ICECandidateRequest":{"properties":{"session_id":{"type":"string","title":"Session Id"},"candidate":{"additionalProperties":true,"type":"object","title":"Candidate"}},"type":"object","required":["session_id","candidate"],"title":"ICECandidateRequest"},"ImageGenerateRequest":{"properties":{"character_id":{"type":"string","format":"uuid","title":"Character Id"},"prompt":{"type":"string","title":"Prompt"},"style":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Style","default":"anime"}},"type":"object","required":["character_id","prompt"],"title":"ImageGenerateRequest"},"ImageGenerationRequest":{"properties":{"prompt":{"type":"string","title":"Prompt"},"emotion":{"type":"string","title":"Emotion","default":"neutral"},"style":{"type":"string","title":"Style","default":"pastel"},"composition":{"type":"string","title":"Composition","default":"portrait"},"background":{"type":"string","title":"Background","default":"simple"},"resolution":{"type":"string","enum":["normal","hd","ultra_hd"],"title":"Resolution","default":"normal"},"quality":{"type":"string","title":"Quality","default":"standard"},"provider":{"type":"string","enum":["gemini","openai","stability"],"title":"Provider","default":"gemini"}},"type":"object","required":["prompt"],"title":"ImageGenerationRequest"},"ImageModelConfigCreate":{"properties":{"provider":{"type":"string","title":"Provider"},"model_name":{"type":"string","title":"Model Name"},"cost_per_image":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cost Per Image"},"cost_formula":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Cost Formula"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_active":{"type":"boolean","title":"Is Active","default":true}},"type":"object","required":["provider","model_name"],"title":"ImageModelConfigCreate"},"ImageModelConfigResponse":{"properties":{"id":{"type":"string","title":"Id"},"provider":{"type":"string","title":"Provider"},"model_name":{"type":"string","title":"Model Name"},"model_type":{"type":"string","title":"Model Type"},"cost_per_image":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cost Per Image"},"cost_formula":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Cost Formula"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["id","provider","model_name","model_type","cost_per_image","cost_formula","description","is_active","created_at","updated_at"],"title":"ImageModelConfigResponse"},"ImageModelConfigUpdate":{"properties":{"cost_per_image":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cost Per Image"},"cost_formula":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Cost Formula"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"ImageModelConfigUpdate"},"InquiryDetailResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"subject":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subject"},"category":{"type":"string","title":"Category"},"message":{"type":"string","title":"Message"},"status":{"type":"string","title":"Status"},"priority":{"type":"string","title":"Priority"},"admin_response":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Response"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"resolved_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Resolved At"}},"type":"object","required":["id","name","email","subject","category","message","status","priority","admin_response","created_at","resolved_at"],"title":"InquiryDetailResponse","description":"문의 상세 응답"},"IntegrationCreateRequest":{"properties":{"platform":{"$ref":"#/components/schemas/ShoppingPlatformEnum","description":"쇼핑몰 플랫폼"},"store_id":{"type":"string","title":"Store Id","description":"스토어 ID (카페24: mall_id, 네이버: channel_id, Shopify: shop_domain)"},"credentials":{"additionalProperties":true,"type":"object","title":"Credentials","description":"인증 정보"},"sync_options":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Sync Options","description":"동기화 옵션"},"sync_filters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Sync Filters","description":"동기화 필터"}},"type":"object","required":["platform","store_id","credentials"],"title":"IntegrationCreateRequest","description":"연동 생성 요청","example":{"credentials":{"access_token":"your_access_token","client_id":"your_client_id","client_secret":"your_client_secret","refresh_token":"your_refresh_token"},"platform":"cafe24","store_id":"mystore","sync_options":{"sync_images":true,"sync_inventory":true,"update_existing":true}}},"IntegrationDetailResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"character_id":{"type":"string","format":"uuid","title":"Character Id"},"platform":{"$ref":"#/components/schemas/ShoppingPlatformEnum"},"platform_store_id":{"type":"string","title":"Platform Store Id"},"store_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Store Name"},"store_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Store Url"},"status":{"$ref":"#/components/schemas/IntegrationStatusEnum"},"last_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error"},"sync_enabled":{"type":"boolean","title":"Sync Enabled"},"sync_interval_minutes":{"type":"integer","title":"Sync Interval Minutes"},"last_sync_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Sync At"},"next_sync_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Sync At"},"schedule_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Schedule Enabled","default":false},"schedule_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule Type"},"schedule_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule Time"},"schedule_day_of_week":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Schedule Day Of Week"},"schedule_timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule Timezone"},"incremental_sync_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Incremental Sync Enabled","default":true},"total_products_synced":{"type":"integer","title":"Total Products Synced"},"total_sync_count":{"type":"integer","title":"Total Sync Count"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"connected_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Connected At"},"sync_options":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Sync Options"},"sync_filters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Sync Filters"},"access_token_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Access Token Expires At"},"last_sync_duration_seconds":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Last Sync Duration Seconds"}},"type":"object","required":["id","character_id","platform","platform_store_id","store_name","store_url","status","last_error","sync_enabled","sync_interval_minutes","last_sync_at","next_sync_at","schedule_type","schedule_time","schedule_day_of_week","schedule_timezone","total_products_synced","total_sync_count","created_at","connected_at","sync_options","sync_filters","access_token_expires_at","last_sync_duration_seconds"],"title":"IntegrationDetailResponse","description":"연동 상세 정보 응답"},"IntegrationListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/IntegrationResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"IntegrationListResponse","description":"연동 목록 응답"},"IntegrationResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"character_id":{"type":"string","format":"uuid","title":"Character Id"},"platform":{"$ref":"#/components/schemas/ShoppingPlatformEnum"},"platform_store_id":{"type":"string","title":"Platform Store Id"},"store_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Store Name"},"store_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Store Url"},"status":{"$ref":"#/components/schemas/IntegrationStatusEnum"},"last_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error"},"sync_enabled":{"type":"boolean","title":"Sync Enabled"},"sync_interval_minutes":{"type":"integer","title":"Sync Interval Minutes"},"last_sync_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Sync At"},"next_sync_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Sync At"},"schedule_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Schedule Enabled","default":false},"schedule_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule Type"},"schedule_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule Time"},"schedule_day_of_week":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Schedule Day Of Week"},"schedule_timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule Timezone"},"incremental_sync_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Incremental Sync Enabled","default":true},"total_products_synced":{"type":"integer","title":"Total Products Synced"},"total_sync_count":{"type":"integer","title":"Total Sync Count"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"connected_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Connected At"}},"type":"object","required":["id","character_id","platform","platform_store_id","store_name","store_url","status","last_error","sync_enabled","sync_interval_minutes","last_sync_at","next_sync_at","schedule_type","schedule_time","schedule_day_of_week","schedule_timezone","total_products_synced","total_sync_count","created_at","connected_at"],"title":"IntegrationResponse","description":"연동 정보 응답"},"IntegrationStatusEnum":{"type":"string","enum":["pending","connected","disconnected","error","expired"],"title":"IntegrationStatusEnum","description":"연동 상태"},"IntegrationUpdateRequest":{"properties":{"credentials":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Credentials","description":"인증 정보"},"sync_options":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Sync Options","description":"동기화 옵션"},"sync_filters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Sync Filters","description":"동기화 필터"},"sync_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Sync Enabled","description":"자동 동기화 활성화"},"sync_interval_minutes":{"anyOf":[{"type":"integer","maximum":1440.0,"minimum":15.0},{"type":"null"}],"title":"Sync Interval Minutes","description":"동기화 간격 (분)"},"schedule_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Schedule Enabled","description":"스케줄 동기화 활성화"},"schedule_type":{"anyOf":[{"$ref":"#/components/schemas/ScheduleTypeEnum"},{"type":"null"}],"description":"스케줄 유형"},"schedule_time":{"anyOf":[{"type":"string","pattern":"^([01]?[0-9]|2[0-3]):[0-5][0-9]$"},{"type":"null"}],"title":"Schedule Time","description":"실행 시간 (HH:MM)"},"schedule_day_of_week":{"anyOf":[{"type":"integer","maximum":6.0,"minimum":0.0},{"type":"null"}],"title":"Schedule Day Of Week","description":"요일 (0=월, 6=일)"},"schedule_timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule Timezone","description":"타임존"},"incremental_sync_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Incremental Sync Enabled","description":"증분 동기화 사용"},"full_sync_schedule":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Sync Schedule","description":"전체 동기화 스케줄"}},"type":"object","title":"IntegrationUpdateRequest","description":"연동 수정 요청"},"InteractionTrackRequest":{"properties":{"character_id":{"type":"string","title":"Character Id"},"interaction_type":{"type":"string","title":"Interaction Type"}},"type":"object","required":["character_id","interaction_type"],"title":"InteractionTrackRequest"},"InvalidateResponse":{"properties":{"collection":{"type":"string","title":"Collection"},"invalidated":{"type":"boolean","title":"Invalidated"},"note":{"type":"string","title":"Note"}},"type":"object","required":["collection","invalidated","note"],"title":"InvalidateResponse"},"InvitationAccept":{"properties":{"token":{"type":"string","title":"Token"}},"type":"object","required":["token"],"title":"InvitationAccept"},"InvitationCreate":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"role":{"$ref":"#/components/schemas/TeamRole","default":"viewer"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["email"],"title":"InvitationCreate"},"InvitationList":{"properties":{"invitations":{"items":{"$ref":"#/components/schemas/InvitationResponse"},"type":"array","title":"Invitations"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["invitations","total"],"title":"InvitationList"},"InvitationResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"email":{"type":"string","title":"Email"},"role":{"$ref":"#/components/schemas/TeamRole"},"status":{"$ref":"#/components/schemas/InvitationStatus"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"invited_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Invited By"},"inviter_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inviter Name"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"responded_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Responded At"}},"type":"object","required":["id","organization_id","email","role","status","created_at","expires_at"],"title":"InvitationResponse"},"InvitationStatus":{"type":"string","enum":["pending","accepted","declined","expired","cancelled"],"title":"InvitationStatus"},"InviteCreate":{"properties":{"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"},"waitlist_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Waitlist Id"},"max_uses":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Max Uses","default":1},"expires_days":{"anyOf":[{"type":"integer","maximum":365.0,"minimum":1.0},{"type":"null"}],"title":"Expires Days","default":14},"note":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Note"},"send_email":{"type":"boolean","title":"Send Email","default":true}},"type":"object","title":"InviteCreate"},"InvoiceResponse":{"properties":{"id":{"type":"string","title":"Id"},"invoice_number":{"type":"string","title":"Invoice Number"},"billing_period_start":{"type":"string","format":"date-time","title":"Billing Period Start"},"billing_period_end":{"type":"string","format":"date-time","title":"Billing Period End"},"total_requests":{"type":"integer","title":"Total Requests"},"overage_requests":{"type":"integer","title":"Overage Requests"},"subscription_fee":{"type":"number","title":"Subscription Fee"},"overage_cost":{"type":"number","title":"Overage Cost"},"total_cost":{"type":"number","title":"Total Cost"},"tax_amount":{"type":"number","title":"Tax Amount"},"total_amount_with_tax":{"type":"number","title":"Total Amount With Tax"},"status":{"type":"string","title":"Status"},"issued_date":{"type":"string","format":"date-time","title":"Issued Date"},"due_date":{"type":"string","format":"date-time","title":"Due Date"},"paid_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Paid Date"}},"type":"object","required":["id","invoice_number","billing_period_start","billing_period_end","total_requests","overage_requests","subscription_fee","overage_cost","total_cost","tax_amount","total_amount_with_tax","status","issued_date","due_date","paid_date"],"title":"InvoiceResponse"},"KnowledgeAddRequest":{"properties":{"title":{"type":"string","title":"Title"},"content":{"type":"string","title":"Content"},"content_type":{"type":"string","title":"Content Type","default":"document"},"knowledge_scope":{"type":"string","title":"Knowledge Scope","default":"base"}},"type":"object","required":["title","content"],"title":"KnowledgeAddRequest"},"KnowledgeCrawlRequest":{"properties":{"url":{"type":"string","title":"Url"},"max_depth":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Depth","default":3},"max_pages":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Pages","default":50},"knowledge_scope":{"type":"string","title":"Knowledge Scope","default":"custom"}},"type":"object","required":["url"],"title":"KnowledgeCrawlRequest"},"KnowledgeItemRequest":{"properties":{"title":{"type":"string","title":"Title"},"content":{"type":"string","title":"Content"},"content_type":{"type":"string","title":"Content Type","default":"markdown"}},"type":"object","required":["title","content"],"title":"KnowledgeItemRequest","description":"지식 아이템 추가 요청"},"KnowledgeSearchRequest":{"properties":{"query":{"type":"string","title":"Query"},"limit":{"type":"integer","title":"Limit","default":5}},"type":"object","required":["query"],"title":"KnowledgeSearchRequest","description":"지식 검색 요청"},"KnowledgeStatsResponse":{"properties":{"character_id":{"type":"string","title":"Character Id"},"base_knowledge":{"additionalProperties":true,"type":"object","title":"Base Knowledge"},"custom_knowledge":{"additionalProperties":true,"type":"object","title":"Custom Knowledge"},"total_knowledge":{"additionalProperties":true,"type":"object","title":"Total Knowledge"},"purchase_info":{"additionalProperties":true,"type":"object","title":"Purchase Info"}},"type":"object","required":["character_id","base_knowledge","custom_knowledge","total_knowledge","purchase_info"],"title":"KnowledgeStatsResponse","description":"지식 통계 응답"},"KnowledgeTextRequest":{"properties":{"title":{"type":"string","title":"Title"},"content":{"type":"string","title":"Content"},"knowledge_scope":{"type":"string","title":"Knowledge Scope","default":"custom"}},"type":"object","required":["title","content"],"title":"KnowledgeTextRequest","description":"텍스트 직접 입력용 요청"},"KnowledgeUpdateRequest":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"}},"type":"object","title":"KnowledgeUpdateRequest","description":"지식 수정 요청"},"LLMPatternGenerateRequest":{"properties":{"description":{"type":"string","minLength":10,"title":"Description","description":"어떤 패턴을 만들고 싶은지 설명"},"pattern_type":{"$ref":"#/components/schemas/PatternTypeEnum"},"example_texts":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Example Texts","description":"예시 텍스트들"},"language":{"type":"string","title":"Language","description":"언어 (ko, en)","default":"ko"}},"type":"object","required":["description","pattern_type"],"title":"LLMPatternGenerateRequest"},"LLMPatternGenerateResponse":{"properties":{"pattern":{"type":"string","title":"Pattern"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"importance_boost":{"type":"number","title":"Importance Boost"},"category":{"type":"string","title":"Category"},"example_text":{"type":"string","title":"Example Text"},"test_cases":{"items":{"$ref":"#/components/schemas/TestCase"},"type":"array","title":"Test Cases"},"confidence":{"type":"number","title":"Confidence","description":"LLM 신뢰도 (0.0 ~ 1.0)"}},"type":"object","required":["pattern","name","description","importance_boost","category","example_text","test_cases","confidence"],"title":"LLMPatternGenerateResponse"},"LLMSettingResponse":{"properties":{"current_model":{"type":"string","title":"Current Model"},"temperature":{"type":"number","title":"Temperature"},"max_tokens":{"type":"integer","title":"Max Tokens"},"model_info":{"additionalProperties":true,"type":"object","title":"Model Info"}},"type":"object","required":["current_model","temperature","max_tokens","model_info"],"title":"LLMSettingResponse","description":"LLM 설정 응답"},"LLMSettingUpdate":{"properties":{"model_id":{"type":"string","title":"Model Id"},"temperature":{"type":"number","title":"Temperature","default":0.8},"max_tokens":{"type":"integer","title":"Max Tokens","default":2000}},"type":"object","required":["model_id"],"title":"LLMSettingUpdate","description":"LLM 설정 업데이트"},"LanguageResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"display_name":{"type":"string","title":"Display Name"},"is_default":{"type":"boolean","title":"Is Default"}},"type":"object","required":["id","name","display_name","is_default"],"title":"LanguageResponse"},"LoRAResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"character_id":{"type":"string","format":"uuid","title":"Character Id"},"seed_image_url":{"type":"string","title":"Seed Image Url"},"status":{"type":"string","title":"Status"},"base_model":{"type":"string","title":"Base Model"},"target_variations":{"type":"integer","title":"Target Variations"},"variations_generated":{"type":"integer","title":"Variations Generated"},"lora_file_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lora File Url"},"training_loss":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Training Loss"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","character_id","seed_image_url","status","base_model","target_variations","variations_generated","created_at"],"title":"LoRAResponse"},"LogLevel":{"type":"string","enum":["DEBUG","INFO","WARNING","ERROR","CRITICAL"],"title":"LogLevel"},"LogSource":{"type":"string","enum":["frontend","backend","celery","nginx","system"],"title":"LogSource"},"MBTIType":{"type":"string","enum":["INTJ","INTP","ENTJ","ENTP","INFJ","INFP","ENFJ","ENFP","ISTJ","ISFJ","ESTJ","ESFJ","ISTP","ISFP","ESTP","ESFP"],"title":"MBTIType","description":"MBTI 16가지 성격 유형"},"MFADisableRequest":{"properties":{"token":{"type":"string","title":"Token"}},"type":"object","required":["token"],"title":"MFADisableRequest","description":"MFA 비활성화 요청"},"MFASetupResponse":{"properties":{"secret":{"type":"string","title":"Secret"},"qr_code":{"type":"string","title":"Qr Code"},"message":{"type":"string","title":"Message"}},"type":"object","required":["secret","qr_code","message"],"title":"MFASetupResponse","description":"MFA 설정 응답"},"MFAStatusResponse":{"properties":{"enabled":{"type":"boolean","title":"Enabled"},"verified_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verified At"},"last_used_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Used At"},"backup_codes_remaining":{"type":"integer","title":"Backup Codes Remaining","default":0}},"type":"object","required":["enabled"],"title":"MFAStatusResponse","description":"MFA 상태 응답"},"MFAVerifyRequest":{"properties":{"token":{"type":"string","title":"Token"}},"type":"object","required":["token"],"title":"MFAVerifyRequest","description":"MFA 검증 요청"},"MFAVerifyResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"device_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Token"},"message":{"type":"string","title":"Message"}},"type":"object","required":["success","message"],"title":"MFAVerifyResponse","description":"MFA 검증 응답"},"MaintenanceModeCreate":{"properties":{"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description"},"maintenance_type":{"type":"string","title":"Maintenance Type"},"severity":{"type":"string","title":"Severity","default":"medium"},"scheduled_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Scheduled End"},"affected_services":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Affected Services"},"status_page_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Page Url"},"estimated_duration":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Estimated Duration"}},"type":"object","required":["title","description","maintenance_type"],"title":"MaintenanceModeCreate"},"MarketplacePaymentConfirmRequest":{"properties":{"payment_intent_id":{"type":"string","title":"Payment Intent Id"},"listing_id":{"type":"string","title":"Listing Id"},"selected_tier":{"type":"string","title":"Selected Tier","default":"basic"}},"type":"object","required":["payment_intent_id","listing_id"],"title":"MarketplacePaymentConfirmRequest"},"MarketplacePaymentIntentRequest":{"properties":{"listing_id":{"type":"string","title":"Listing Id"},"selected_tier":{"type":"string","title":"Selected Tier","default":"basic"},"currency":{"type":"string","title":"Currency","default":"usd"}},"type":"object","required":["listing_id"],"title":"MarketplacePaymentIntentRequest"},"MarketplacePaymentIntentResponse":{"properties":{"client_secret":{"type":"string","title":"Client Secret"},"payment_intent_id":{"type":"string","title":"Payment Intent Id"},"amount":{"type":"integer","title":"Amount"},"currency":{"type":"string","title":"Currency"},"status":{"type":"string","title":"Status"},"dev_mode":{"type":"boolean","title":"Dev Mode","default":false}},"type":"object","required":["client_secret","payment_intent_id","amount","currency","status"],"title":"MarketplacePaymentIntentResponse"},"MarketplacePurchaseRequest":{"properties":{"api_key_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key Id","description":"API 키 ID (선택)"},"purchase_price":{"type":"number","minimum":0.0,"title":"Purchase Price","description":"구매 가격","default":50.0}},"type":"object","title":"MarketplacePurchaseRequest","description":"캐릭터 구매 요청"},"MarketplacePurchaseResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"purchase_id":{"type":"string","title":"Purchase Id"},"character_id":{"type":"string","title":"Character Id"},"character_name":{"type":"string","title":"Character Name"},"buyer_id":{"type":"string","title":"Buyer Id"},"seller_id":{"type":"string","title":"Seller Id"},"purchase_price":{"type":"number","title":"Purchase Price"},"message":{"type":"string","title":"Message"},"base_knowledge_count":{"type":"integer","title":"Base Knowledge Count"}},"type":"object","required":["success","purchase_id","character_id","character_name","buyer_id","seller_id","purchase_price","message","base_knowledge_count"],"title":"MarketplacePurchaseResponse","description":"구매 응답"},"MarketplaceSettings":{"properties":{"commission_rate":{"type":"number","title":"Commission Rate","default":0.3},"featured_character_fee":{"type":"number","title":"Featured Character Fee","default":10.0},"subscription_fee_rate":{"type":"number","title":"Subscription Fee Rate","default":0.05},"minimum_price":{"type":"number","title":"Minimum Price","default":0.0},"maximum_price":{"type":"number","title":"Maximum Price","default":1000.0},"free_character_limit":{"type":"integer","title":"Free Character Limit","default":3},"max_characters_per_user":{"type":"integer","title":"Max Characters Per User","default":50},"min_rating_for_sales":{"type":"number","title":"Min Rating For Sales","default":3.0},"min_rating_count":{"type":"integer","title":"Min Rating Count","default":5},"auto_feature_rating":{"type":"number","title":"Auto Feature Rating","default":4.5},"max_featured_characters":{"type":"integer","title":"Max Featured Characters","default":20},"featured_duration_days":{"type":"integer","title":"Featured Duration Days","default":30},"require_admin_approval":{"type":"boolean","title":"Require Admin Approval","default":false},"auto_approve_threshold":{"type":"number","title":"Auto Approve Threshold","default":4.0},"content_moderation_enabled":{"type":"boolean","title":"Content Moderation Enabled","default":true},"payout_threshold":{"type":"number","title":"Payout Threshold","default":50.0},"payout_frequency":{"type":"string","title":"Payout Frequency","default":"monthly"},"bulk_discount_enabled":{"type":"boolean","title":"Bulk Discount Enabled","default":true},"bulk_discount_threshold":{"type":"integer","title":"Bulk Discount Threshold","default":5},"bulk_discount_rate":{"type":"number","title":"Bulk Discount Rate","default":0.1},"allow_price_changes":{"type":"boolean","title":"Allow Price Changes","default":true},"price_change_cooldown_days":{"type":"integer","title":"Price Change Cooldown Days","default":7},"character_trial_period_hours":{"type":"integer","title":"Character Trial Period Hours","default":24}},"type":"object","title":"MarketplaceSettings"},"MemberCreate":{"properties":{"role":{"$ref":"#/components/schemas/TeamRole","default":"viewer"},"user_id":{"type":"string","format":"uuid","title":"User Id"}},"type":"object","required":["user_id"],"title":"MemberCreate"},"MemberList":{"properties":{"members":{"items":{"$ref":"#/components/schemas/MemberResponse"},"type":"array","title":"Members"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["members","total"],"title":"MemberList"},"MemberResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"role":{"$ref":"#/components/schemas/TeamRole"},"custom_permissions":{"anyOf":[{"additionalProperties":{"type":"boolean"},"type":"object"},{"type":"null"}],"title":"Custom Permissions"},"is_active":{"type":"boolean","title":"Is Active"},"joined_at":{"type":"string","format":"date-time","title":"Joined At"},"last_active_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Active At"},"user_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Email"},"user_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Name"},"user_avatar":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Avatar"}},"type":"object","required":["id","organization_id","user_id","role","is_active","joined_at"],"title":"MemberResponse"},"MemberUpdate":{"properties":{"role":{"anyOf":[{"$ref":"#/components/schemas/TeamRole"},{"type":"null"}]},"custom_permissions":{"anyOf":[{"additionalProperties":{"type":"boolean"},"type":"object"},{"type":"null"}],"title":"Custom Permissions"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"MemberUpdate"},"MemoryChange":{"properties":{"revision":{"type":"string","maxLength":64,"minLength":64,"title":"Revision"},"value":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"}],"title":"Value"}},"type":"object","required":["revision","value"],"title":"MemoryChange"},"MemoryConfigRequest":{"properties":{"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled","description":"메모리 시스템 활성화 여부"},"memory_window_tokens":{"anyOf":[{"type":"integer","maximum":10000.0,"minimum":500.0},{"type":"null"}],"title":"Memory Window Tokens","description":"최근 대화 토큰 윈도우"},"summary_trigger_messages":{"anyOf":[{"type":"integer","maximum":50.0,"minimum":5.0},{"type":"null"}],"title":"Summary Trigger Messages","description":"자동 요약 트리거 메시지 수"},"rag_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Rag Enabled","description":"RAG 검색 활성화 여부"},"rag_top_k":{"anyOf":[{"type":"integer","maximum":20.0,"minimum":1.0},{"type":"null"}],"title":"Rag Top K","description":"RAG 검색 결과 개수"},"rag_min_similarity":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Rag Min Similarity","description":"RAG 최소 유사도"},"auto_summarize":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Auto Summarize","description":"자동 요약 활성화 여부"},"summary_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary Model","description":"요약 생성 모델 (gpt-4 | gpt-3.5-turbo)"},"embedding_dimensions":{"anyOf":[{"type":"integer","maximum":1536.0,"minimum":512.0},{"type":"null"}],"title":"Embedding Dimensions","description":"임베딩 벡터 차원 (512, 1024, 1536)"}},"type":"object","title":"MemoryConfigRequest","description":"메모리 설정 업데이트 요청"},"MemoryConfigResponse":{"properties":{"character_id":{"type":"string","format":"uuid","title":"Character Id"},"memory_config":{"additionalProperties":true,"type":"object","title":"Memory Config"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["character_id","memory_config","updated_at"],"title":"MemoryConfigResponse","description":"메모리 설정 응답"},"MemoryDelete":{"properties":{"revision":{"type":"string","maxLength":64,"minLength":64,"title":"Revision"}},"type":"object","required":["revision"],"title":"MemoryDelete"},"MemoryOverviewResponse":{"properties":{"conversation_id":{"type":"string","format":"uuid","title":"Conversation Id"},"total_messages":{"type":"integer","title":"Total Messages"},"memory_config":{"additionalProperties":true,"type":"object","title":"Memory Config"},"rag_statistics":{"additionalProperties":true,"type":"object","title":"Rag Statistics"},"system_status":{"additionalProperties":true,"type":"object","title":"System Status"}},"type":"object","required":["conversation_id","total_messages","memory_config","rag_statistics","system_status"],"title":"MemoryOverviewResponse","description":"메모리 시스템 개요 응답"},"MemoryPatternCreate":{"properties":{"pattern_type":{"$ref":"#/components/schemas/PatternTypeEnum"},"pattern":{"type":"string","minLength":1,"title":"Pattern","description":"정규식 패턴"},"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"importance_boost":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Importance Boost","default":0.0},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"days_back":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Days Back"},"days_range":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Days Range"},"is_active":{"type":"boolean","title":"Is Active","default":true},"priority":{"type":"integer","title":"Priority","default":0},"example_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Example Text"},"test_cases":{"anyOf":[{"items":{"$ref":"#/components/schemas/TestCase"},"type":"array"},{"type":"null"}],"title":"Test Cases"}},"type":"object","required":["pattern_type","pattern","name"],"title":"MemoryPatternCreate"},"MemoryPatternListResponse":{"properties":{"patterns":{"items":{"$ref":"#/components/schemas/MemoryPatternResponse"},"type":"array","title":"Patterns"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["patterns","total"],"title":"MemoryPatternListResponse"},"MemoryPatternResponse":{"properties":{"pattern_type":{"$ref":"#/components/schemas/PatternTypeEnum"},"pattern":{"type":"string","minLength":1,"title":"Pattern","description":"정규식 패턴"},"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"importance_boost":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Importance Boost","default":0.0},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"days_back":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Days Back"},"days_range":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Days Range"},"is_active":{"type":"boolean","title":"Is Active","default":true},"priority":{"type":"integer","title":"Priority","default":0},"example_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Example Text"},"test_cases":{"anyOf":[{"items":{"$ref":"#/components/schemas/TestCase"},"type":"array"},{"type":"null"}],"title":"Test Cases"},"id":{"type":"string","format":"uuid","title":"Id"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"llm_generated":{"type":"boolean","title":"Llm Generated","default":false},"llm_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Llm Prompt"},"match_count":{"type":"integer","title":"Match Count","default":0},"last_matched_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Matched At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["pattern_type","pattern","name","id","created_at","updated_at"],"title":"MemoryPatternResponse"},"MemoryPatternUpdate":{"properties":{"pattern_type":{"anyOf":[{"$ref":"#/components/schemas/PatternTypeEnum"},{"type":"null"}]},"pattern":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pattern"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"importance_boost":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Importance Boost"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"days_back":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Days Back"},"days_range":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Days Range"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"priority":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Priority"},"example_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Example Text"},"test_cases":{"anyOf":[{"items":{"$ref":"#/components/schemas/TestCase"},"type":"array"},{"type":"null"}],"title":"Test Cases"}},"type":"object","title":"MemoryPatternUpdate"},"MemoryRebuildRequest":{"properties":{"conversation_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conversation Id","description":"특정 대화만 재구축 (None이면 모든 대화)"},"force":{"type":"boolean","title":"Force","description":"기존 요약 삭제 후 재생성","default":false}},"type":"object","title":"MemoryRebuildRequest","description":"메모리 재구축 요청"},"MemoryRebuildResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"},"summaries_created":{"type":"integer","title":"Summaries Created"},"conversations_processed":{"type":"integer","title":"Conversations Processed"},"total_messages_summarized":{"type":"integer","title":"Total Messages Summarized"}},"type":"object","required":["success","message","summaries_created","conversations_processed","total_messages_summarized"],"title":"MemoryRebuildResponse","description":"메모리 재구축 응답"},"MemoryResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"character_id":{"type":"string","format":"uuid","title":"Character Id"},"kind":{"type":"string","title":"Kind"},"summary":{"type":"string","title":"Summary"},"weight":{"type":"number","title":"Weight"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","character_id","kind","summary","weight","updated_at"],"title":"MemoryResponse"},"MemorySearchRequest":{"properties":{"query":{"type":"string","maxLength":500,"minLength":1,"title":"Query"},"session_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Session Id"},"search_type":{"$ref":"#/components/schemas/MemorySearchType","default":"session_first"},"limit":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Limit","default":10},"include_metadata":{"type":"boolean","title":"Include Metadata","default":true}},"type":"object","required":["query"],"title":"MemorySearchRequest"},"MemorySearchResponse":{"properties":{"query":{"type":"string","title":"Query"},"search_type":{"type":"string","title":"Search Type"},"total_results":{"type":"integer","title":"Total Results"},"session_results_count":{"type":"integer","title":"Session Results Count"},"rag_results_count":{"type":"integer","title":"Rag Results Count"},"favorite_results_count":{"type":"integer","title":"Favorite Results Count"},"search_duration_ms":{"type":"integer","title":"Search Duration Ms"},"results":{"items":{"$ref":"#/components/schemas/MemorySearchResult"},"type":"array","title":"Results"}},"type":"object","required":["query","search_type","total_results","session_results_count","rag_results_count","favorite_results_count","search_duration_ms","results"],"title":"MemorySearchResponse"},"MemorySearchResult":{"properties":{"memory_id":{"type":"string","format":"uuid","title":"Memory Id"},"memory_type":{"type":"string","title":"Memory Type"},"title":{"type":"string","title":"Title"},"content":{"type":"string","title":"Content"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"relevance_score":{"type":"number","title":"Relevance Score"},"importance_score":{"type":"number","title":"Importance Score"},"keywords":{"items":{"type":"string"},"type":"array","title":"Keywords","default":[]},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"emotional_context":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Emotional Context"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_accessed":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Accessed"}},"type":"object","required":["memory_id","memory_type","title","content","relevance_score","importance_score","created_at"],"title":"MemorySearchResult"},"MemorySearchType":{"type":"string","enum":["session_first","rag_only","combined"],"title":"MemorySearchType"},"MessageEditRequest":{"properties":{"text":{"type":"string","maxLength":8000,"minLength":1,"title":"Text"}},"type":"object","required":["text"],"title":"MessageEditRequest"},"MessageFeedbackCreate":{"properties":{"message_id":{"type":"string","title":"Message Id"},"rating":{"type":"integer","maximum":5.0,"minimum":1.0,"title":"Rating","description":"1-5 평점"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category","description":"helpful, inappropriate, incorrect, etc."},"is_positive":{"type":"boolean","title":"Is Positive","default":true},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"},"improvement_suggestion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Improvement Suggestion"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"}},"type":"object","required":["message_id","rating"],"title":"MessageFeedbackCreate","description":"메시지 피드백 생성"},"MessageFeedbackResponse":{"properties":{"id":{"type":"string","title":"Id"},"message_id":{"type":"string","title":"Message Id"},"rating":{"type":"integer","title":"Rating"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"is_positive":{"type":"boolean","title":"Is Positive"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","message_id","rating","category","is_positive","comment","created_at"],"title":"MessageFeedbackResponse","description":"메시지 피드백 응답"},"MessageResponseLite":{"properties":{"id":{"type":"string","title":"Id"},"text":{"type":"string","title":"Text"},"role":{"type":"string","title":"Role"},"is_edited":{"type":"boolean","title":"Is Edited"},"edited_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Edited At"},"deleted_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deleted At"},"is_pinned":{"type":"boolean","title":"Is Pinned"},"pinned_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pinned At"}},"type":"object","required":["id","text","role","is_edited","edited_at","deleted_at","is_pinned","pinned_at"],"title":"MessageResponseLite"},"MetricThresholdUpdate":{"properties":{"warning_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Warning Value"},"critical_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Critical Value"},"comparison":{"anyOf":[{"type":"string","pattern":"^(greater|less|equals)$"},{"type":"null"}],"title":"Comparison"},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","title":"MetricThresholdUpdate","description":"메트릭 임계값 수정 모델"},"ModelConfigCreate":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"model_name":{"type":"string","title":"Model Name"},"provider":{"type":"string","title":"Provider"},"input_cost_per_token":{"type":"number","title":"Input Cost Per Token"},"output_cost_per_token":{"type":"number","title":"Output Cost Per Token"},"max_context_length":{"type":"integer","title":"Max Context Length"},"max_output_tokens":{"type":"integer","title":"Max Output Tokens"},"supports_streaming":{"type":"boolean","title":"Supports Streaming","default":true},"supports_function_calling":{"type":"boolean","title":"Supports Function Calling","default":false},"rate_limit_requests":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rate Limit Requests"},"rate_limit_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rate Limit Tokens"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"is_active":{"type":"boolean","title":"Is Active","default":true}},"type":"object","required":["model_name","provider","input_cost_per_token","output_cost_per_token","max_context_length","max_output_tokens"],"title":"ModelConfigCreate"},"ModelConfigRequest":{"properties":{"provider":{"type":"string","title":"Provider"},"model_id":{"type":"string","title":"Model Id"},"cost_per_1k_tokens":{"type":"number","title":"Cost Per 1K Tokens"},"max_tokens":{"type":"integer","title":"Max Tokens"},"context_window":{"type":"integer","title":"Context Window"},"specialties":{"items":{"type":"string"},"type":"array","title":"Specialties"},"is_enabled":{"type":"boolean","title":"Is Enabled","default":true}},"type":"object","required":["provider","model_id","cost_per_1k_tokens","max_tokens","context_window","specialties"],"title":"ModelConfigRequest"},"ModelInfo":{"properties":{"key":{"type":"string","title":"Key"},"name":{"type":"string","title":"Name"},"provider":{"type":"string","title":"Provider"},"cost_per_1k_tokens":{"type":"number","title":"Cost Per 1K Tokens"},"specialties":{"items":{"type":"string"},"type":"array","title":"Specialties"},"context_window":{"type":"integer","title":"Context Window"}},"type":"object","required":["key","name","provider","cost_per_1k_tokens","specialties","context_window"],"title":"ModelInfo"},"ModelProvider":{"type":"string","enum":["azure","openrouter","openai"],"title":"ModelProvider"},"ModerationRuleCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"rule_type":{"type":"string","title":"Rule Type","description":"keyword, regex, ai_model"},"severity":{"type":"string","title":"Severity","description":"low, medium, high","default":"medium"},"content_types":{"items":{"type":"string"},"type":"array","title":"Content Types","default":["character","message"]},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Keywords"},"patterns":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Patterns"},"is_active":{"type":"boolean","title":"Is Active","default":true}},"type":"object","required":["name","rule_type"],"title":"ModerationRuleCreate"},"MonthlyRevenue":{"properties":{"month":{"type":"string","title":"Month"},"revenue":{"type":"number","title":"Revenue"}},"type":"object","required":["month","revenue"],"title":"MonthlyRevenue"},"MoodInfoResponse":{"properties":{"mood_type":{"type":"string","title":"Mood Type"},"mood_emoji":{"type":"string","title":"Mood Emoji"},"one_liner":{"type":"string","title":"One Liner"},"mood_greeting":{"type":"string","title":"Mood Greeting"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["mood_type","mood_emoji","one_liner","mood_greeting","expires_at"],"title":"MoodInfoResponse","description":"기분 정보 응답 (위젯용 간단 버전)"},"MoodResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"character_id":{"type":"string","format":"uuid","title":"Character Id"},"mood_type":{"type":"string","title":"Mood Type"},"mood_intensity":{"type":"number","title":"Mood Intensity"},"one_liner":{"type":"string","title":"One Liner"},"mood_greeting":{"type":"string","title":"Mood Greeting"},"conversation_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversation Hint"},"mood_emoji":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mood Emoji"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["id","character_id","mood_type","mood_intensity","one_liner","mood_greeting","created_at","expires_at"],"title":"MoodResponse","description":"기분 응답 스키마"},"MoodTypesResponse":{"properties":{"mood_types":{"additionalProperties":true,"type":"object","title":"Mood Types"}},"type":"object","required":["mood_types"],"title":"MoodTypesResponse","description":"사용 가능한 기분 타입 목록"},"NarrativeAnalysisRequest":{"properties":{"content":{"type":"string","title":"Content"},"episode_number":{"type":"integer","title":"Episode Number"},"context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context"}},"type":"object","required":["content","episode_number"],"title":"NarrativeAnalysisRequest","description":"서사 분석 요청"},"NarrativeAnalysisResponse":{"properties":{"narrative_type":{"$ref":"#/components/schemas/NarrativeTypeEnum"},"narrative_subtype":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Narrative Subtype"},"importance_score":{"type":"number","title":"Importance Score"},"suggested_title":{"type":"string","title":"Suggested Title"},"summary":{"type":"string","title":"Summary"},"keywords":{"items":{"type":"string"},"type":"array","title":"Keywords"},"characters_detected":{"items":{"type":"string"},"type":"array","title":"Characters Detected"},"locations_detected":{"items":{"type":"string"},"type":"array","title":"Locations Detected"},"items_detected":{"items":{"type":"string"},"type":"array","title":"Items Detected"},"is_foreshadowing":{"type":"boolean","title":"Is Foreshadowing"},"foreshadowing_hints":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Foreshadowing Hints"},"related_episode_suggestions":{"items":{"type":"integer"},"type":"array","title":"Related Episode Suggestions"}},"type":"object","required":["narrative_type","narrative_subtype","importance_score","suggested_title","summary","keywords","characters_detected","locations_detected","items_detected","is_foreshadowing","foreshadowing_hints","related_episode_suggestions"],"title":"NarrativeAnalysisResponse","description":"서사 분석 응답"},"NarrativeTypeEnum":{"type":"string","enum":["foreshadowing","plot_twist","character_arc","callback","red_herring","chekhov_gun","world_building","relationship","mystery","theme","conflict","resolution","reference","note","fact","timeline","location","item","rule","quote"],"title":"NarrativeTypeEnum","description":"메모리 유형 (범용적인 분류)\n\n웹소설/시나리오:\n- foreshadowing: 복선/떡밥 (나중에 회수할 내용)\n- plot_twist: 반전 포인트\n- character_arc: 캐릭터 정보/변화\n\n범용 글쓰기:\n- world_building: 배경/맥락/세계관 설정\n- relationship: 관계/연결 정보\n- reference: 참조할 내용 (나중에 다시 언급할 것)\n- note: 일반 메모/노트"},"OneClickLearnRequest":{"properties":{"character_id":{"type":"string","format":"uuid","title":"Character Id","description":"학습시킬 캐릭터 ID"},"website_url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Website Url","description":"학습할 웹사이트 URL"}},"type":"object","required":["character_id","website_url"],"title":"OneClickLearnRequest","description":"원클릭 학습 요청"},"OperationResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"},"version_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version Id"},"version_tag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version Tag"}},"type":"object","required":["success","message"],"title":"OperationResponse","description":"작업 응답"},"OptimizationRuleCreate":{"properties":{"rule_name":{"type":"string","title":"Rule Name"},"rule_type":{"type":"string","title":"Rule Type"},"conditions":{"additionalProperties":true,"type":"object","title":"Conditions"},"actions":{"additionalProperties":true,"type":"object","title":"Actions"},"priority":{"type":"integer","title":"Priority","default":0},"is_active":{"type":"boolean","title":"Is Active","default":true},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["rule_name","rule_type","conditions","actions"],"title":"OptimizationRuleCreate"},"OptimizationSuggestionResponse":{"properties":{"type":{"type":"string","title":"Type"},"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description"},"potential_savings":{"type":"number","title":"Potential Savings"},"difficulty":{"type":"string","title":"Difficulty"},"priority":{"type":"integer","title":"Priority"}},"type":"object","required":["type","title","description","potential_savings","difficulty","priority"],"title":"OptimizationSuggestionResponse","description":"최적화 제안 응답"},"OptimizePromptRequest":{"properties":{"current_prompt":{"type":"string","title":"Current Prompt"},"target_industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Industry"},"target_audience":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Audience"}},"type":"object","required":["current_prompt"],"title":"OptimizePromptRequest","description":"프롬프트 최적화 요청"},"OptimizedContextRequest":{"properties":{"query":{"type":"string","maxLength":10000,"minLength":1,"title":"Query","description":"현재 작성 중인 내용 또는 사용자 메시지"},"current_episode":{"type":"integer","minimum":1.0,"title":"Current Episode","description":"현재 에피소드 번호"},"max_context_items":{"type":"integer","maximum":50.0,"minimum":5.0,"title":"Max Context Items","description":"최대 컨텍스트 항목 수","default":15}},"type":"object","required":["query","current_episode"],"title":"OptimizedContextRequest","description":"최적화된 컨텍스트 검색 요청"},"OptimizedContextResponse":{"properties":{"relevant_memories":{"items":{"$ref":"#/components/schemas/SemanticSearchResultItem"},"type":"array","title":"Relevant Memories"},"pending_callbacks":{"items":{"$ref":"#/components/schemas/RelatedCallbackItem"},"type":"array","title":"Pending Callbacks"},"world_building":{"items":{"$ref":"#/components/schemas/SemanticSearchResultItem"},"type":"array","title":"World Building"},"context_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context Summary"}},"type":"object","required":["relevant_memories","pending_callbacks","world_building"],"title":"OptimizedContextResponse","description":"최적화된 컨텍스트 검색 응답 (RAG 기반)"},"OrgBrandingUpdate":{"properties":{"brand_primary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Primary"},"brand_primary_light":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Primary Light"},"brand_accent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Accent"},"brand_accent_deep":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Accent Deep"},"status_success":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Success"},"status_warning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Warning"},"status_danger":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Danger"},"status_info":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Info"},"default_theme":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Theme"},"default_locale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Locale"}},"type":"object","title":"OrgBrandingUpdate"},"OrgCharacterAdd":{"properties":{"character_id":{"type":"string","format":"uuid","title":"Character Id"},"allow_edit":{"type":"boolean","title":"Allow Edit","default":true},"allow_publish":{"type":"boolean","title":"Allow Publish","default":true},"allow_delete":{"type":"boolean","title":"Allow Delete","default":false}},"type":"object","required":["character_id"],"title":"OrgCharacterAdd"},"OrgCharacterResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"character_id":{"type":"string","format":"uuid","title":"Character Id"},"allow_edit":{"type":"boolean","title":"Allow Edit"},"allow_publish":{"type":"boolean","title":"Allow Publish"},"allow_delete":{"type":"boolean","title":"Allow Delete"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"character_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Character Name"},"character_image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Character Image"},"character_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Character Description"}},"type":"object","required":["id","organization_id","character_id","allow_edit","allow_publish","allow_delete","created_at"],"title":"OrgCharacterResponse"},"OrganizationAdminUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"max_members":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Members"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"is_verified":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Verified"}},"type":"object","title":"OrganizationAdminUpdate","description":"조직 관리자 수정"},"OrganizationCreate":{"properties":{"name":{"type":"string","maxLength":100,"minLength":2,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"contact_email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Contact Email"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"org_type":{"$ref":"#/components/schemas/OrganizationType"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"}},"type":"object","required":["name","org_type"],"title":"OrganizationCreate"},"OrganizationList":{"properties":{"organizations":{"items":{"$ref":"#/components/schemas/OrganizationResponse"},"type":"array","title":"Organizations"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["organizations","total"],"title":"OrganizationList"},"OrganizationResponse":{"properties":{"name":{"type":"string","maxLength":100,"minLength":2,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"contact_email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Contact Email"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"id":{"type":"string","format":"uuid","title":"Id"},"slug":{"type":"string","title":"Slug"},"org_type":{"$ref":"#/components/schemas/OrganizationType"},"owner_id":{"type":"string","format":"uuid","title":"Owner Id"},"max_members":{"type":"integer","title":"Max Members"},"allow_member_invite":{"type":"boolean","title":"Allow Member Invite"},"is_active":{"type":"boolean","title":"Is Active"},"is_verified":{"type":"boolean","title":"Is Verified"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"member_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Member Count"},"character_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Character Count"}},"type":"object","required":["name","id","slug","org_type","owner_id","max_members","allow_member_invite","is_active","is_verified","created_at","updated_at"],"title":"OrganizationResponse"},"OrganizationType":{"type":"string","enum":["creator","buyer"],"title":"OrganizationType"},"OrganizationUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100,"minLength":2},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"contact_email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Contact Email"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"allow_member_invite":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Allow Member Invite"}},"type":"object","title":"OrganizationUpdate"},"PageInfo":{"properties":{"current_page":{"type":"integer","title":"Current Page","description":"현재 페이지"},"total_pages":{"type":"integer","title":"Total Pages","description":"전체 페이지 수"},"total_items":{"type":"integer","title":"Total Items","description":"전체 아이템 수"},"items_per_page":{"type":"integer","title":"Items Per Page","description":"페이지당 아이템 수"},"has_next":{"type":"boolean","title":"Has Next","description":"다음 페이지 존재 여부"},"has_previous":{"type":"boolean","title":"Has Previous","description":"이전 페이지 존재 여부"}},"type":"object","required":["current_page","total_pages","total_items","items_per_page","has_next","has_previous"],"title":"PageInfo","description":"페이지 정보"},"PaginatedResponse_CharacterResponse_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/CharacterResponse"},"type":"array","title":"Items","description":"데이터 목록"},"pagination":{"$ref":"#/components/schemas/PageInfo","description":"페이지네이션 정보"}},"type":"object","required":["items","pagination"],"title":"PaginatedResponse[CharacterResponse]"},"PartnershipApplicationCreate":{"properties":{"company_name":{"type":"string","maxLength":255,"minLength":1,"title":"Company Name"},"contact_person":{"type":"string","maxLength":255,"minLength":1,"title":"Contact Person"},"email":{"type":"string","maxLength":255,"title":"Email"},"phone":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Phone"},"website":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Website"},"company_size":{"type":"string","maxLength":50,"title":"Company Size"},"industry":{"type":"string","maxLength":100,"title":"Industry"},"annual_revenue":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Annual Revenue"},"use_case_description":{"type":"string","minLength":10,"title":"Use Case Description"},"expected_monthly_usage":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Expected Monthly Usage"},"integration_timeline":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Integration Timeline"},"technical_requirements":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Technical Requirements"}},"type":"object","required":["company_name","contact_person","email","company_size","industry","use_case_description"],"title":"PartnershipApplicationCreate"},"PartnershipApplicationResponse":{"properties":{"id":{"type":"string","title":"Id"},"company_name":{"type":"string","title":"Company Name"},"contact_person":{"type":"string","title":"Contact Person"},"email":{"type":"string","title":"Email"},"status":{"type":"string","title":"Status"},"use_case_description":{"type":"string","title":"Use Case Description"},"expected_monthly_usage":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expected Monthly Usage"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"admin_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Notes"}},"type":"object","required":["id","company_name","contact_person","email","status","use_case_description","expected_monthly_usage","created_at","admin_notes"],"title":"PartnershipApplicationResponse"},"PatternTestRequest":{"properties":{"text":{"type":"string","minLength":1,"title":"Text","description":"테스트할 텍스트"},"pattern_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Pattern Id"},"pattern_type":{"anyOf":[{"$ref":"#/components/schemas/PatternTypeEnum"},{"type":"null"}]}},"type":"object","required":["text"],"title":"PatternTestRequest"},"PatternTestResponse":{"properties":{"text":{"type":"string","title":"Text"},"results":{"items":{"$ref":"#/components/schemas/PatternTestResult"},"type":"array","title":"Results"},"total_importance_boost":{"type":"number","title":"Total Importance Boost"},"matched_categories":{"items":{"type":"string"},"type":"array","title":"Matched Categories"}},"type":"object","required":["text","results","total_importance_boost","matched_categories"],"title":"PatternTestResponse"},"PatternTestResult":{"properties":{"pattern_id":{"type":"string","format":"uuid","title":"Pattern Id"},"pattern_name":{"type":"string","title":"Pattern Name"},"pattern":{"type":"string","title":"Pattern"},"matched":{"type":"boolean","title":"Matched"},"importance_boost":{"type":"number","title":"Importance Boost"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"matched_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Matched Text"}},"type":"object","required":["pattern_id","pattern_name","pattern","matched","importance_boost","category"],"title":"PatternTestResult"},"PatternTypeEnum":{"type":"string","enum":["explicit_memory","important_info","time_query","emotional"],"title":"PatternTypeEnum"},"PaymentIntentCreate":{"properties":{"amount":{"type":"number","exclusiveMinimum":0.0,"title":"Amount","description":"결제 금액"},"currency":{"type":"string","title":"Currency","description":"통화","default":"usd"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"결제 설명"}},"type":"object","required":["amount"],"title":"PaymentIntentCreate"},"PaymentMethodResponse":{"properties":{"id":{"type":"string","title":"Id"},"brand":{"type":"string","title":"Brand"},"last4":{"type":"string","title":"Last4"},"exp_month":{"type":"integer","title":"Exp Month"},"exp_year":{"type":"integer","title":"Exp Year"}},"type":"object","required":["id","brand","last4","exp_month","exp_year"],"title":"PaymentMethodResponse"},"PaymentSubscriptionCreate":{"properties":{"plan_id":{"type":"string","title":"Plan Id","description":"구독할 요금제 ID"},"api_key_id":{"type":"string","title":"Api Key Id","description":"API 키 ID"},"payment_method_id":{"type":"string","title":"Payment Method Id","description":"결제 방법 ID"},"billing_cycle":{"$ref":"#/components/schemas/BillingCycle","description":"청구 주기","default":"monthly"}},"type":"object","required":["plan_id","api_key_id","payment_method_id"],"title":"PaymentSubscriptionCreate"},"PaymentSubscriptionResponse":{"properties":{"id":{"type":"string","title":"Id"},"stripe_subscription_id":{"type":"string","title":"Stripe Subscription Id"},"plan_name":{"type":"string","title":"Plan Name"},"status":{"type":"string","title":"Status"},"current_period_start":{"type":"string","format":"date-time","title":"Current Period Start"},"current_period_end":{"type":"string","format":"date-time","title":"Current Period End"},"amount":{"type":"number","title":"Amount"},"currency":{"type":"string","title":"Currency","default":"usd"}},"type":"object","required":["id","stripe_subscription_id","plan_name","status","current_period_start","current_period_end","amount"],"title":"PaymentSubscriptionResponse"},"PendingCallbacksRequest":{"properties":{"current_episode":{"type":"integer","title":"Current Episode"},"look_back_episodes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Look Back Episodes"},"importance_threshold":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Importance Threshold","default":0.0},"limit":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit","default":20}},"type":"object","required":["current_episode"],"title":"PendingCallbacksRequest","description":"미회수 복선 조회 요청"},"PendingCallbacksResponse":{"properties":{"memories":{"items":{"$ref":"#/components/schemas/StoryMemoryResponse"},"type":"array","title":"Memories"},"total_pending":{"type":"integer","title":"Total Pending"},"overdue_count":{"type":"integer","title":"Overdue Count"},"urgent_count":{"type":"integer","title":"Urgent Count"},"suggestions":{"items":{"type":"string"},"type":"array","title":"Suggestions"}},"type":"object","required":["memories","total_pending","overdue_count","urgent_count","suggestions"],"title":"PendingCallbacksResponse","description":"미회수 복선 응답"},"PermissionCheckResponse":{"properties":{"has_permission":{"type":"boolean","title":"Has Permission"},"permission":{"type":"string","title":"Permission"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","required":["has_permission","permission"],"title":"PermissionCheckResponse"},"PlanCreate":{"properties":{"code":{"type":"string","maxLength":50,"minLength":2,"title":"Code"},"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"org_type":{"type":"string","pattern":"^(creator|buyer)$","title":"Org Type"},"monthly_price":{"type":"number","title":"Monthly Price","default":0},"yearly_price":{"type":"number","title":"Yearly Price","default":0},"currency":{"type":"string","title":"Currency","default":"USD"},"max_members":{"type":"integer","title":"Max Members","default":5},"max_characters":{"type":"integer","title":"Max Characters","default":10},"max_api_keys":{"type":"integer","title":"Max Api Keys","default":3},"memory_retention_days":{"type":"integer","title":"Memory Retention Days","default":30},"max_memory_entries_per_char":{"type":"integer","title":"Max Memory Entries Per Char","default":1000},"max_memory_size_mb":{"type":"integer","title":"Max Memory Size Mb","default":100},"max_knowledge_bases":{"type":"integer","title":"Max Knowledge Bases","default":5},"max_documents_per_kb":{"type":"integer","title":"Max Documents Per Kb","default":100},"max_kb_size_mb":{"type":"integer","title":"Max Kb Size Mb","default":500},"max_crawl_pages":{"type":"integer","title":"Max Crawl Pages","default":100},"api_rate_limit_per_min":{"type":"integer","title":"Api Rate Limit Per Min","default":60},"api_rate_limit_per_day":{"type":"integer","title":"Api Rate Limit Per Day","default":10000},"max_tokens_per_month":{"type":"integer","title":"Max Tokens Per Month","default":100000},"enabled_features":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Enabled Features"},"is_active":{"type":"boolean","title":"Is Active","default":true},"is_default":{"type":"boolean","title":"Is Default","default":false}},"type":"object","required":["code","name","org_type"],"title":"PlanCreate","description":"요금제 생성"},"PlanResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"tier":{"type":"string","title":"Tier"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"price":{"type":"number","title":"Price"},"billing_cycle":{"type":"string","title":"Billing Cycle"},"currency":{"type":"string","title":"Currency"},"monthly_api_calls":{"type":"integer","title":"Monthly Api Calls"},"monthly_tokens":{"type":"integer","title":"Monthly Tokens"},"monthly_image_generations":{"type":"integer","title":"Monthly Image Generations"},"max_characters":{"type":"integer","title":"Max Characters"},"features":{"additionalProperties":true,"type":"object","title":"Features","default":{}},"is_popular":{"type":"boolean","title":"Is Popular","default":false},"trial_days":{"type":"integer","title":"Trial Days","default":0}},"type":"object","required":["id","name","tier","price","billing_cycle","currency","monthly_api_calls","monthly_tokens","monthly_image_generations","max_characters"],"title":"PlanResponse"},"PlanUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"monthly_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Monthly Price"},"yearly_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Yearly Price"},"max_members":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Members"},"max_characters":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Characters"},"max_api_keys":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Api Keys"},"memory_retention_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Memory Retention Days"},"max_memory_entries_per_char":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Memory Entries Per Char"},"max_memory_size_mb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Memory Size Mb"},"max_knowledge_bases":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Knowledge Bases"},"max_documents_per_kb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Documents Per Kb"},"max_kb_size_mb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Kb Size Mb"},"max_crawl_pages":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Crawl Pages"},"api_rate_limit_per_min":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Api Rate Limit Per Min"},"api_rate_limit_per_day":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Api Rate Limit Per Day"},"max_tokens_per_month":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Tokens Per Month"},"enabled_features":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Enabled Features"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default"}},"type":"object","title":"PlanUpdate","description":"요금제 수정"},"PlanUpgradeRequest":{"properties":{"new_plan":{"type":"string","title":"New Plan","description":"New plan type (free, basic, premium)"}},"type":"object","required":["new_plan"],"title":"PlanUpgradeRequest","description":"플랜 업그레이드 요청","example":{"new_plan":"basic"}},"PlatformCredentialsGuide":{"properties":{"platform":{"$ref":"#/components/schemas/ShoppingPlatformEnum"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"required_fields":{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array","title":"Required Fields"},"oauth_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Oauth Url"},"docs_url":{"type":"string","title":"Docs Url"}},"type":"object","required":["platform","name","description","required_fields","oauth_url","docs_url"],"title":"PlatformCredentialsGuide","description":"플랫폼별 인증 정보 가이드"},"PlatformGuidesResponse":{"properties":{"platforms":{"items":{"$ref":"#/components/schemas/PlatformCredentialsGuide"},"type":"array","title":"Platforms"}},"type":"object","required":["platforms"],"title":"PlatformGuidesResponse","description":"플랫폼 가이드 목록 응답"},"PlatformItem":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"icon":{"type":"string","title":"Icon"},"members":{"type":"string","title":"Members"},"activity":{"type":"string","title":"Activity"},"link":{"type":"string","title":"Link"},"color":{"type":"string","title":"Color"},"features":{"items":{"type":"string"},"type":"array","title":"Features"},"enabled":{"type":"boolean","title":"Enabled"}},"type":"object","required":["id","name","description","icon","members","activity","link","color","features","enabled"],"title":"PlatformItem","description":"플랫폼 항목"},"PolicyUpdate":{"properties":{"value":{"title":"Value"},"reason":{"type":"string","title":"Reason"}},"type":"object","required":["value","reason"],"title":"PolicyUpdate"},"PresetCategoryResponse":{"properties":{"name":{"type":"string","maxLength":100,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"display_order":{"type":"integer","title":"Display Order","default":0},"icon":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Icon"},"color":{"type":"string","maxLength":7,"title":"Color","default":"#6366F1"},"is_active":{"type":"boolean","title":"Is Active","default":true},"id":{"type":"string","format":"uuid","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"preset_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Preset Count","default":0}},"type":"object","required":["name","id","created_at","updated_at"],"title":"PresetCategoryResponse"},"PresetFeedbackResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"preset_id":{"type":"string","format":"uuid","title":"Preset Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"rating":{"type":"integer","title":"Rating"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"},"suggestions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Suggestions"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","preset_id","user_id","rating","comment","suggestions","created_at"],"title":"PresetFeedbackResponse","description":"피드백 응답"},"PresetSearchRequest":{"properties":{"query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query","description":"검색어 (이름, 설명, 태그)"},"category_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Category Id","description":"카테고리 필터"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags","description":"태그 필터"},"include_premium":{"type":"boolean","title":"Include Premium","description":"프리미엄 포함 여부","default":true},"limit":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit","description":"최대 결과 수","default":20}},"type":"object","title":"PresetSearchRequest"},"PresetStatistics":{"properties":{"total_presets":{"type":"integer","title":"Total Presets"},"free_presets":{"type":"integer","title":"Free Presets"},"premium_presets":{"type":"integer","title":"Premium Presets"},"total_premium_value":{"type":"number","title":"Total Premium Value"},"categories_count":{"type":"integer","title":"Categories Count"},"average_rating":{"type":"number","title":"Average Rating"},"total_uses":{"type":"integer","title":"Total Uses"}},"type":"object","required":["total_presets","free_presets","premium_presets","total_premium_value","categories_count","average_rating","total_uses"],"title":"PresetStatistics","description":"프리셋 통계"},"PressFeatureCreate":{"properties":{"media_name":{"type":"string","maxLength":200,"title":"Media Name"},"logo_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Logo Url"},"article_url":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Article Url"},"article_title":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Article Title"},"article_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Article Date"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_active":{"type":"boolean","title":"Is Active","default":true},"display_order":{"type":"integer","title":"Display Order","default":0}},"type":"object","required":["media_name"],"title":"PressFeatureCreate"},"PressFeatureResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"media_name":{"type":"string","title":"Media Name"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"article_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Article Url"},"article_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Article Title"},"article_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Article Date"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_active":{"type":"boolean","title":"Is Active"},"display_order":{"type":"integer","title":"Display Order"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","media_name","logo_url","article_url","article_title","article_date","description","is_active","display_order","created_at","updated_at"],"title":"PressFeatureResponse"},"PressFeatureUpdate":{"properties":{"media_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Media Name"},"logo_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Logo Url"},"article_url":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Article Url"},"article_title":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Article Title"},"article_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Article Date"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"display_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Display Order"}},"type":"object","title":"PressFeatureUpdate"},"PricingPlanCreate":{"properties":{"plan_name":{"type":"string","title":"Plan Name","description":"Plan identifier (e.g., 'free', 'basic', 'pro')"},"display_name":{"type":"string","title":"Display Name","description":"Display name for users"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Plan description"},"monthly_price":{"type":"number","title":"Monthly Price","description":"Monthly price in KRW","default":0.0},"vector_documents":{"type":"integer","title":"Vector Documents","description":"Monthly document limit","default":0},"vector_chunks":{"type":"integer","title":"Vector Chunks","description":"Monthly vector chunk limit","default":0},"vector_searches":{"type":"integer","title":"Vector Searches","description":"Monthly search limit","default":0},"vector_storage_mb":{"type":"number","title":"Vector Storage Mb","description":"Monthly storage limit in MB","default":0.0},"character_limit":{"type":"integer","title":"Character Limit","description":"Character creation limit","default":1},"character_per_additional":{"type":"number","title":"Character Per Additional","description":"Cost per additional character","default":0.0},"monthly_ai_credits":{"type":"integer","title":"Monthly Ai Credits","description":"Monthly AI credits included","default":0},"is_active":{"type":"boolean","title":"Is Active","description":"Whether plan is active","default":true},"is_public":{"type":"boolean","title":"Is Public","description":"Whether plan is publicly available","default":true},"sort_order":{"type":"integer","title":"Sort Order","description":"Display order","default":0},"features":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Features","description":"Plan features"}},"type":"object","required":["plan_name","display_name"],"title":"PricingPlanCreate"},"PricingPlanResponse":{"properties":{"plan_name":{"type":"string","title":"Plan Name","description":"Plan identifier (e.g., 'free', 'basic', 'pro')"},"display_name":{"type":"string","title":"Display Name","description":"Display name for users"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Plan description"},"monthly_price":{"type":"number","title":"Monthly Price","description":"Monthly price in KRW","default":0.0},"vector_documents":{"type":"integer","title":"Vector Documents","description":"Monthly document limit","default":0},"vector_chunks":{"type":"integer","title":"Vector Chunks","description":"Monthly vector chunk limit","default":0},"vector_searches":{"type":"integer","title":"Vector Searches","description":"Monthly search limit","default":0},"vector_storage_mb":{"type":"number","title":"Vector Storage Mb","description":"Monthly storage limit in MB","default":0.0},"character_limit":{"type":"integer","title":"Character Limit","description":"Character creation limit","default":1},"character_per_additional":{"type":"number","title":"Character Per Additional","description":"Cost per additional character","default":0.0},"monthly_ai_credits":{"type":"integer","title":"Monthly Ai Credits","description":"Monthly AI credits included","default":0},"is_active":{"type":"boolean","title":"Is Active","description":"Whether plan is active","default":true},"is_public":{"type":"boolean","title":"Is Public","description":"Whether plan is publicly available","default":true},"sort_order":{"type":"integer","title":"Sort Order","description":"Display order","default":0},"features":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Features","description":"Plan features"},"id":{"type":"string","title":"Id"},"vector_limits":{"additionalProperties":true,"type":"object","title":"Vector Limits"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["plan_name","display_name","id","vector_limits","created_at","updated_at"],"title":"PricingPlanResponse"},"PricingPlanUpdate":{"properties":{"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"monthly_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Monthly Price"},"vector_documents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Vector Documents"},"vector_chunks":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Vector Chunks"},"vector_searches":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Vector Searches"},"vector_storage_mb":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Vector Storage Mb"},"character_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Character Limit"},"character_per_additional":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Character Per Additional"},"monthly_ai_credits":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Monthly Ai Credits"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"is_public":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Public"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"},"features":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Features"}},"type":"object","title":"PricingPlanUpdate"},"ProactiveGreetingResponse":{"properties":{"greeting":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Greeting"},"relationship_level":{"type":"string","title":"Relationship Level"},"relationship_score":{"type":"integer","title":"Relationship Score"},"greeting_style":{"type":"string","title":"Greeting Style"},"can_use_nickname":{"type":"boolean","title":"Can Use Nickname"},"total_interactions":{"type":"integer","title":"Total Interactions"}},"type":"object","required":["relationship_level","relationship_score","greeting_style","can_use_nickname","total_interactions"],"title":"ProactiveGreetingResponse","description":"능동적 인사 응답"},"ProductBulkCreateRequest":{"properties":{"products":{"items":{"$ref":"#/components/schemas/ProductCreateRequest"},"type":"array","maxItems":100,"minItems":1,"title":"Products","description":"상품 목록"},"update_existing":{"type":"boolean","title":"Update Existing","description":"기존 상품 업데이트 여부 (product_id 기준)","default":true}},"type":"object","required":["products"],"title":"ProductBulkCreateRequest","description":"상품 일괄 생성 요청"},"ProductBulkCreateResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"total_received":{"type":"integer","title":"Total Received"},"created_count":{"type":"integer","title":"Created Count"},"updated_count":{"type":"integer","title":"Updated Count"},"failed_count":{"type":"integer","title":"Failed Count"},"errors":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Errors"}},"type":"object","required":["success","total_received","created_count","updated_count","failed_count"],"title":"ProductBulkCreateResponse","description":"상품 일괄 생성 응답"},"ProductCreateRequest":{"properties":{"product_id":{"type":"string","maxLength":255,"minLength":1,"title":"Product Id","description":"외부 시스템의 상품 ID"},"name":{"type":"string","maxLength":500,"minLength":1,"title":"Name","description":"상품명"},"description":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}],"title":"Description","description":"상품 상세 설명"},"short_description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Short Description","description":"간단 설명 (채팅용)"},"price":{"type":"number","minimum":0.0,"title":"Price","description":"판매가"},"original_price":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Original Price","description":"정가 (할인 전)"},"currency":{"type":"string","maxLength":10,"title":"Currency","description":"통화","default":"KRW"},"discount_rate":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Discount Rate","description":"할인율 (%)"},"image_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Image Url","description":"대표 이미지 URL"},"thumbnail_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Thumbnail Url","description":"썸네일 URL"},"additional_images":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":20},{"type":"null"}],"title":"Additional Images","description":"추가 이미지 목록"},"product_url":{"type":"string","maxLength":2048,"title":"Product Url","description":"상품 페이지 URL"},"purchase_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Purchase Url","description":"직접 구매 URL"},"video_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Video Url","description":"상품 영상 URL"},"category":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Category","description":"주 카테고리"},"subcategory":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Subcategory","description":"하위 카테고리"},"categories":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":10},{"type":"null"}],"title":"Categories","description":"계층적 카테고리"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":20},{"type":"null"}],"title":"Tags","description":"태그 목록"},"brand":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Brand","description":"브랜드"},"stock_quantity":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Stock Quantity","description":"재고 수량"},"is_in_stock":{"type":"boolean","title":"Is In Stock","description":"재고 여부","default":true},"options":{"anyOf":[{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object"},{"type":"null"}],"title":"Options","description":"상품 옵션"},"variants":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Variants","description":"변형 상품"},"attributes":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Attributes","description":"상품 속성"},"specifications":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Specifications","description":"상세 스펙"},"rating":{"anyOf":[{"type":"number","maximum":5.0,"minimum":0.0},{"type":"null"}],"title":"Rating","description":"평균 평점"},"review_count":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Review Count","description":"리뷰 수"},"sales_count":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Sales Count","description":"판매량"},"is_best_seller":{"type":"boolean","title":"Is Best Seller","description":"베스트셀러 여부","default":false},"is_new_arrival":{"type":"boolean","title":"Is New Arrival","description":"신상품 여부","default":false},"is_featured":{"type":"boolean","title":"Is Featured","description":"추천 상품 여부","default":false},"shipping_info":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Shipping Info","description":"배송 정보"},"status":{"$ref":"#/components/schemas/ProductStatusEnum","default":"active"},"extra_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Extra Metadata","description":"추가 메타데이터"},"related_product_ids":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":20},{"type":"null"}],"title":"Related Product Ids","description":"관련 상품 ID"},"frequently_bought_together":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":10},{"type":"null"}],"title":"Frequently Bought Together","description":"함께 구매 상품"}},"type":"object","required":["product_id","name","price","product_url"],"title":"ProductCreateRequest","description":"상품 생성 요청","example":{"brand":"TechBrand","category":"전자제품","currency":"KRW","description":"고음질 블루투스 5.0 무선 이어폰입니다.","discount_rate":31,"image_url":"https://example.com/images/earbuds.jpg","is_in_stock":true,"name":"프리미엄 무선 이어폰","original_price":129000,"price":89000,"product_id":"SKU-12345","product_url":"https://example.com/products/earbuds","rating":4.5,"review_count":128,"short_description":"프리미엄 무선 이어폰 - 노이즈 캔슬링","subcategory":"이어폰","tags":["무선","블루투스","노이즈캔슬링"]}},"ProductListResponse":{"properties":{"products":{"items":{"$ref":"#/components/schemas/ProductResponse"},"type":"array","title":"Products"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"has_next":{"type":"boolean","title":"Has Next"}},"type":"object","required":["products","total","page","page_size","has_next"],"title":"ProductListResponse","description":"상품 목록 응답"},"ProductRecommendationRequest":{"properties":{"conversation_context":{"type":"string","maxLength":5000,"minLength":1,"title":"Conversation Context","description":"대화 컨텍스트"},"user_preferences":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"User Preferences","description":"사용자 선호도"},"limit":{"type":"integer","maximum":10.0,"minimum":1.0,"title":"Limit","description":"추천 수","default":3},"exclude_product_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Exclude Product Ids","description":"제외할 상품 ID"}},"type":"object","required":["conversation_context"],"title":"ProductRecommendationRequest","description":"상품 추천 요청 (채팅 컨텍스트 기반)"},"ProductRecommendationResponse":{"properties":{"recommendations":{"items":{"$ref":"#/components/schemas/ProductSearchResult"},"type":"array","title":"Recommendations"},"recommendation_context":{"type":"string","title":"Recommendation Context","description":"추천 맥락 설명"},"total_recommendations":{"type":"integer","title":"Total Recommendations"}},"type":"object","required":["recommendations","recommendation_context","total_recommendations"],"title":"ProductRecommendationResponse","description":"상품 추천 응답"},"ProductResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"character_id":{"type":"string","format":"uuid","title":"Character Id"},"owner_id":{"type":"string","format":"uuid","title":"Owner Id"},"product_id":{"type":"string","title":"Product Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"short_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Short Description"},"price":{"type":"number","title":"Price"},"original_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Original Price"},"currency":{"type":"string","title":"Currency","default":"KRW"},"discount_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Discount Rate"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"thumbnail_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail Url"},"additional_images":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Additional Images"},"product_url":{"type":"string","title":"Product Url"},"purchase_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Purchase Url"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"subcategory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subcategory"},"categories":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Categories"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand"},"stock_quantity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stock Quantity"},"is_in_stock":{"type":"boolean","title":"Is In Stock","default":true},"options":{"anyOf":[{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object"},{"type":"null"}],"title":"Options"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"review_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Review Count"},"sales_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sales Count"},"is_best_seller":{"type":"boolean","title":"Is Best Seller","default":false},"is_new_arrival":{"type":"boolean","title":"Is New Arrival","default":false},"is_featured":{"type":"boolean","title":"Is Featured","default":false},"shipping_info":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Shipping Info"},"status":{"$ref":"#/components/schemas/ProductStatusEnum","default":"active"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","character_id","owner_id","product_id","name","price","product_url","created_at"],"title":"ProductResponse","description":"상품 응답"},"ProductSearchRequest":{"properties":{"query":{"type":"string","maxLength":500,"minLength":1,"title":"Query","description":"검색 쿼리"},"limit":{"type":"integer","maximum":20.0,"minimum":1.0,"title":"Limit","description":"최대 결과 수","default":5},"min_similarity":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Min Similarity","description":"최소 유사도","default":0.3},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category","description":"주 카테고리 필터"},"subcategory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subcategory","description":"서브 카테고리 필터"},"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand","description":"브랜드 필터"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags","description":"태그 필터 (OR 조건)"},"min_price":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Min Price","description":"최소 가격"},"max_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Price","description":"최대 가격"},"has_discount":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Discount","description":"할인 상품만"},"min_discount_rate":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Min Discount Rate","description":"최소 할인율"},"in_stock_only":{"type":"boolean","title":"In Stock Only","description":"재고 있는 상품만","default":false},"is_best_seller":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Best Seller","description":"베스트셀러만"},"is_new_arrival":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is New Arrival","description":"신상품만"},"is_featured":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Featured","description":"추천 상품만"},"min_rating":{"anyOf":[{"type":"number","maximum":5.0,"minimum":0.0},{"type":"null"}],"title":"Min Rating","description":"최소 평점"},"min_review_count":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Min Review Count","description":"최소 리뷰 수"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source","description":"소스 필터 (cafe24, naver_smartstore, shopify, manual, api)"},"sort_by":{"anyOf":[{"type":"string","pattern":"^(price|rating|sales|newest|discount|popularity)$"},{"type":"null"}],"title":"Sort By","description":"정렬 기준 (기본값: popularity=인기순)","default":"popularity"},"sort_order":{"type":"string","pattern":"^(asc|desc)$","title":"Sort Order","description":"정렬 순서","default":"desc"},"popularity_weights":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Popularity Weights","description":"인기순 가중치 커스텀. 예: {sales: 0.5, reviews: 0.2, rating: 0.2, best_seller: 0.1, featured: 0.0}"}},"type":"object","required":["query"],"title":"ProductSearchRequest","description":"상품 검색 요청\n\n외부 쇼핑몰(카페24, 네이버, Shopify)에서 가져온 상품도 동일하게 검색 가능"},"ProductSearchResponse":{"properties":{"query":{"type":"string","title":"Query"},"character_id":{"type":"string","format":"uuid","title":"Character Id"},"results":{"items":{"$ref":"#/components/schemas/ProductSearchResult"},"type":"array","title":"Results"},"total_results":{"type":"integer","title":"Total Results"},"search_duration_ms":{"type":"integer","title":"Search Duration Ms"},"filters_applied":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Filters Applied"}},"type":"object","required":["query","character_id","results","total_results","search_duration_ms"],"title":"ProductSearchResponse","description":"상품 검색 응답"},"ProductSearchResult":{"properties":{"product":{"$ref":"#/components/schemas/ProductResponse"},"similarity_score":{"type":"number","title":"Similarity Score","description":"유사도 점수 (0-1)"},"match_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Match Reason","description":"매칭 이유"}},"type":"object","required":["product","similarity_score"],"title":"ProductSearchResult","description":"개별 상품 검색 결과"},"ProductStatsResponse":{"properties":{"total_products":{"type":"integer","title":"Total Products"},"active_products":{"type":"integer","title":"Active Products"},"out_of_stock_products":{"type":"integer","title":"Out Of Stock Products"},"total_categories":{"type":"integer","title":"Total Categories"},"total_brands":{"type":"integer","title":"Total Brands"},"avg_price":{"type":"number","title":"Avg Price"},"min_price":{"type":"number","title":"Min Price"},"max_price":{"type":"number","title":"Max Price"},"avg_rating":{"type":"number","title":"Avg Rating"},"products_with_rating":{"type":"integer","title":"Products With Rating"},"total_recommendations":{"type":"integer","title":"Total Recommendations"},"recommendation_clicks":{"type":"integer","title":"Recommendation Clicks"},"recommendation_purchases":{"type":"integer","title":"Recommendation Purchases"},"recommendation_click_rate":{"type":"number","title":"Recommendation Click Rate"},"recommendation_conversion_rate":{"type":"number","title":"Recommendation Conversion Rate"},"products_added_today":{"type":"integer","title":"Products Added Today"},"products_added_this_week":{"type":"integer","title":"Products Added This Week"},"products_added_this_month":{"type":"integer","title":"Products Added This Month"},"last_sync_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Sync At"}},"type":"object","required":["total_products","active_products","out_of_stock_products","total_categories","total_brands","avg_price","min_price","max_price","avg_rating","products_with_rating","total_recommendations","recommendation_clicks","recommendation_purchases","recommendation_click_rate","recommendation_conversion_rate","products_added_today","products_added_this_week","products_added_this_month"],"title":"ProductStatsResponse","description":"상품 통계 응답"},"ProductStatusEnum":{"type":"string","enum":["active","inactive","out_of_stock","discontinued","pending"],"title":"ProductStatusEnum","description":"상품 상태"},"ProductUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}],"title":"Description"},"short_description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Short Description"},"price":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Price"},"original_price":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Original Price"},"currency":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"Currency"},"discount_rate":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Discount Rate"},"image_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Image Url"},"thumbnail_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Thumbnail Url"},"additional_images":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":20},{"type":"null"}],"title":"Additional Images"},"product_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Product Url"},"purchase_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Purchase Url"},"category":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Category"},"subcategory":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Subcategory"},"categories":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":10},{"type":"null"}],"title":"Categories"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":20},{"type":"null"}],"title":"Tags"},"brand":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Brand"},"stock_quantity":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Stock Quantity"},"is_in_stock":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is In Stock"},"options":{"anyOf":[{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object"},{"type":"null"}],"title":"Options"},"variants":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Variants"},"attributes":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Attributes"},"specifications":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Specifications"},"rating":{"anyOf":[{"type":"number","maximum":5.0,"minimum":0.0},{"type":"null"}],"title":"Rating"},"review_count":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Review Count"},"sales_count":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Sales Count"},"is_best_seller":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Best Seller"},"is_new_arrival":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is New Arrival"},"is_featured":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Featured"},"shipping_info":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Shipping Info"},"status":{"anyOf":[{"$ref":"#/components/schemas/ProductStatusEnum"},{"type":"null"}]},"extra_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Extra Metadata"},"related_product_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Related Product Ids"}},"type":"object","title":"ProductUpdateRequest","description":"상품 수정 요청"},"ProjectAPIKeyHandoffResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"has_slack_handoff":{"type":"boolean","title":"Has Slack Handoff"},"slack_webhook_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slack Webhook Hint"}},"type":"object","required":["id","has_slack_handoff"],"title":"ProjectAPIKeyHandoffResponse"},"ProjectAPIKeyResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"project_id":{"type":"string","format":"uuid","title":"Project Id"},"project_name":{"type":"string","title":"Project Name"},"key_name":{"type":"string","title":"Key Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"allowed_scopes":{"items":{"type":"string"},"type":"array","title":"Allowed Scopes"},"rate_limit_per_minute":{"type":"integer","title":"Rate Limit Per Minute"},"rate_limit_per_hour":{"type":"integer","title":"Rate Limit Per Hour"},"rate_limit_per_day":{"type":"integer","title":"Rate Limit Per Day"},"allowed_domains":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Domains"},"status":{"type":"string","title":"Status"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"total_requests":{"type":"integer","title":"Total Requests","default":0},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"llm_provider":{"type":"string","title":"Llm Provider","default":"platform"},"llm_model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Llm Model Id"},"use_byok":{"type":"boolean","title":"Use Byok","default":false},"require_user_validation":{"type":"boolean","title":"Require User Validation","default":false},"has_signing_secret":{"type":"boolean","title":"Has Signing Secret","default":false},"has_slack_handoff":{"type":"boolean","title":"Has Slack Handoff","default":false}},"type":"object","required":["id","project_id","project_name","key_name","key_prefix","allowed_scopes","rate_limit_per_minute","rate_limit_per_hour","rate_limit_per_day","status","created_at"],"title":"ProjectAPIKeyResponse"},"ProjectAPIKeySecurityResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"require_user_validation":{"type":"boolean","title":"Require User Validation"},"has_signing_secret":{"type":"boolean","title":"Has Signing Secret"}},"type":"object","required":["id","require_user_validation","has_signing_secret"],"title":"ProjectAPIKeySecurityResponse"},"ProjectCharacterInfo":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"greeting":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Greeting"},"mood_greeting":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mood Greeting"},"mood_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mood Type"},"mood_emoji":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mood Emoji"},"is_primary":{"type":"boolean","title":"Is Primary","default":false},"display_order":{"type":"integer","title":"Display Order","default":0},"enable_emotional_images":{"type":"boolean","title":"Enable Emotional Images","default":false}},"type":"object","required":["id","name"],"title":"ProjectCharacterInfo","description":"프로젝트 캐릭터 정보"},"ProjectCharacterResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"project_id":{"type":"string","format":"uuid","title":"Project Id"},"character_id":{"type":"string","format":"uuid","title":"Character Id"},"character_name":{"type":"string","title":"Character Name"},"character_avatar":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Character Avatar"},"character_greeting":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Character Greeting"},"is_primary":{"type":"boolean","title":"Is Primary"},"access_type":{"type":"string","title":"Access Type"},"display_order":{"type":"integer","title":"Display Order"},"can_modify_knowledge":{"type":"boolean","title":"Can Modify Knowledge"},"can_modify_settings":{"type":"boolean","title":"Can Modify Settings"},"total_conversations":{"type":"integer","title":"Total Conversations"},"total_messages":{"type":"integer","title":"Total Messages"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","project_id","character_id","character_name","character_avatar","is_primary","access_type","display_order","can_modify_knowledge","can_modify_settings","total_conversations","total_messages","created_at"],"title":"ProjectCharacterResponse"},"ProjectInfoResponse":{"properties":{"project_id":{"type":"string","title":"Project Id"},"project_name":{"type":"string","title":"Project Name"},"characters":{"items":{"$ref":"#/components/schemas/ProjectCharacterInfo"},"type":"array","title":"Characters"},"primary_character_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Character Id"},"settings":{"additionalProperties":true,"type":"object","title":"Settings","default":{}}},"type":"object","required":["project_id","project_name","characters"],"title":"ProjectInfoResponse","description":"프로젝트 정보 응답"},"ProjectKnowledgeListResponse":{"properties":{"knowledge_items":{"items":{"$ref":"#/components/schemas/ProjectKnowledgeResponse"},"type":"array","title":"Knowledge Items"},"total_count":{"type":"integer","title":"Total Count"}},"type":"object","required":["knowledge_items","total_count"],"title":"ProjectKnowledgeListResponse"},"ProjectKnowledgeResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"title":{"type":"string","title":"Title"},"content_preview":{"type":"string","title":"Content Preview"},"content_type":{"type":"string","title":"Content Type"},"source_type":{"type":"string","title":"Source Type"},"file_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Path"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"processing_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Processing Status"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","title","content_preview","content_type","source_type","file_path","tags","created_at"],"title":"ProjectKnowledgeResponse"},"ProjectResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"project_type":{"type":"string","title":"Project Type"},"site_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Url"},"is_active":{"type":"boolean","title":"Is Active"},"character_count":{"type":"integer","title":"Character Count"},"total_conversations":{"type":"integer","title":"Total Conversations"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"primary_character":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Primary Character"}},"type":"object","required":["id","name","description","project_type","site_url","is_active","character_count","total_conversations","created_at"],"title":"ProjectResponse"},"PromptDetailResponse":{"properties":{"template":{"$ref":"#/components/schemas/AdminPromptTemplateResponse"},"history":{"items":{"$ref":"#/components/schemas/AdminPromptHistoryResponse"},"type":"array","title":"History"}},"type":"object","required":["template","history"],"title":"PromptDetailResponse"},"PromptHistoryResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"template_id":{"type":"string","format":"uuid","title":"Template Id"},"version":{"type":"integer","title":"Version"},"system_prompt":{"type":"string","title":"System Prompt"},"user_prompt_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Prompt Template"},"changed_at":{"type":"string","title":"Changed At"},"change_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Change Reason"}},"type":"object","required":["id","template_id","version","system_prompt","user_prompt_template","changed_at","change_reason"],"title":"PromptHistoryResponse","description":"프롬프트 변경 이력 응답"},"PromptTemplateCreate":{"properties":{"category":{"type":"string","title":"Category","description":"character_creation or chat_system"},"name":{"type":"string","title":"Name","description":"Template name"},"system_prompt":{"type":"string","title":"System Prompt","description":"System prompt"},"user_prompt_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Prompt Template","description":"User prompt template with {{variables}}"},"variables":{"items":{"$ref":"#/components/schemas/VariableSchema"},"type":"array","title":"Variables","description":"Variable definitions"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","description":"AI model to use","default":"openai/gpt-4o-mini"},"temperature":{"type":"number","maximum":2.0,"minimum":0.0,"title":"Temperature","default":0.7},"max_tokens":{"type":"integer","maximum":4000.0,"minimum":100.0,"title":"Max Tokens","default":1000}},"type":"object","required":["category","name","system_prompt"],"title":"PromptTemplateCreate","description":"프롬프트 템플릿 생성"},"PromptTemplateResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"category":{"type":"string","title":"Category"},"name":{"type":"string","title":"Name"},"version":{"type":"integer","title":"Version"},"is_active":{"type":"boolean","title":"Is Active"},"system_prompt":{"type":"string","title":"System Prompt"},"user_prompt_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Prompt Template"},"variables":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Variables"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"temperature":{"type":"number","title":"Temperature"},"max_tokens":{"type":"integer","title":"Max Tokens"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["id","category","name","version","is_active","system_prompt","user_prompt_template","variables","description","model","temperature","max_tokens","created_at","updated_at"],"title":"PromptTemplateResponse","description":"프롬프트 템플릿 응답"},"PromptTemplateUpdate":{"properties":{"system_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"System Prompt"},"user_prompt_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Prompt Template"},"variables":{"anyOf":[{"items":{"$ref":"#/components/schemas/VariableSchema"},"type":"array"},{"type":"null"}],"title":"Variables"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"temperature":{"anyOf":[{"type":"number","maximum":2.0,"minimum":0.0},{"type":"null"}],"title":"Temperature"},"max_tokens":{"anyOf":[{"type":"integer","maximum":4000.0,"minimum":100.0},{"type":"null"}],"title":"Max Tokens"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"change_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Change Reason","description":"Reason for the change"}},"type":"object","title":"PromptTemplateUpdate","description":"프롬프트 템플릿 수정"},"ProviderStatusResponse":{"properties":{"provider":{"type":"string","title":"Provider"},"model":{"type":"string","title":"Model"},"is_available":{"type":"boolean","title":"Is Available"},"health_status":{"type":"string","title":"Health Status"},"last_check":{"type":"string","title":"Last Check"},"avg_response_time_ms":{"type":"integer","title":"Avg Response Time Ms"},"success_rate":{"type":"number","title":"Success Rate"},"error_rate":{"type":"number","title":"Error Rate"},"daily_quota_used":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Daily Quota Used"},"daily_quota_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Daily Quota Limit"}},"type":"object","required":["provider","model","is_available","health_status","last_check","avg_response_time_ms","success_rate","error_rate","daily_quota_used","daily_quota_limit"],"title":"ProviderStatusResponse"},"PublicChatRequest":{"properties":{"message":{"type":"string","maxLength":2000,"minLength":1,"title":"Message"},"language":{"anyOf":[{"type":"string","enum":["ko","en","ja","zh"]},{"type":"null"}],"title":"Language"},"regenerate_message_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Regenerate Message Id"},"image_urls":{"items":{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},"type":"array","maxItems":5,"title":"Image Urls"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"conversation_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conversation Id"},"emotion_preset":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Emotion Preset"},"emotion_intensity":{"type":"number","title":"Emotion Intensity","default":0.8},"tone_preset":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tone Preset"}},"type":"object","required":["message"],"title":"PublicChatRequest"},"PublicPressFeatureResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"media_name":{"type":"string","title":"Media Name"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"article_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Article Url"},"article_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Article Title"},"article_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Article Date"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["id","media_name","logo_url","article_url","article_title","article_date","description"],"title":"PublicPressFeatureResponse"},"PublicTestimonialResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"position":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Position"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"},"content":{"type":"string","title":"Content"},"rating":{"type":"integer","title":"Rating"}},"type":"object","required":["id","name","company","position","avatar_url","content","rating"],"title":"PublicTestimonialResponse"},"PurchaseRequest":{"properties":{"purchase_type":{"type":"string","title":"Purchase Type","description":"구매 타입","default":"package"},"selected_tier":{"type":"string","title":"Selected Tier","description":"선택된 티어","default":"basic"},"discount_amount":{"type":"number","title":"Discount Amount","description":"할인 금액","default":0.0},"service_details":{"additionalProperties":true,"type":"object","title":"Service Details","description":"서비스 세부사항"},"custom_requirements":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Requirements","description":"맞춤 요구사항"}},"type":"object","title":"PurchaseRequest","description":"구매 요청"},"PurchaseResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"buyer_id":{"type":"string","format":"uuid","title":"Buyer Id"},"character_id":{"type":"string","format":"uuid","title":"Character Id"},"listing_id":{"type":"string","format":"uuid","title":"Listing Id"},"purchase_type":{"type":"string","title":"Purchase Type"},"selected_tier":{"type":"string","title":"Selected Tier"},"license_type":{"type":"string","title":"License Type"},"original_price":{"type":"number","title":"Original Price"},"discount_amount":{"type":"number","title":"Discount Amount"},"final_amount":{"type":"number","title":"Final Amount"},"platform_fee":{"type":"number","title":"Platform Fee"},"seller_payout":{"type":"number","title":"Seller Payout"},"status":{"type":"string","title":"Status"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","buyer_id","character_id","listing_id","purchase_type","selected_tier","license_type","original_price","discount_amount","final_amount","platform_fee","seller_payout","status","created_at"],"title":"PurchaseResponse","description":"구매 응답"},"PurchaseReviewCreate":{"properties":{"overall_rating":{"type":"integer","maximum":5.0,"minimum":1.0,"title":"Overall Rating","description":"전체 평점"},"communication_rating":{"anyOf":[{"type":"integer","maximum":5.0,"minimum":1.0},{"type":"null"}],"title":"Communication Rating","description":"소통 평점"},"quality_rating":{"anyOf":[{"type":"integer","maximum":5.0,"minimum":1.0},{"type":"null"}],"title":"Quality Rating","description":"품질 평점"},"timeliness_rating":{"anyOf":[{"type":"integer","maximum":5.0,"minimum":1.0},{"type":"null"}],"title":"Timeliness Rating","description":"시간 준수 평점"},"value_rating":{"anyOf":[{"type":"integer","maximum":5.0,"minimum":1.0},{"type":"null"}],"title":"Value Rating","description":"가치 평점"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"후기 제목"},"review_text":{"type":"string","title":"Review Text","description":"후기 내용"},"pros":{"items":{"type":"string"},"type":"array","title":"Pros","description":"장점"},"cons":{"items":{"type":"string"},"type":"array","title":"Cons","description":"단점"},"would_purchase_again":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Would Purchase Again","description":"재구매 의향"},"would_recommend":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Would Recommend","description":"추천 의향"}},"type":"object","required":["overall_rating","review_text"],"title":"PurchaseReviewCreate","description":"구매 후기 생성 요청"},"PurchaseReviewResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"purchase_id":{"type":"string","format":"uuid","title":"Purchase Id"},"reviewer_id":{"type":"string","format":"uuid","title":"Reviewer Id"},"overall_rating":{"type":"integer","title":"Overall Rating"},"communication_rating":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Communication Rating"},"quality_rating":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quality Rating"},"timeliness_rating":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Timeliness Rating"},"value_rating":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Value Rating"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"review_text":{"type":"string","title":"Review Text"},"pros":{"items":{"type":"string"},"type":"array","title":"Pros"},"cons":{"items":{"type":"string"},"type":"array","title":"Cons"},"would_purchase_again":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Would Purchase Again"},"would_recommend":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Would Recommend"},"is_verified":{"type":"boolean","title":"Is Verified"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","purchase_id","reviewer_id","overall_rating","communication_rating","quality_rating","timeliness_rating","value_rating","title","review_text","pros","cons","would_purchase_again","would_recommend","is_verified","created_at"],"title":"PurchaseReviewResponse","description":"구매 후기 응답"},"QueryRequest":{"properties":{"query":{"type":"string","title":"Query"},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit","default":5}},"type":"object","required":["query"],"title":"QueryRequest"},"QuickCharacterCreate":{"properties":{"description":{"type":"string","title":"Description"},"auto_generate_emotional_images":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Auto Generate Emotional Images","default":false},"emotional_image_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Emotional Image Method","default":"stability_inpaint"}},"type":"object","required":["description"],"title":"QuickCharacterCreate","description":"간편 캐릭터 생성 - 한 줄 설명만 입력"},"QuotaOverride":{"properties":{"custom_limits":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Custom Limits"}},"type":"object","title":"QuotaOverride","description":"쿼터 오버라이드"},"QuotaResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"plan_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Name"},"max_members":{"type":"integer","title":"Max Members"},"max_characters":{"type":"integer","title":"Max Characters"},"max_api_keys":{"type":"integer","title":"Max Api Keys"},"memory_retention_days":{"type":"integer","title":"Memory Retention Days"},"max_memory_entries_per_char":{"type":"integer","title":"Max Memory Entries Per Char"},"max_knowledge_bases":{"type":"integer","title":"Max Knowledge Bases"},"api_rate_limit_per_min":{"type":"integer","title":"Api Rate Limit Per Min"},"max_tokens_per_month":{"type":"integer","title":"Max Tokens Per Month"},"current_members":{"type":"integer","title":"Current Members"},"current_characters":{"type":"integer","title":"Current Characters"},"current_api_keys":{"type":"integer","title":"Current Api Keys"},"memory_entries_used":{"type":"integer","title":"Memory Entries Used"},"knowledge_bases_used":{"type":"integer","title":"Knowledge Bases Used"},"api_requests_this_month":{"type":"integer","title":"Api Requests This Month"},"tokens_used_this_month":{"type":"integer","title":"Tokens Used This Month"},"members_usage_percent":{"type":"number","title":"Members Usage Percent"},"characters_usage_percent":{"type":"number","title":"Characters Usage Percent"},"tokens_usage_percent":{"type":"number","title":"Tokens Usage Percent"}},"type":"object","required":["id","organization_id","max_members","max_characters","max_api_keys","memory_retention_days","max_memory_entries_per_char","max_knowledge_bases","api_rate_limit_per_min","max_tokens_per_month","current_members","current_characters","current_api_keys","memory_entries_used","knowledge_bases_used","api_requests_this_month","tokens_used_this_month","members_usage_percent","characters_usage_percent","tokens_usage_percent"],"title":"QuotaResponse"},"QuotaStatusResponse":{"properties":{"api_key_id":{"type":"string","title":"Api Key Id"},"user_plan":{"type":"string","title":"User Plan"},"limits":{"additionalProperties":{"$ref":"#/components/schemas/RateLimitInfo"},"type":"object","title":"Limits"},"generated_at":{"type":"string","title":"Generated At"}},"type":"object","required":["api_key_id","user_plan","limits","generated_at"],"title":"QuotaStatusResponse"},"RAGHealthResponse":{"properties":{"healthy":{"type":"boolean","title":"Healthy"},"timestamp":{"type":"string","title":"Timestamp"},"subsystems":{"items":{"$ref":"#/components/schemas/SubsystemHealth"},"type":"array","title":"Subsystems"},"cache_summary":{"additionalProperties":true,"type":"object","title":"Cache Summary"}},"type":"object","required":["healthy","timestamp","subsystems","cache_summary"],"title":"RAGHealthResponse"},"RateLimitConfigRequest":{"properties":{"limit_type":{"type":"string","title":"Limit Type"},"requests_per_window":{"type":"integer","title":"Requests Per Window"},"window_seconds":{"type":"integer","title":"Window Seconds"},"enabled":{"type":"boolean","title":"Enabled","default":true},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["limit_type","requests_per_window","window_seconds"],"title":"RateLimitConfigRequest","description":"Rate Limit 설정 요청"},"RateLimitConfigResponse":{"properties":{"id":{"type":"string","title":"Id"},"limit_type":{"type":"string","title":"Limit Type"},"requests_per_window":{"type":"integer","title":"Requests Per Window"},"window_seconds":{"type":"integer","title":"Window Seconds"},"enabled":{"type":"boolean","title":"Enabled"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["id","limit_type","requests_per_window","window_seconds","enabled","description","created_at","updated_at"],"title":"RateLimitConfigResponse","description":"Rate Limit 설정 응답"},"RateLimitInfo":{"properties":{"limit_type":{"type":"string","title":"Limit Type"},"current_usage":{"type":"integer","title":"Current Usage"},"limit_value":{"type":"integer","title":"Limit Value"},"remaining":{"type":"integer","title":"Remaining"},"reset_time":{"type":"string","title":"Reset Time"},"percentage_used":{"type":"number","title":"Percentage Used"}},"type":"object","required":["limit_type","current_usage","limit_value","remaining","reset_time","percentage_used"],"title":"RateLimitInfo"},"RateLimitTestRequest":{"properties":{"api_key_id":{"type":"string","title":"Api Key Id","description":"테스트할 API 키 ID"},"request_count":{"type":"integer","maximum":100.0,"exclusiveMinimum":0.0,"title":"Request Count","description":"요청 수","default":1},"request_cost":{"type":"number","exclusiveMinimum":0.0,"title":"Request Cost","description":"요청 비용","default":1.0},"endpoint_type":{"type":"string","title":"Endpoint Type","description":"엔드포인트 타입","default":"general"}},"type":"object","required":["api_key_id"],"title":"RateLimitTestRequest"},"RateLimitUsageStatsResponse":{"properties":{"time_range":{"type":"string","title":"Time Range"},"statistics":{"additionalProperties":{"type":"integer"},"type":"object","title":"Statistics"},"generated_at":{"type":"string","title":"Generated At"}},"type":"object","required":["time_range","statistics","generated_at"],"title":"RateLimitUsageStatsResponse"},"RatePresetRequest":{"properties":{"rating":{"type":"number","maximum":5.0,"minimum":1.0,"title":"Rating","description":"평점 (1.0 ~ 5.0)"}},"type":"object","required":["rating"],"title":"RatePresetRequest","example":{"rating":4.5}},"RefundCreate":{"properties":{"transaction_id":{"type":"string","format":"uuid","title":"Transaction Id"},"amount":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Amount"},"reason":{"type":"string","title":"Reason"},"reason_details":{"type":"string","title":"Reason Details"}},"type":"object","required":["transaction_id","amount","reason","reason_details"],"title":"RefundCreate","description":"환불 요청"},"RefundRequest":{"properties":{"purchase_id":{"type":"string","title":"Purchase Id"},"reason":{"type":"string","title":"Reason"},"amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Amount"}},"type":"object","required":["purchase_id","reason"],"title":"RefundRequest"},"RefundRequestBody":{"properties":{"payment_id":{"type":"string","title":"Payment Id","description":"Stripe payment_intent_id (pi_...) 또는 charge_id (ch_...)"},"reason":{"type":"string","maxLength":500,"minLength":1,"title":"Reason"},"amount":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Amount","description":"부분 환불 금액 (minor units, 미지정 시 전액)"}},"type":"object","required":["payment_id","reason"],"title":"RefundRequestBody"},"RegenerateEmotionRequest":{"properties":{"generation_method":{"type":"string","title":"Generation Method","default":"google_imagen"}},"type":"object","title":"RegenerateEmotionRequest"},"RelatedCallbackItem":{"properties":{"id":{"type":"string","title":"Id"},"episode_number":{"type":"integer","title":"Episode Number"},"title":{"type":"string","title":"Title"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"importance_score":{"type":"number","title":"Importance Score"},"similarity":{"type":"number","title":"Similarity"},"episode_gap":{"type":"integer","title":"Episode Gap"},"suggestion":{"type":"string","title":"Suggestion"}},"type":"object","required":["id","episode_number","title","importance_score","similarity","episode_gap","suggestion"],"title":"RelatedCallbackItem","description":"관련 미회수 복선 항목"},"RelatedCallbacksRequest":{"properties":{"query":{"type":"string","maxLength":5000,"minLength":1,"title":"Query","description":"현재 작성 중인 내용"},"current_episode":{"type":"integer","minimum":1.0,"title":"Current Episode","description":"현재 에피소드 번호"},"limit":{"type":"integer","maximum":20.0,"minimum":1.0,"title":"Limit","default":5}},"type":"object","required":["query","current_episode"],"title":"RelatedCallbacksRequest","description":"관련 미회수 복선 검색 요청"},"RelatedCallbacksResponse":{"properties":{"callbacks":{"items":{"$ref":"#/components/schemas/RelatedCallbackItem"},"type":"array","title":"Callbacks"},"total_found":{"type":"integer","title":"Total Found"},"suggestion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Suggestion"}},"type":"object","required":["callbacks","total_found"],"title":"RelatedCallbacksResponse","description":"관련 미회수 복선 검색 응답"},"ReminiscenceResponse":{"properties":{"favorite_id":{"type":"string","format":"uuid","title":"Favorite Id"},"reminiscence_context":{"type":"string","title":"Reminiscence Context"},"related_memories":{"items":{"$ref":"#/components/schemas/MemorySearchResult"},"type":"array","title":"Related Memories"},"emotional_connection":{"additionalProperties":true,"type":"object","title":"Emotional Connection"},"character_response":{"type":"string","title":"Character Response"},"triggered_at":{"type":"string","format":"date-time","title":"Triggered At"}},"type":"object","required":["favorite_id","reminiscence_context","related_memories","emotional_connection","character_response","triggered_at"],"title":"ReminiscenceResponse"},"ReportExportRequest":{"properties":{"report_type":{"type":"string","title":"Report Type","description":"리포트 타입"},"format":{"type":"string","title":"Format","description":"내보내기 형식","default":"json"},"start_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date","description":"시작 날짜"},"end_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date","description":"종료 날짜"},"include_raw_data":{"type":"boolean","title":"Include Raw Data","description":"원시 데이터 포함 여부","default":false}},"type":"object","required":["report_type"],"title":"ReportExportRequest"},"ResolutionCreateRequest":{"properties":{"conversation_id":{"type":"string","format":"uuid","title":"Conversation Id"},"character_id":{"type":"string","format":"uuid","title":"Character Id"},"project_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"},"external_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External User Id"}},"type":"object","required":["conversation_id","character_id"],"title":"ResolutionCreateRequest"},"ResolutionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"conversation_id":{"type":"string","format":"uuid","title":"Conversation Id"},"character_id":{"type":"string","format":"uuid","title":"Character Id"},"project_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"},"status":{"type":"string","title":"Status"},"resolution_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resolution Method"},"inquiry_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inquiry Type"},"inquiry_intent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inquiry Intent"},"auto_classified":{"type":"boolean","title":"Auto Classified"},"auto_classification_confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Auto Classification Confidence"},"user_confirmed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"User Confirmed"},"user_feedback_rating":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Feedback Rating"},"resolved_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Resolved At"},"resolution_time_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Resolution Time Seconds"},"messages_to_resolution":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Messages To Resolution"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","conversation_id","character_id","project_id","status","resolution_method","inquiry_type","inquiry_intent","auto_classified","auto_classification_confidence","user_confirmed","user_feedback_rating","resolved_at","resolution_time_seconds","messages_to_resolution","created_at"],"title":"ResolutionResponse"},"ResolveErrorRequest":{"properties":{"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"ResolveErrorRequest"},"ResolveInquiryRequest":{"properties":{"action":{"type":"string","pattern":"^(faq_added|knowledge_updated|ignored)$","title":"Action"},"action_details":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action Details"}},"type":"object","required":["action"],"title":"ResolveInquiryRequest"},"ResourceItem":{"properties":{"id":{"type":"integer","title":"Id"},"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description"},"icon":{"type":"string","title":"Icon"},"href":{"type":"string","title":"Href"},"color":{"type":"string","title":"Color"},"enabled":{"type":"boolean","title":"Enabled"}},"type":"object","required":["id","title","description","icon","href","color","enabled"],"title":"ResourceItem","description":"리소스 항목"},"RestoreRequest":{"properties":{"backup_id":{"type":"string","title":"Backup Id","description":"복원할 백업 ID"},"restore_type":{"type":"string","title":"Restore Type","description":"복원 타입","default":"full"},"tables_only":{"type":"boolean","title":"Tables Only","description":"테이블만 복원","default":false}},"type":"object","required":["backup_id"],"title":"RestoreRequest"},"RevenueStatsResponse":{"properties":{"monthly_revenue":{"items":{"$ref":"#/components/schemas/MonthlyRevenue"},"type":"array","title":"Monthly Revenue"},"service_breakdown":{"additionalProperties":{"$ref":"#/components/schemas/ServiceBreakdown"},"type":"object","title":"Service Breakdown"},"top_users":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Top Users"},"model_usage":{"additionalProperties":true,"type":"object","title":"Model Usage"}},"type":"object","required":["monthly_revenue","service_breakdown","top_users","model_usage"],"title":"RevenueStatsResponse"},"ReviewCreate":{"properties":{"transaction_id":{"type":"string","format":"uuid","title":"Transaction Id"},"overall_rating":{"type":"integer","maximum":5.0,"minimum":1.0,"title":"Overall Rating"},"communication_rating":{"anyOf":[{"type":"integer","maximum":5.0,"minimum":1.0},{"type":"null"}],"title":"Communication Rating"},"quality_rating":{"anyOf":[{"type":"integer","maximum":5.0,"minimum":1.0},{"type":"null"}],"title":"Quality Rating"},"delivery_rating":{"anyOf":[{"type":"integer","maximum":5.0,"minimum":1.0},{"type":"null"}],"title":"Delivery Rating"},"value_rating":{"anyOf":[{"type":"integer","maximum":5.0,"minimum":1.0},{"type":"null"}],"title":"Value Rating"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"would_recommend":{"type":"boolean","title":"Would Recommend","default":true}},"type":"object","required":["transaction_id","overall_rating"],"title":"ReviewCreate","description":"리뷰 작성"},"ReviewCreateRequest":{"properties":{"review_type":{"type":"string","title":"Review Type"},"character_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Character Id"},"marketplace_listing_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Marketplace Listing Id"},"purchase_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Purchase Id"},"overall_rating":{"type":"number","maximum":5.0,"minimum":1.0,"title":"Overall Rating"},"title":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Title"},"content":{"type":"string","maxLength":2000,"minLength":10,"title":"Content"},"detailed_ratings":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Detailed Ratings","default":{}},"pros":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Pros","default":[]},"cons":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Cons","default":[]},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags","default":[]},"would_recommend":{"type":"boolean","title":"Would Recommend","default":true},"would_purchase_again":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Would Purchase Again"},"is_anonymous":{"type":"boolean","title":"Is Anonymous","default":false},"language":{"type":"string","title":"Language","default":"ko"},"platform_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform Version"},"device_info":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Device Info","default":{}}},"type":"object","required":["review_type","overall_rating","content"],"title":"ReviewCreateRequest","description":"리뷰 생성 요청"},"ReviewHelpfulnessRequest":{"properties":{"is_helpful":{"type":"boolean","title":"Is Helpful"}},"type":"object","required":["is_helpful"],"title":"ReviewHelpfulnessRequest","description":"리뷰 도움됨 요청"},"ReviewReportRequest":{"properties":{"reason":{"type":"string","maxLength":50,"title":"Reason"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"}},"type":"object","required":["reason"],"title":"ReviewReportRequest","description":"리뷰 신고 요청"},"ReviewResponse":{"properties":{"id":{"type":"string","title":"Id"},"review_type":{"type":"string","title":"Review Type"},"character_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Character Id"},"reviewer_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reviewer Name"},"overall_rating":{"type":"number","title":"Overall Rating"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"content":{"type":"string","title":"Content"},"detailed_ratings":{"additionalProperties":true,"type":"object","title":"Detailed Ratings"},"pros":{"items":{"type":"string"},"type":"array","title":"Pros"},"cons":{"items":{"type":"string"},"type":"array","title":"Cons"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"would_recommend":{"type":"boolean","title":"Would Recommend"},"helpful_count":{"type":"integer","title":"Helpful Count"},"not_helpful_count":{"type":"integer","title":"Not Helpful Count"},"is_verified_purchase":{"type":"boolean","title":"Is Verified Purchase"},"language":{"type":"string","title":"Language"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["id","review_type","character_id","reviewer_name","overall_rating","title","content","detailed_ratings","pros","cons","tags","would_recommend","helpful_count","not_helpful_count","is_verified_purchase","language","created_at","updated_at"],"title":"ReviewResponse","description":"리뷰 응답"},"ReviewResponseRequest":{"properties":{"content":{"type":"string","maxLength":1000,"minLength":10,"title":"Content"},"is_official_response":{"type":"boolean","title":"Is Official Response","default":false}},"type":"object","required":["content"],"title":"ReviewResponseRequest","description":"리뷰 응답 요청"},"ReviewSummaryResponse":{"properties":{"id":{"type":"string","title":"Id"},"character_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Character Id"},"total_reviews":{"type":"integer","title":"Total Reviews"},"average_rating":{"type":"number","title":"Average Rating"},"rating_distribution":{"additionalProperties":true,"type":"object","title":"Rating Distribution"},"detailed_rating_averages":{"additionalProperties":true,"type":"object","title":"Detailed Rating Averages"},"recommendation_rate":{"type":"number","title":"Recommendation Rate"},"language_distribution":{"additionalProperties":true,"type":"object","title":"Language Distribution"},"last_updated":{"type":"string","title":"Last Updated"}},"type":"object","required":["id","character_id","total_reviews","average_rating","rating_distribution","detailed_rating_averages","recommendation_rate","language_distribution","last_updated"],"title":"ReviewSummaryResponse","description":"리뷰 요약 응답"},"RevokeSubscriptionRequest":{"properties":{"reason":{"type":"string","title":"Reason"}},"type":"object","required":["reason"],"title":"RevokeSubscriptionRequest"},"RewindRequest":{"properties":{"message_id":{"type":"string","format":"uuid","title":"Message Id"}},"type":"object","required":["message_id"],"title":"RewindRequest"},"RobotsConfigCreate":{"properties":{"user_agent":{"type":"string","title":"User Agent","description":"User-Agent","default":"*"},"allow_paths":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allow Paths","description":"허용 경로"},"disallow_paths":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Disallow Paths","description":"차단 경로"},"sitemap_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sitemap Url","description":"Sitemap URL"},"crawl_delay":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Crawl Delay","description":"크롤링 지연 (초)"}},"type":"object","title":"RobotsConfigCreate","description":"robots.txt 설정 생성 스키마"},"RobotsConfigResponse":{"properties":{"user_agent":{"type":"string","title":"User Agent","description":"User-Agent","default":"*"},"allow_paths":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allow Paths","description":"허용 경로"},"disallow_paths":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Disallow Paths","description":"차단 경로"},"sitemap_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sitemap Url","description":"Sitemap URL"},"crawl_delay":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Crawl Delay","description":"크롤링 지연 (초)"},"id":{"type":"string","format":"uuid","title":"Id"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","is_active","created_at","updated_at"],"title":"RobotsConfigResponse","description":"robots.txt 설정 응답 스키마"},"RoleAssignmentCreate":{"properties":{"user_id":{"type":"string","format":"uuid","title":"User Id"},"role_id":{"type":"string","format":"uuid","title":"Role Id"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"custom_restrictions":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Custom Restrictions"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["user_id","role_id"],"title":"RoleAssignmentCreate"},"RollbackRequest":{"properties":{"knowledge_id":{"type":"string","format":"uuid","title":"Knowledge Id"},"version_id":{"type":"string","format":"uuid","title":"Version Id"},"reason":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Reason"}},"type":"object","required":["knowledge_id","version_id"],"title":"RollbackRequest","description":"롤백 요청"},"RotateAPIKeyRequest":{"properties":{"grace_period_hours":{"type":"integer","title":"Grace Period Hours","default":24}},"type":"object","title":"RotateAPIKeyRequest","description":"API 키 재발급 요청. 기존 키는 grace_period_hours 동안 유지."},"RotatedAPIKeyResponse":{"properties":{"new_key_id":{"type":"string","format":"uuid","title":"New Key Id"},"new_api_key":{"type":"string","title":"New Api Key"},"new_signing_secret":{"type":"string","title":"New Signing Secret"},"old_key_id":{"type":"string","format":"uuid","title":"Old Key Id"},"old_key_grace_until":{"type":"string","format":"date-time","title":"Old Key Grace Until"},"warning":{"type":"string","title":"Warning","default":"⚠️ 새 API 키와 signing_secret을 즉시 안전한 곳에 저장하세요. 이전 키는 grace 기간 동안만 유효합니다."}},"type":"object","required":["new_key_id","new_api_key","new_signing_secret","old_key_id","old_key_grace_until"],"title":"RotatedAPIKeyResponse","description":"재발급 응답 — 새 키와 grace 정보."},"RotatedSigningSecretResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"signing_secret":{"type":"string","title":"Signing Secret"},"warning":{"type":"string","title":"Warning","default":"⚠️ 지금 한 번만 볼 수 있습니다. 고객사 서버의 시크릿을 교체하기 전까지 기존 user_hash 는 전부 거부됩니다 — 사용자 검증이 켜져 있다면 교체와 배포를 함께 하세요."}},"type":"object","required":["id","signing_secret"],"title":"RotatedSigningSecretResponse","description":"서명 시크릿만 재발급. API 키 자체는 그대로다."},"RouterStats":{"properties":{"requests_count":{"type":"integer","title":"Requests Count"},"total_cost":{"type":"number","title":"Total Cost"},"provider_usage":{"additionalProperties":{"additionalProperties":true,"type":"object"},"type":"object","title":"Provider Usage"},"error_count":{"type":"integer","title":"Error Count"}},"type":"object","required":["requests_count","total_cost","provider_usage","error_count"],"title":"RouterStats"},"RoutingRuleRequest":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"priority":{"type":"integer","title":"Priority","default":0},"conditions":{"additionalProperties":true,"type":"object","title":"Conditions"},"actions":{"additionalProperties":true,"type":"object","title":"Actions"}},"type":"object","required":["name","conditions","actions"],"title":"RoutingRuleRequest"},"RoutingStrategy":{"type":"string","enum":["cost_optimized","performance_optimized","balanced","failover","specialty_based"],"title":"RoutingStrategy"},"RoyaltyNegotiationRequest":{"properties":{"creator_royalty_pct":{"type":"number","title":"Creator Royalty Pct"},"notes":{"type":"string","title":"Notes"}},"type":"object","required":["creator_royalty_pct","notes"],"title":"RoyaltyNegotiationRequest"},"SDKUploadRequest":{"properties":{"sdk_content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sdk Content"},"use_bundled":{"type":"boolean","title":"Use Bundled","default":true}},"type":"object","title":"SDKUploadRequest","description":"SDK 업로드 요청"},"SDKUploadResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"urls":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Urls"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["success"],"title":"SDKUploadResponse","description":"SDK 업로드 응답"},"SEOAnalyticsCreate":{"properties":{"page_path":{"type":"string","title":"Page Path","description":"페이지 경로"},"impressions":{"type":"integer","title":"Impressions","description":"노출 수","default":0},"clicks":{"type":"integer","title":"Clicks","description":"클릭 수","default":0},"ctr":{"type":"string","title":"Ctr","description":"클릭률","default":"0"},"average_position":{"type":"string","title":"Average Position","description":"평균 순위","default":"0"},"date":{"type":"string","format":"date-time","title":"Date","description":"날짜"},"page_load_time":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Page Load Time","description":"페이지 로드 시간 (ms)"},"mobile_friendly":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Mobile Friendly","description":"모바일 친화적"}},"type":"object","required":["page_path","date"],"title":"SEOAnalyticsCreate","description":"SEO 분석 생성 스키마"},"SEOAnalyticsResponse":{"properties":{"page_path":{"type":"string","title":"Page Path","description":"페이지 경로"},"impressions":{"type":"integer","title":"Impressions","description":"노출 수","default":0},"clicks":{"type":"integer","title":"Clicks","description":"클릭 수","default":0},"ctr":{"type":"string","title":"Ctr","description":"클릭률","default":"0"},"average_position":{"type":"string","title":"Average Position","description":"평균 순위","default":"0"},"date":{"type":"string","format":"date-time","title":"Date","description":"날짜"},"id":{"type":"string","format":"uuid","title":"Id"},"page_load_time":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Page Load Time"},"mobile_friendly":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Mobile Friendly"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["page_path","date","id","page_load_time","mobile_friendly","created_at"],"title":"SEOAnalyticsResponse","description":"SEO 분석 응답 스키마"},"SEOConfigCreate":{"properties":{"page_path":{"type":"string","title":"Page Path","description":"페이지 경로"},"meta_title":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}],"title":"Meta Title","description":"메타 타이틀 (50-60자 권장)"},"meta_description":{"anyOf":[{"type":"string","maxLength":160},{"type":"null"}],"title":"Meta Description","description":"메타 디스크립션 (150-160자 권장)"},"meta_keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Meta Keywords","description":"메타 키워드"},"og_title":{"anyOf":[{"type":"string","maxLength":95},{"type":"null"}],"title":"Og Title","description":"Open Graph 타이틀"},"og_description":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Og Description","description":"Open Graph 디스크립션"},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Og Image","description":"Open Graph 이미지 URL"},"og_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Og Type","description":"Open Graph 타입","default":"website"},"twitter_card":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Twitter Card","description":"Twitter Card 타입","default":"summary_large_image"},"twitter_title":{"anyOf":[{"type":"string","maxLength":70},{"type":"null"}],"title":"Twitter Title","description":"Twitter 타이틀"},"twitter_description":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Twitter Description","description":"Twitter 디스크립션"},"twitter_image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Twitter Image","description":"Twitter 이미지 URL"},"schema_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schema Type","description":"Schema.org 타입"},"schema_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Schema Data","description":"Schema.org 데이터"},"canonical_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Canonical Url","description":"정규 URL"},"robots_index":{"type":"boolean","title":"Robots Index","description":"검색엔진 색인 허용","default":true},"robots_follow":{"type":"boolean","title":"Robots Follow","description":"링크 추적 허용","default":true},"priority":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Priority","description":"우선순위 (0-100)","default":50},"change_frequency":{"type":"string","title":"Change Frequency","description":"변경 빈도","default":"weekly"}},"type":"object","required":["page_path"],"title":"SEOConfigCreate","description":"SEO 설정 생성 스키마"},"SEOConfigResponse":{"properties":{"page_path":{"type":"string","title":"Page Path","description":"페이지 경로"},"meta_title":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}],"title":"Meta Title","description":"메타 타이틀 (50-60자 권장)"},"meta_description":{"anyOf":[{"type":"string","maxLength":160},{"type":"null"}],"title":"Meta Description","description":"메타 디스크립션 (150-160자 권장)"},"meta_keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Meta Keywords","description":"메타 키워드"},"og_title":{"anyOf":[{"type":"string","maxLength":95},{"type":"null"}],"title":"Og Title","description":"Open Graph 타이틀"},"og_description":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Og Description","description":"Open Graph 디스크립션"},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Og Image","description":"Open Graph 이미지 URL"},"og_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Og Type","description":"Open Graph 타입","default":"website"},"twitter_card":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Twitter Card","description":"Twitter Card 타입","default":"summary_large_image"},"twitter_title":{"anyOf":[{"type":"string","maxLength":70},{"type":"null"}],"title":"Twitter Title","description":"Twitter 타이틀"},"twitter_description":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Twitter Description","description":"Twitter 디스크립션"},"twitter_image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Twitter Image","description":"Twitter 이미지 URL"},"schema_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schema Type","description":"Schema.org 타입"},"schema_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Schema Data","description":"Schema.org 데이터"},"canonical_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Canonical Url","description":"정규 URL"},"robots_index":{"type":"boolean","title":"Robots Index","description":"검색엔진 색인 허용","default":true},"robots_follow":{"type":"boolean","title":"Robots Follow","description":"링크 추적 허용","default":true},"priority":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Priority","description":"우선순위 (0-100)","default":50},"change_frequency":{"type":"string","title":"Change Frequency","description":"변경 빈도","default":"weekly"},"id":{"type":"string","format":"uuid","title":"Id"},"seo_score":{"type":"integer","title":"Seo Score"},"last_crawled":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Crawled"},"is_active":{"type":"boolean","title":"Is Active"},"created_by":{"type":"string","format":"uuid","title":"Created By"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["page_path","id","seo_score","last_crawled","is_active","created_by","created_at","updated_at"],"title":"SEOConfigResponse","description":"SEO 설정 응답 스키마"},"SEOConfigUpdate":{"properties":{"meta_title":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}],"title":"Meta Title"},"meta_description":{"anyOf":[{"type":"string","maxLength":160},{"type":"null"}],"title":"Meta Description"},"meta_keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Meta Keywords"},"og_title":{"anyOf":[{"type":"string","maxLength":95},{"type":"null"}],"title":"Og Title"},"og_description":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Og Description"},"og_image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Og Image"},"og_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Og Type"},"twitter_card":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Twitter Card"},"twitter_title":{"anyOf":[{"type":"string","maxLength":70},{"type":"null"}],"title":"Twitter Title"},"twitter_description":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Twitter Description"},"twitter_image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Twitter Image"},"schema_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schema Type"},"schema_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Schema Data"},"canonical_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Canonical Url"},"robots_index":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Robots Index"},"robots_follow":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Robots Follow"},"priority":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Priority"},"change_frequency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Change Frequency"}},"type":"object","title":"SEOConfigUpdate","description":"SEO 설정 업데이트 스키마"},"SEOIssueCreate":{"properties":{"page_path":{"type":"string","title":"Page Path","description":"페이지 경로"},"issue_type":{"type":"string","title":"Issue Type","description":"문제 타입"},"severity":{"type":"string","title":"Severity","description":"심각도 (critical/high/medium/low)"},"title":{"type":"string","title":"Title","description":"제목"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"설명"}},"type":"object","required":["page_path","issue_type","severity","title"],"title":"SEOIssueCreate","description":"SEO 문제 생성 스키마"},"SEOIssueResponse":{"properties":{"page_path":{"type":"string","title":"Page Path","description":"페이지 경로"},"issue_type":{"type":"string","title":"Issue Type","description":"문제 타입"},"severity":{"type":"string","title":"Severity","description":"심각도 (critical/high/medium/low)"},"title":{"type":"string","title":"Title","description":"제목"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"설명"},"id":{"type":"string","format":"uuid","title":"Id"},"is_resolved":{"type":"boolean","title":"Is Resolved"},"resolved_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Resolved At"},"resolved_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Resolved By"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["page_path","issue_type","severity","title","id","is_resolved","resolved_at","resolved_by","created_at","updated_at"],"title":"SEOIssueResponse","description":"SEO 문제 응답 스키마"},"SEOScanRequest":{"properties":{"page_path":{"type":"string","title":"Page Path","description":"스캔할 페이지 경로"}},"type":"object","required":["page_path"],"title":"SEOScanRequest","description":"SEO 스캔 요청 스키마"},"SEOScanResult":{"properties":{"page_path":{"type":"string","title":"Page Path"},"seo_score":{"type":"integer","title":"Seo Score"},"issues":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Issues"},"recommendations":{"items":{"type":"string"},"type":"array","title":"Recommendations"}},"type":"object","required":["page_path","seo_score","issues","recommendations"],"title":"SEOScanResult","description":"SEO 스캔 결과 스키마"},"STTRequest":{"properties":{"audio_data":{"type":"string","title":"Audio Data","description":"Base64 인코딩된 오디오 데이터"},"language":{"type":"string","title":"Language","description":"언어 코드","default":"ko"},"audio_format":{"type":"string","title":"Audio Format","description":"오디오 포맷","default":"webm"}},"type":"object","required":["audio_data"],"title":"STTRequest"},"ScheduleTypeEnum":{"type":"string","enum":["interval","daily","weekly","cron"],"title":"ScheduleTypeEnum","description":"스케줄 유형"},"SearchClickRequest":{"properties":{"knowledge_id":{"type":"string","format":"uuid","title":"Knowledge Id"},"query":{"type":"string","title":"Query"},"position":{"type":"integer","minimum":0.0,"title":"Position","description":"검색 결과에서의 위치 (0-indexed)"},"similarity_score":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Similarity Score","description":"유사도 점수"}},"type":"object","required":["knowledge_id","query","position","similarity_score"],"title":"SearchClickRequest","description":"검색 결과 클릭 기록 요청"},"SecurityAuditRequest":{"properties":{"audit_type":{"type":"string","title":"Audit Type","default":"comprehensive"}},"type":"object","title":"SecurityAuditRequest"},"SecurityAuditResponse":{"properties":{"overall_score":{"type":"integer","title":"Overall Score"},"total_issues":{"type":"integer","title":"Total Issues"},"audit_results":{"additionalProperties":true,"type":"object","title":"Audit Results"},"recommendations":{"items":{"type":"string"},"type":"array","title":"Recommendations"}},"type":"object","required":["overall_score","total_issues","audit_results","recommendations"],"title":"SecurityAuditResponse"},"SecurityDashboardResponse":{"properties":{"security_score":{"type":"integer","title":"Security Score"},"security_events":{"additionalProperties":true,"type":"object","title":"Security Events"},"suspicious_activities":{"additionalProperties":true,"type":"object","title":"Suspicious Activities"},"system_health":{"additionalProperties":true,"type":"object","title":"System Health"},"recent_alerts":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Recent Alerts"}},"type":"object","required":["security_score","security_events","suspicious_activities","system_health","recent_alerts"],"title":"SecurityDashboardResponse"},"SecurityIncident":{"properties":{"type":{"type":"string","title":"Type"},"severity":{"type":"string","title":"Severity"},"ip":{"type":"string","title":"Ip"},"timestamp":{"type":"string","title":"Timestamp"},"blocked":{"type":"boolean","title":"Blocked"}},"type":"object","required":["type","severity","ip","timestamp","blocked"],"title":"SecurityIncident"},"SecurityReportRequest":{"properties":{"incident_type":{"type":"string","title":"Incident Type"},"description":{"type":"string","title":"Description"},"occurred_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Occurred At"},"contact":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact"},"evidence":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evidence"}},"type":"object","required":["incident_type","description"],"title":"SecurityReportRequest"},"SecurityReportResponse":{"properties":{"id":{"type":"string","title":"Id"},"status":{"type":"string","title":"Status"},"message":{"type":"string","title":"Message"}},"type":"object","required":["id","status","message"],"title":"SecurityReportResponse"},"SemanticSearchRequest":{"properties":{"query":{"type":"string","maxLength":5000,"minLength":1,"title":"Query","description":"검색 쿼리 (자연어)"},"episode_number":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Episode Number","description":"현재 에피소드 (이전 에피소드만 검색)"},"narrative_types":{"anyOf":[{"items":{"$ref":"#/components/schemas/NarrativeTypeEnum"},"type":"array"},{"type":"null"}],"title":"Narrative Types","description":"검색할 서사 유형 필터"},"limit":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Limit","description":"최대 결과 수","default":10},"min_similarity":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Min Similarity","description":"최소 유사도 점수","default":0.3}},"type":"object","required":["query"],"title":"SemanticSearchRequest","description":"시맨틱 검색 요청 (RAG 기반)"},"SemanticSearchResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/SemanticSearchResultItem"},"type":"array","title":"Results"},"total_found":{"type":"integer","title":"Total Found"},"query":{"type":"string","title":"Query"}},"type":"object","required":["results","total_found","query"],"title":"SemanticSearchResponse","description":"시맨틱 검색 응답"},"SemanticSearchResultItem":{"properties":{"id":{"type":"string","title":"Id"},"memory_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Memory Id"},"episode_number":{"type":"integer","title":"Episode Number"},"chapter_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chapter Title"},"narrative_type":{"type":"string","title":"Narrative Type"},"title":{"type":"string","title":"Title"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"importance_score":{"type":"number","title":"Importance Score"},"callback_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Callback Status"},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Keywords"},"characters_involved":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Characters Involved"},"similarity":{"type":"number","title":"Similarity"},"combined_score":{"type":"number","title":"Combined Score"}},"type":"object","required":["id","episode_number","narrative_type","title","importance_score","similarity","combined_score"],"title":"SemanticSearchResultItem","description":"시맨틱 검색 결과 항목"},"ServiceBreakdown":{"properties":{"total_cost":{"type":"number","title":"Total Cost"},"usage_count":{"type":"integer","title":"Usage Count"}},"type":"object","required":["total_cost","usage_count"],"title":"ServiceBreakdown"},"SessionMemoryResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"character_id":{"type":"string","format":"uuid","title":"Character Id"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"content":{"type":"string","title":"Content"},"context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"keywords":{"items":{"type":"string"},"type":"array","title":"Keywords","default":[]},"source_message_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Source Message Ids","default":[]},"message_count":{"type":"integer","title":"Message Count"},"importance_score":{"type":"number","title":"Importance Score"},"access_count":{"type":"integer","title":"Access Count"},"last_accessed":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Accessed"},"emotional_tone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Emotional Tone"},"conversation_topic":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversation Topic"},"user_intent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Intent"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"is_promoted":{"type":"boolean","title":"Is Promoted"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","character_id","content","message_count","importance_score","access_count","is_promoted","created_at","updated_at"],"title":"SessionMemoryResponse"},"SetAnswerRequest":{"properties":{"session_id":{"type":"string","title":"Session Id"},"answer":{"additionalProperties":true,"type":"object","title":"Answer"}},"type":"object","required":["session_id","answer"],"title":"SetAnswerRequest"},"SetDefaultModelRequest":{"properties":{"model_key":{"type":"string","title":"Model Key"}},"type":"object","required":["model_key"],"title":"SetDefaultModelRequest","description":"기본 모델 설정 요청"},"ShareResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"share_token":{"type":"string","title":"Share Token"},"share_url":{"type":"string","title":"Share Url"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"is_active":{"type":"boolean","title":"Is Active"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"max_views":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Views"},"view_count":{"type":"integer","title":"View Count"},"has_password":{"type":"boolean","title":"Has Password"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","share_token","share_url","title","is_active","expires_at","max_views","view_count","has_password","created_at"],"title":"ShareResponse"},"SharedConversationResponse":{"properties":{"title":{"type":"string","title":"Title"},"character_name":{"type":"string","title":"Character Name"},"character_avatar":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Character Avatar"},"messages":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Messages"},"total_messages":{"type":"integer","title":"Total Messages"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["title","character_name","character_avatar","messages","total_messages","created_at"],"title":"SharedConversationResponse"},"ShoppingPlatformEnum":{"type":"string","enum":["cafe24","naver_smartstore","shopify","rakuten","amazon_japan"],"title":"ShoppingPlatformEnum","description":"지원 쇼핑몰 플랫폼"},"SitemapCrawlRequest":{"properties":{"url":{"type":"string","title":"Url"},"max_pages":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Pages","default":100},"include_patterns":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Include Patterns"},"exclude_patterns":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Exclude Patterns"},"use_playwright":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Use Playwright","default":false}},"type":"object","required":["url"],"title":"SitemapCrawlRequest"},"SitemapEntryCreate":{"properties":{"loc":{"type":"string","title":"Loc","description":"URL"},"changefreq":{"type":"string","title":"Changefreq","description":"변경 빈도","default":"weekly"},"priority":{"type":"string","title":"Priority","description":"우선순위 (0.0-1.0)","default":"0.5"},"is_auto_generated":{"type":"boolean","title":"Is Auto Generated","description":"자동 생성 여부","default":true}},"type":"object","required":["loc"],"title":"SitemapEntryCreate","description":"Sitemap 엔트리 생성 스키마"},"SitemapEntryResponse":{"properties":{"loc":{"type":"string","title":"Loc","description":"URL"},"changefreq":{"type":"string","title":"Changefreq","description":"변경 빈도","default":"weekly"},"priority":{"type":"string","title":"Priority","description":"우선순위 (0.0-1.0)","default":"0.5"},"id":{"type":"string","format":"uuid","title":"Id"},"lastmod":{"type":"string","format":"date-time","title":"Lastmod"},"is_auto_generated":{"type":"boolean","title":"Is Auto Generated"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["loc","id","lastmod","is_auto_generated","is_active","created_at"],"title":"SitemapEntryResponse","description":"Sitemap 엔트리 응답 스키마"},"SitemapGenerateRequest":{"properties":{"base_url":{"type":"string","title":"Base Url","description":"베이스 URL (예: https://bestchar.com)"},"auto_include_characters":{"type":"boolean","title":"Auto Include Characters","description":"공개 캐릭터 자동 포함","default":true}},"type":"object","required":["base_url"],"title":"SitemapGenerateRequest","description":"Sitemap 생성 요청 스키마"},"SitemapGenerateResponse":{"properties":{"total_entries":{"type":"integer","title":"Total Entries"},"message":{"type":"string","title":"Message"}},"type":"object","required":["total_entries","message"],"title":"SitemapGenerateResponse","description":"Sitemap 생성 응답 스키마"},"SmartAutoBillingRequest":{"properties":{"enable":{"type":"boolean","title":"Enable"},"recharge_threshold":{"type":"number","maximum":1.0,"minimum":0.1,"title":"Recharge Threshold","description":"충전 임계값","default":0.8},"max_monthly_charge":{"type":"number","exclusiveMinimum":0.0,"title":"Max Monthly Charge","description":"최대 월 충전 금액","default":100000}},"type":"object","required":["enable"],"title":"SmartAutoBillingRequest","description":"스마트 자동 결제 설정 요청"},"SocialAuthCallbackResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type"},"user":{"additionalProperties":true,"type":"object","title":"User"}},"type":"object","required":["access_token","token_type","user"],"title":"SocialAuthCallbackResponse","description":"소셜 로그인 콜백 응답"},"SocialAuthResponse":{"properties":{"auth_url":{"type":"string","title":"Auth Url"},"state":{"type":"string","title":"State"}},"type":"object","required":["auth_url","state"],"title":"SocialAuthResponse","description":"소셜 인증 응답"},"StoryArcCreate":{"properties":{"title":{"type":"string","maxLength":500,"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"arc_number":{"type":"integer","title":"Arc Number","default":1},"start_episode":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Start Episode"},"end_episode":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"End Episode"},"main_themes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Main Themes"},"main_characters":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Main Characters"},"main_conflicts":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Main Conflicts"}},"type":"object","required":["title"],"title":"StoryArcCreate","description":"스토리 아크 생성"},"StoryCallbackCreate":{"properties":{"source_memory_id":{"type":"string","format":"uuid","title":"Source Memory Id"},"source_episode":{"type":"integer","title":"Source Episode"},"callback_episode":{"type":"integer","title":"Callback Episode"},"callback_memory_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Callback Memory Id"},"callback_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Callback Description"},"satisfaction_score":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Satisfaction Score"},"reader_impact":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reader Impact"}},"type":"object","required":["source_memory_id","source_episode","callback_episode"],"title":"StoryCallbackCreate","description":"복선 회수 기록 생성"},"StoryMemoryCreate":{"properties":{"episode_number":{"type":"integer","minimum":1.0,"title":"Episode Number"},"chapter_title":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Chapter Title"},"scene_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Scene Number"},"narrative_type":{"$ref":"#/components/schemas/NarrativeTypeEnum"},"narrative_subtype":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Narrative Subtype"},"title":{"type":"string","maxLength":500,"title":"Title"},"content":{"type":"string","title":"Content"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context"},"importance_score":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Importance Score","default":0.5},"narrative_weight":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Narrative Weight","default":0.5},"callback_status":{"anyOf":[{"$ref":"#/components/schemas/CallbackStatusEnum"},{"type":"null"}],"default":"pending"},"callback_deadline_episode":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Callback Deadline Episode"},"callback_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Callback Notes"},"story_arc_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Story Arc Id"},"connected_episodes":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Connected Episodes"},"connected_memory_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Connected Memory Ids"},"characters_involved":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Characters Involved"},"locations":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Locations"},"items":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Items"},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Keywords"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"emotional_tone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Emotional Tone"},"atmosphere":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Atmosphere"}},"type":"object","required":["episode_number","narrative_type","title","content"],"title":"StoryMemoryCreate","description":"스토리 메모리 생성"},"StoryMemoryResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"character_id":{"type":"string","format":"uuid","title":"Character Id"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"story_arc_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Story Arc Id"},"episode_number":{"type":"integer","title":"Episode Number"},"chapter_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chapter Title"},"scene_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Scene Number"},"narrative_type":{"type":"string","title":"Narrative Type"},"narrative_subtype":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Narrative Subtype"},"title":{"type":"string","title":"Title"},"content":{"type":"string","title":"Content"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context"},"importance_score":{"type":"number","title":"Importance Score"},"narrative_weight":{"type":"number","title":"Narrative Weight"},"callback_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Callback Status"},"callback_deadline_episode":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Callback Deadline Episode"},"callback_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Callback Notes"},"connected_episodes":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Connected Episodes"},"connected_memory_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Connected Memory Ids"},"characters_involved":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Characters Involved"},"locations":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Locations"},"items":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Items"},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Keywords"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"emotional_tone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Emotional Tone"},"atmosphere":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Atmosphere"},"source_type":{"type":"string","title":"Source Type"},"retrieval_count":{"type":"integer","title":"Retrieval Count"},"effectiveness_score":{"type":"number","title":"Effectiveness Score"},"is_active":{"type":"boolean","title":"Is Active"},"needs_review":{"type":"boolean","title":"Needs Review"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","character_id","user_id","story_arc_id","episode_number","chapter_title","scene_number","narrative_type","narrative_subtype","title","content","summary","context","importance_score","narrative_weight","callback_status","callback_deadline_episode","callback_notes","connected_episodes","connected_memory_ids","characters_involved","locations","items","keywords","tags","emotional_tone","atmosphere","source_type","retrieval_count","effectiveness_score","is_active","needs_review","created_at","updated_at"],"title":"StoryMemoryResponse","description":"스토리 메모리 응답"},"StoryMemoryUpdate":{"properties":{"episode_number":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Episode Number"},"chapter_title":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Chapter Title"},"scene_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Scene Number"},"narrative_type":{"anyOf":[{"$ref":"#/components/schemas/NarrativeTypeEnum"},{"type":"null"}]},"narrative_subtype":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Narrative Subtype"},"title":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Title"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context"},"importance_score":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Importance Score"},"narrative_weight":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Narrative Weight"},"callback_status":{"anyOf":[{"$ref":"#/components/schemas/CallbackStatusEnum"},{"type":"null"}]},"callback_deadline_episode":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Callback Deadline Episode"},"callback_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Callback Notes"},"story_arc_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Story Arc Id"},"connected_episodes":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Connected Episodes"},"connected_memory_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Connected Memory Ids"},"characters_involved":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Characters Involved"},"locations":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Locations"},"items":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Items"},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Keywords"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"emotional_tone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Emotional Tone"},"atmosphere":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Atmosphere"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"needs_review":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Needs Review"}},"type":"object","title":"StoryMemoryUpdate","description":"스토리 메모리 수정"},"StorySearchRequest":{"properties":{"query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query"},"episode_range":{"anyOf":[{"prefixItems":[{"type":"integer"},{"type":"integer"}],"type":"array","maxItems":2,"minItems":2},{"type":"null"}],"title":"Episode Range"},"narrative_types":{"anyOf":[{"items":{"$ref":"#/components/schemas/NarrativeTypeEnum"},"type":"array"},{"type":"null"}],"title":"Narrative Types"},"callback_status":{"anyOf":[{"$ref":"#/components/schemas/CallbackStatusEnum"},{"type":"null"}]},"pending_only":{"type":"boolean","title":"Pending Only","default":false},"deadline_before_episode":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Deadline Before Episode"},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Keywords"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"characters":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Characters"},"sort_by":{"type":"string","title":"Sort By","default":"episode_number"},"sort_order":{"type":"string","title":"Sort Order","default":"asc"},"limit":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit","default":20},"offset":{"type":"integer","minimum":0.0,"title":"Offset","default":0}},"type":"object","title":"StorySearchRequest","description":"스토리 검색 요청"},"StorySearchResponse":{"properties":{"memories":{"items":{"$ref":"#/components/schemas/StoryMemoryResponse"},"type":"array","title":"Memories"},"total_count":{"type":"integer","title":"Total Count"},"pending_callbacks_count":{"type":"integer","title":"Pending Callbacks Count"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["memories","total_count","pending_callbacks_count","has_more"],"title":"StorySearchResponse","description":"스토리 검색 응답"},"StoryStatistics":{"properties":{"total_episodes":{"type":"integer","title":"Total Episodes"},"total_memories":{"type":"integer","title":"Total Memories"},"total_foreshadowing":{"type":"integer","title":"Total Foreshadowing"},"pending_callbacks":{"type":"integer","title":"Pending Callbacks"},"resolved_callbacks":{"type":"integer","title":"Resolved Callbacks"},"overdue_callbacks":{"type":"integer","title":"Overdue Callbacks"},"by_narrative_type":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Narrative Type"},"latest_episode":{"type":"integer","title":"Latest Episode"},"top_pending_foreshadowing":{"items":{"$ref":"#/components/schemas/StoryMemoryResponse"},"type":"array","title":"Top Pending Foreshadowing"}},"type":"object","required":["total_episodes","total_memories","total_foreshadowing","pending_callbacks","resolved_callbacks","overdue_callbacks","by_narrative_type","latest_episode","top_pending_foreshadowing"],"title":"StoryStatistics","description":"스토리 통계"},"SubscriptionCreate":{"properties":{"plan_id":{"type":"string","title":"Plan Id"},"billing_cycle":{"type":"string","title":"Billing Cycle","default":"monthly"},"payment_method_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Method Id"}},"type":"object","required":["plan_id"],"title":"SubscriptionCreate"},"SubscriptionResponse":{"properties":{"id":{"type":"string","title":"Id"},"plan_id":{"type":"string","title":"Plan Id"},"status":{"type":"string","title":"Status"},"billing_cycle":{"type":"string","title":"Billing Cycle"},"monthly_price":{"type":"number","title":"Monthly Price"},"yearly_price":{"type":"number","title":"Yearly Price"},"start_date":{"type":"string","format":"date-time","title":"Start Date"},"next_billing_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Billing Date"},"monthly_request_quota":{"type":"integer","title":"Monthly Request Quota"},"daily_request_limit":{"type":"integer","title":"Daily Request Limit"},"auto_renew":{"type":"boolean","title":"Auto Renew"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","plan_id","status","billing_cycle","monthly_price","yearly_price","start_date","next_billing_date","monthly_request_quota","daily_request_limit","auto_renew","created_at"],"title":"SubscriptionResponse"},"SubsystemHealth":{"properties":{"name":{"type":"string","title":"Name"},"healthy":{"type":"boolean","title":"Healthy"},"latency_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latency Ms"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"}},"type":"object","required":["name","healthy"],"title":"SubsystemHealth"},"SuggestedRepliesRequest":{"properties":{"character_id":{"type":"string","format":"uuid","title":"Character Id"},"last_message":{"type":"string","title":"Last Message"},"conversation_history":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Conversation History","default":[]}},"type":"object","required":["character_id","last_message"],"title":"SuggestedRepliesRequest"},"SuggestedRepliesResponse":{"properties":{"suggestions":{"items":{"type":"string"},"type":"array","title":"Suggestions"}},"type":"object","required":["suggestions"],"title":"SuggestedRepliesResponse"},"SummarizeRequest":{"properties":{"content":{"type":"string","maxLength":50000,"minLength":1,"title":"Content","description":"요약할 텍스트"},"max_length":{"type":"integer","maximum":2000.0,"minimum":100.0,"title":"Max Length","description":"요약 최대 길이","default":500}},"type":"object","required":["content"],"title":"SummarizeRequest","description":"콘텐츠 요약 요청"},"SummaryStats":{"properties":{"totalRequests":{"type":"integer","title":"Totalrequests"},"uniqueUsers":{"type":"integer","title":"Uniqueusers"},"avgResponseTime":{"type":"integer","title":"Avgresponsetime"},"successRate":{"type":"number","title":"Successrate"},"totalTokensUsed":{"type":"integer","title":"Totaltokensused"}},"type":"object","required":["totalRequests","uniqueUsers","avgResponseTime","successRate","totalTokensUsed"],"title":"SummaryStats"},"SyncHistoryListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/SyncHistoryResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"total_pages":{"type":"integer","title":"Total Pages"}},"type":"object","required":["items","total","page","page_size","total_pages"],"title":"SyncHistoryListResponse","description":"동기화 히스토리 목록 응답"},"SyncHistoryResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"sync_type":{"type":"string","title":"Sync Type"},"status":{"$ref":"#/components/schemas/SyncStatusEnum"},"total_fetched":{"type":"integer","title":"Total Fetched"},"products_created":{"type":"integer","title":"Products Created"},"products_updated":{"type":"integer","title":"Products Updated"},"products_deleted":{"type":"integer","title":"Products Deleted"},"products_skipped":{"type":"integer","title":"Products Skipped"},"products_failed":{"type":"integer","title":"Products Failed"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"triggered_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Triggered By"},"started_at":{"type":"string","format":"date-time","title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"duration_seconds":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration Seconds"}},"type":"object","required":["id","sync_type","status","total_fetched","products_created","products_updated","products_deleted","products_skipped","products_failed","error_message","triggered_by","started_at","completed_at","duration_seconds"],"title":"SyncHistoryResponse","description":"동기화 히스토리 응답"},"SyncRequest":{"properties":{"sync_type":{"type":"string","pattern":"^(full|incremental)$","title":"Sync Type","description":"동기화 유형","default":"full"}},"type":"object","title":"SyncRequest","description":"동기화 요청"},"SyncResultResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"total_fetched":{"type":"integer","title":"Total Fetched"},"created":{"type":"integer","title":"Created"},"updated":{"type":"integer","title":"Updated"},"deleted":{"type":"integer","title":"Deleted"},"skipped":{"type":"integer","title":"Skipped"},"failed":{"type":"integer","title":"Failed"},"duration_seconds":{"type":"number","title":"Duration Seconds"},"errors":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Errors"}},"type":"object","required":["success","total_fetched","created","updated","deleted","skipped","failed","duration_seconds","errors"],"title":"SyncResultResponse","description":"동기화 결과 응답"},"SyncStatus":{"properties":{"collection_name":{"type":"string","title":"Collection Name"},"postgres_count":{"type":"integer","title":"Postgres Count"},"qdrant_count":{"type":"integer","title":"Qdrant Count"},"sync_status":{"type":"string","title":"Sync Status"},"last_check":{"type":"string","format":"date-time","title":"Last Check"}},"type":"object","required":["collection_name","postgres_count","qdrant_count","sync_status","last_check"],"title":"SyncStatus","description":"동기화 상태"},"SyncStatusEnum":{"type":"string","enum":["pending","running","completed","failed","cancelled"],"title":"SyncStatusEnum","description":"동기화 상태"},"SystemAnnouncementCreate":{"properties":{"title":{"type":"string","title":"Title"},"content":{"type":"string","title":"Content"},"announcement_type":{"type":"string","title":"Announcement Type"},"is_popup":{"type":"boolean","title":"Is Popup","default":false},"is_banner":{"type":"boolean","title":"Is Banner","default":true},"priority":{"type":"integer","title":"Priority","default":100},"target_users":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Target Users"},"target_plans":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Target Plans"},"target_locales":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Target Locales"},"start_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start At"},"end_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End At"},"style":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Style"},"action_buttons":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Action Buttons"}},"type":"object","required":["title","content","announcement_type"],"title":"SystemAnnouncementCreate"},"SystemAnnouncementUpdate":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"is_popup":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Popup"},"is_banner":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Banner"},"priority":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Priority"},"start_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start At"},"end_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End At"}},"type":"object","title":"SystemAnnouncementUpdate"},"SystemConfigUpdate":{"properties":{"config_key":{"type":"string","title":"Config Key"},"config_value":{"title":"Config Value"},"config_type":{"type":"string","title":"Config Type"},"category":{"type":"string","title":"Category"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["config_key","config_value","config_type","category"],"title":"SystemConfigUpdate"},"SystemLanguageRequest":{"properties":{"language_id":{"type":"string","title":"Language Id"}},"type":"object","required":["language_id"],"title":"SystemLanguageRequest"},"SystemSettingsResponse":{"properties":{"settings":{"additionalProperties":true,"type":"object","title":"Settings"},"supported_languages":{"items":{"$ref":"#/components/schemas/LanguageResponse"},"type":"array","title":"Supported Languages"},"default_language":{"type":"string","title":"Default Language"}},"type":"object","required":["settings","supported_languages","default_language"],"title":"SystemSettingsResponse"},"TTSRequest":{"properties":{"text":{"type":"string","maxLength":4000,"minLength":1,"title":"Text","description":"변환할 텍스트"},"language":{"type":"string","title":"Language","description":"언어 코드","default":"ko"},"voice_type":{"type":"string","title":"Voice Type","description":"음성 타입","default":"female"},"voice_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Name","description":"특정 음성 이름"},"speed":{"type":"number","maximum":4.0,"minimum":0.25,"title":"Speed","description":"말하기 속도","default":1.0},"character_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Character Id","description":"캐릭터 ID"}},"type":"object","required":["text"],"title":"TTSRequest"},"TeamRole":{"type":"string","enum":["owner","admin","editor","operator","viewer"],"title":"TeamRole"},"TemplateMessage":{"properties":{"slot":{"type":"integer","title":"Slot"},"text":{"type":"string","title":"Text"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"}},"type":"object","required":["slot","text"],"title":"TemplateMessage","description":"템플릿 메시지"},"TemplateMessagesRequest":{"properties":{"templates":{"items":{"$ref":"#/components/schemas/TemplateMessage"},"type":"array","title":"Templates"}},"type":"object","required":["templates"],"title":"TemplateMessagesRequest"},"TermRequest":{"properties":{"term":{"type":"string","title":"Term"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category","default":"custom"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"api_key_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Api Key Id"}},"type":"object","required":["term"],"title":"TermRequest"},"TermResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"term":{"type":"string","title":"Term"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"enabled":{"type":"boolean","title":"Enabled"},"api_key_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Api Key Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","term","enabled","created_at"],"title":"TermResponse"},"TestCase":{"properties":{"input":{"type":"string","title":"Input"},"expected_match":{"type":"boolean","title":"Expected Match"}},"type":"object","required":["input","expected_match"],"title":"TestCase"},"TestEmailRequest":{"properties":{"email_type":{"type":"string","title":"Email Type","description":"이메일 타입"},"recipient_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recipient Email","description":"수신자 이메일 (비어있으면 현재 사용자)"}},"type":"object","required":["email_type"],"title":"TestEmailRequest"},"TestPromptRequest":{"properties":{"category":{"type":"string","title":"Category"},"name":{"type":"string","title":"Name"},"test_variables":{"additionalProperties":true,"type":"object","title":"Test Variables"}},"type":"object","required":["category","name","test_variables"],"title":"TestPromptRequest"},"TestPromptResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"output":{"type":"string","title":"Output"},"tokens_used":{"type":"integer","title":"Tokens Used"},"cost_estimate":{"type":"number","title":"Cost Estimate"}},"type":"object","required":["success","output","tokens_used","cost_estimate"],"title":"TestPromptResponse"},"TestimonialCreate":{"properties":{"name":{"type":"string","maxLength":100,"title":"Name"},"company":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Company"},"position":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Position"},"avatar_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Avatar Url"},"content":{"type":"string","title":"Content"},"rating":{"type":"integer","maximum":5.0,"minimum":1.0,"title":"Rating","default":5},"is_active":{"type":"boolean","title":"Is Active","default":true},"display_order":{"type":"integer","title":"Display Order","default":0},"locale":{"type":"string","maxLength":10,"title":"Locale","default":"ko"}},"type":"object","required":["name","content"],"title":"TestimonialCreate"},"TestimonialResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"position":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Position"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"},"content":{"type":"string","title":"Content"},"rating":{"type":"integer","title":"Rating"},"is_active":{"type":"boolean","title":"Is Active"},"display_order":{"type":"integer","title":"Display Order"},"locale":{"type":"string","title":"Locale"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","name","company","position","avatar_url","content","rating","is_active","display_order","locale","created_at","updated_at"],"title":"TestimonialResponse"},"TestimonialUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Name"},"company":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Company"},"position":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Position"},"avatar_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Avatar Url"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"rating":{"anyOf":[{"type":"integer","maximum":5.0,"minimum":1.0},{"type":"null"}],"title":"Rating"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"display_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Display Order"},"locale":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"Locale"}},"type":"object","title":"TestimonialUpdate"},"ThemePresetCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"config":{"additionalProperties":true,"type":"object","title":"Config"},"is_public":{"type":"boolean","title":"Is Public","default":true},"is_premium":{"type":"boolean","title":"Is Premium","default":false}},"type":"object","required":["name","config"],"title":"ThemePresetCreate","description":"테마 프리셋 생성 (관리자용)"},"ThreatLevel":{"type":"string","enum":["low","medium","high","critical"],"title":"ThreatLevel","description":"위협 레벨"},"Token":{"properties":{"access_token":{"type":"string","title":"Access Token","description":"JWT 액세스 토큰"},"token_type":{"type":"string","title":"Token Type","description":"토큰 타입","default":"bearer"}},"type":"object","required":["access_token"],"title":"Token","description":"인증 토큰 응답"},"TonePresetRequest":{"properties":{"tone":{"type":"string","title":"Tone"}},"type":"object","required":["tone"],"title":"TonePresetRequest"},"TonePresetResponse":{"properties":{"tone":{"type":"string","title":"Tone"},"name_ko":{"type":"string","title":"Name Ko"},"icon":{"type":"string","title":"Icon"},"temperature":{"type":"number","title":"Temperature"},"max_tokens":{"type":"integer","title":"Max Tokens"},"top_p":{"type":"number","title":"Top P"},"frequency_penalty":{"type":"number","title":"Frequency Penalty"},"presence_penalty":{"type":"number","title":"Presence Penalty"}},"type":"object","required":["tone","name_ko","icon","temperature","max_tokens","top_p","frequency_penalty","presence_penalty"],"title":"TonePresetResponse"},"TopUser":{"properties":{"userId":{"type":"string","title":"Userid"},"requests":{"type":"integer","title":"Requests"},"lastActive":{"type":"string","title":"Lastactive"}},"type":"object","required":["userId","requests","lastActive"],"title":"TopUser"},"TopicAnalyticsResponse":{"properties":{"total_messages_analyzed":{"type":"integer","title":"Total Messages Analyzed"},"analysis_period_days":{"type":"integer","title":"Analysis Period Days"},"topics":{"items":{"$ref":"#/components/schemas/TopicItem"},"type":"array","title":"Topics"},"top_keywords":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Top Keywords"},"topic_distribution":{"additionalProperties":{"type":"integer"},"type":"object","title":"Topic Distribution"}},"type":"object","required":["total_messages_analyzed","analysis_period_days","topics","top_keywords","topic_distribution"],"title":"TopicAnalyticsResponse","description":"주제 분석 응답"},"TopicItem":{"properties":{"topic":{"type":"string","title":"Topic"},"count":{"type":"integer","title":"Count"},"percentage":{"type":"number","title":"Percentage"},"keywords":{"items":{"type":"string"},"type":"array","title":"Keywords"},"sample_messages":{"items":{"type":"string"},"type":"array","title":"Sample Messages"}},"type":"object","required":["topic","count","percentage","keywords","sample_messages"],"title":"TopicItem","description":"주제 항목"},"TransactionCreate":{"properties":{"listing_id":{"type":"string","format":"uuid","title":"Listing Id"},"pricing_tier":{"type":"string","title":"Pricing Tier","default":"basic"},"payment_method":{"type":"string","title":"Payment Method"},"order_details":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Order Details"}},"type":"object","required":["listing_id","payment_method"],"title":"TransactionCreate","description":"거래 생성 요청"},"TransactionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"buyer_id":{"type":"string","format":"uuid","title":"Buyer Id"},"seller_id":{"type":"string","format":"uuid","title":"Seller Id"},"listing_id":{"type":"string","format":"uuid","title":"Listing Id"},"amount":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Amount"},"currency":{"type":"string","title":"Currency"},"status":{"type":"string","title":"Status"},"payment_method":{"type":"string","title":"Payment Method"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"paid_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Paid At"}},"type":"object","required":["id","buyer_id","seller_id","listing_id","amount","currency","status","payment_method","created_at","paid_at"],"title":"TransactionResponse","description":"거래 응답"},"TransactionReviewResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"transaction_id":{"type":"string","format":"uuid","title":"Transaction Id"},"overall_rating":{"type":"integer","title":"Overall Rating"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"would_recommend":{"type":"boolean","title":"Would Recommend"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","transaction_id","overall_rating","title","content","would_recommend","created_at"],"title":"TransactionReviewResponse","description":"리뷰 응답"},"TranslateRequest":{"properties":{"text":{"type":"string","title":"Text"},"target_language":{"type":"string","title":"Target Language","default":"en"},"source_language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Language"}},"type":"object","required":["text"],"title":"TranslateRequest"},"TranslateResponse":{"properties":{"translated_text":{"type":"string","title":"Translated Text"},"source_language":{"type":"string","title":"Source Language"},"target_language":{"type":"string","title":"Target Language"}},"type":"object","required":["translated_text","source_language","target_language"],"title":"TranslateResponse"},"UpdateCategoryRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"display_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Display Order"},"icon":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Icon"},"color":{"anyOf":[{"type":"string","maxLength":7},{"type":"null"}],"title":"Color"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"UpdateCategoryRequest","description":"관리자 카테고리 수정 요청"},"UpdateCharacterAPIKeyRequest":{"properties":{"key_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"allowed_scopes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Scopes"},"rate_limit_per_minute":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rate Limit Per Minute"},"rate_limit_per_hour":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rate Limit Per Hour"},"rate_limit_per_day":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rate Limit Per Day"},"allowed_domains":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Domains"},"allowed_origins":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Origins"},"allowed_ips":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Ips"},"blocked_ips":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Blocked Ips"},"require_https":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Require Https"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"llm_provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Llm Provider"},"llm_model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Llm Model Id"},"use_byok":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Use Byok"}},"type":"object","title":"UpdateCharacterAPIKeyRequest"},"UpdateCharacterRequest":{"properties":{"is_primary":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Primary"},"display_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Display Order"}},"type":"object","title":"UpdateCharacterRequest"},"UpdatePresetRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Name"},"category_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Category Id"},"subcategory":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Subcategory"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"short_description":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Short Description"},"seed_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Seed Prompt"},"backstory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Backstory"},"appearance_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Appearance Description"},"mbti":{"anyOf":[{"$ref":"#/components/schemas/MBTIType"},{"type":"null"}]},"mbti_stats":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Mbti Stats"},"personality_type":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Personality Type"},"speech_style":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Speech Style"},"character_traits":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Character Traits"},"voice_provider":{"anyOf":[{"$ref":"#/components/schemas/VoiceProvider"},{"type":"null"}]},"voice_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Voice Config"},"gender":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Gender"},"preview_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview Image Url"},"sample_avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sample Avatar Url"},"emotional_images_sample":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Emotional Images Sample"},"default_knowledge_items":{"anyOf":[{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array"},{"type":"null"}],"title":"Default Knowledge Items"},"sample_conversations":{"anyOf":[{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array"},{"type":"null"}],"title":"Sample Conversations"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"target_audience":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Target Audience"},"use_cases":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Use Cases"},"setup_guide":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Setup Guide"},"customization_tips":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Customization Tips"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"is_featured":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Featured"},"is_premium":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Premium"},"premium_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Premium Price"}},"type":"object","title":"UpdatePresetRequest","description":"관리자 프리셋 수정 요청"},"UpdateProjectAPIKeyHandoffRequest":{"properties":{"slack_webhook_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Slack Webhook Url"}},"type":"object","title":"UpdateProjectAPIKeyHandoffRequest","description":"상담원 호출 Slack 알림 — 빈 값이면 해제."},"UpdateProjectAPIKeySecurityRequest":{"properties":{"require_user_validation":{"type":"boolean","title":"Require User Validation"}},"type":"object","required":["require_user_validation"],"title":"UpdateProjectAPIKeySecurityRequest","description":"위젯 사용자 검증 on/off."},"UpdateProjectRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"project_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Type"},"site_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Url"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"UpdateProjectRequest"},"UpdatePromptRequest":{"properties":{"system_prompt":{"type":"string","title":"System Prompt"},"user_prompt_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Prompt Template"},"change_reason":{"type":"string","title":"Change Reason","default":""},"temperature":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Temperature"},"max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Tokens"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["system_prompt"],"title":"UpdatePromptRequest"},"UsageLimitCreate":{"properties":{"model_provider":{"type":"string","title":"Model Provider"},"model_name":{"type":"string","title":"Model Name"},"limit_type":{"type":"string","title":"Limit Type"},"limit_value":{"type":"integer","title":"Limit Value"},"period":{"type":"string","title":"Period"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"is_active":{"type":"boolean","title":"Is Active","default":true}},"type":"object","required":["model_provider","model_name","limit_type","limit_value","period"],"title":"UsageLimitCreate"},"UsageLogItem":{"properties":{"endpoint":{"type":"string","title":"Endpoint"},"method":{"type":"string","title":"Method"},"statusCode":{"type":"integer","title":"Statuscode"},"responseTime":{"type":"integer","title":"Responsetime"},"userId":{"type":"string","title":"Userid"},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["endpoint","method","statusCode","responseTime","userId","timestamp"],"title":"UsageLogItem"},"UsagePredictionResponse":{"properties":{"metric":{"type":"string","title":"Metric"},"current_usage":{"type":"number","title":"Current Usage"},"predicted_usage":{"type":"number","title":"Predicted Usage"},"predicted_cost":{"type":"number","title":"Predicted Cost"},"days_until_limit":{"type":"integer","title":"Days Until Limit"},"confidence":{"type":"number","title":"Confidence"}},"type":"object","required":["metric","current_usage","predicted_usage","predicted_cost","days_until_limit","confidence"],"title":"UsagePredictionResponse","description":"사용량 예측 응답"},"UsageResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"character_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Character Id"},"model_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Name"},"input_tokens":{"type":"integer","title":"Input Tokens","default":0},"output_tokens":{"type":"integer","title":"Output Tokens","default":0},"prompt_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Prompt Tokens"},"completion_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Completion Tokens"},"cost":{"type":"number","title":"Cost","default":0.0},"total_cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Cost"},"date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Date"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","user_id","character_id","created_at"],"title":"UsageResponse"},"UsageStatsResponse":{"properties":{"period_date":{"type":"string","format":"date-time","title":"Period Date"},"total_requests":{"type":"integer","title":"Total Requests"},"successful_requests":{"type":"integer","title":"Successful Requests"},"failed_requests":{"type":"integer","title":"Failed Requests"},"total_tokens":{"type":"integer","title":"Total Tokens"},"widget_loads":{"type":"integer","title":"Widget Loads"},"chat_messages":{"type":"integer","title":"Chat Messages"},"character_data_requests":{"type":"integer","title":"Character Data Requests"},"total_cost":{"type":"number","title":"Total Cost"}},"type":"object","required":["period_date","total_requests","successful_requests","failed_requests","total_tokens","widget_loads","chat_messages","character_data_requests","total_cost"],"title":"UsageStatsResponse"},"UserCreate":{"properties":{"email":{"type":"string","format":"email","title":"Email","description":"이메일 주소","example":"user@bestchar.com"},"password":{"type":"string","minLength":8,"title":"Password","description":"비밀번호 (8자 이상)","example":"password123"},"name":{"type":"string","maxLength":50,"minLength":2,"title":"Name","description":"사용자 이름","example":"홍길동"},"locale":{"anyOf":[{"type":"string","pattern":"^(ja|en|ko)$"},{"type":"null"}],"title":"Locale","description":"기본 언어 (없으면 브라우저 언어)","example":"ko"},"consent_terms":{"type":"boolean","title":"Consent Terms","description":"이용약관 동의 (필수)","default":false},"consent_privacy":{"type":"boolean","title":"Consent Privacy","description":"개인정보처리방침 동의 (필수)","default":false},"consent_age14":{"type":"boolean","title":"Consent Age14","description":"만 14세 이상 (필수)","default":false},"consent_ai_learning":{"type":"boolean","title":"Consent Ai Learning","description":"대화 내용 AI 학습 활용 (선택)","default":false},"consent_marketing":{"type":"boolean","title":"Consent Marketing","description":"마케팅 정보 수신 (선택)","default":false},"birth_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Birth Date","description":"생년월일 (YYYY-MM-DD)"},"invite_code":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Invite Code","description":"초대 코드"}},"type":"object","required":["email","password","name"],"title":"UserCreate","description":"사용자 회원가입 요청"},"UserCreditAdjustment":{"properties":{"credit_change":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*(?:\\d{0,12}|(?=[\\d.]{1,19}0*$)\\d{0,12}\\.\\d{0,6}0*$)"}],"title":"Credit Change","description":"Credit change amount (positive or negative)"},"reason":{"type":"string","maxLength":1000,"minLength":1,"title":"Reason","description":"Reason for adjustment"}},"type":"object","required":["credit_change","reason"],"title":"UserCreditAdjustment","example":{"credit_change":1000,"reason":"Promotional credit grant"}},"UserCreditResponse":{"properties":{"user_id":{"type":"string","title":"User Id"},"available_credits":{"type":"number","title":"Available Credits"},"used_credits":{"type":"number","title":"Used Credits"},"monthly_credits":{"type":"number","title":"Monthly Credits"},"purchased_credits":{"type":"number","title":"Purchased Credits"},"total_earned":{"type":"number","title":"Total Earned"},"total_spent":{"type":"number","title":"Total Spent"},"auto_recharge":{"type":"boolean","title":"Auto Recharge"},"last_reset_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Reset At"}},"type":"object","required":["user_id","available_credits","used_credits","monthly_credits","purchased_credits","total_earned","total_spent","auto_recharge"],"title":"UserCreditResponse"},"UserFeedbackRequest":{"properties":{"resolved":{"type":"boolean","title":"Resolved"},"rating":{"anyOf":[{"type":"integer","maximum":5.0,"minimum":1.0},{"type":"null"}],"title":"Rating"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"}},"type":"object","required":["resolved"],"title":"UserFeedbackRequest"},"UserIntelligenceSettingsUpdate":{"properties":{"knowledge_search_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Knowledge Search Enabled"},"knowledge_search_limit":{"anyOf":[{"type":"integer","maximum":50.0,"minimum":1.0},{"type":"null"}],"title":"Knowledge Search Limit"},"knowledge_min_similarity":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Knowledge Min Similarity"},"multi_tier_search_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Multi Tier Search Enabled"},"high_similarity_threshold":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"High Similarity Threshold"},"high_similarity_limit":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"High Similarity Limit"},"medium_similarity_threshold":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Medium Similarity Threshold"},"medium_similarity_limit":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"Medium Similarity Limit"},"low_similarity_limit":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"Low Similarity Limit"},"conversation_history_limit":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":1.0},{"type":"null"}],"title":"Conversation History Limit"},"max_context_tokens":{"anyOf":[{"type":"integer","maximum":10000.0,"minimum":500.0},{"type":"null"}],"title":"Max Context Tokens"},"use_smart_memory_window":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Use Smart Memory Window"},"use_enhanced_memory":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Use Enhanced Memory"},"session_memory_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Session Memory Enabled"},"conversation_memory_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Conversation Memory Enabled"},"favorite_memory_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Favorite Memory Enabled"}},"type":"object","title":"UserIntelligenceSettingsUpdate","description":"구매자별 지능 설정 업데이트 (오버라이드)"},"UserLLMKeyCreate":{"properties":{"provider":{"type":"string","title":"Provider"},"api_key":{"type":"string","title":"Api Key"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"}},"type":"object","required":["provider","api_key"],"title":"UserLLMKeyCreate"},"UserLLMKeyResponse":{"properties":{"id":{"type":"string","title":"Id"},"provider":{"type":"string","title":"Provider"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"is_active":{"type":"boolean","title":"Is Active"},"masked_key":{"type":"string","title":"Masked Key"}},"type":"object","required":["id","provider","is_active","masked_key"],"title":"UserLLMKeyResponse"},"UserLLMSettingResponse":{"properties":{"model":{"type":"string","title":"Model"},"temperature":{"type":"number","title":"Temperature"},"max_tokens":{"type":"integer","title":"Max Tokens"},"is_override":{"type":"boolean","title":"Is Override"},"model_info":{"additionalProperties":true,"type":"object","title":"Model Info"}},"type":"object","required":["model","temperature","max_tokens","is_override","model_info"],"title":"UserLLMSettingResponse","description":"사용자 LLM 설정 응답"},"UserLLMSettingUpdate":{"properties":{"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Id"},"temperature":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Temperature"},"max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Tokens"},"override_global":{"type":"boolean","title":"Override Global","default":false}},"type":"object","title":"UserLLMSettingUpdate","description":"사용자 LLM 설정 업데이트"},"UserLanguagePreferenceRequest":{"properties":{"language_id":{"type":"string","title":"Language Id"}},"type":"object","required":["language_id"],"title":"UserLanguagePreferenceRequest"},"UserListResponse":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"name":{"type":"string","title":"Name"},"is_admin":{"type":"boolean","title":"Is Admin"},"is_superuser":{"type":"boolean","title":"Is Superuser"},"status":{"type":"string","title":"Status"},"created_at":{"type":"string","title":"Created At"},"deleted_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deleted At"},"is_deleted":{"type":"boolean","title":"Is Deleted"}},"type":"object","required":["id","email","name","is_admin","is_superuser","status","created_at","is_deleted"],"title":"UserListResponse"},"UserMemoryPreferencesResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"character_id":{"type":"string","format":"uuid","title":"Character Id"},"prefer_recent_memories":{"type":"boolean","title":"Prefer Recent Memories"},"extended_search_preference":{"type":"boolean","title":"Extended Search Preference"},"privacy_level":{"type":"string","title":"Privacy Level"},"favorite_topics":{"items":{"type":"string"},"type":"array","title":"Favorite Topics","default":[]},"important_keywords":{"items":{"type":"string"},"type":"array","title":"Important Keywords","default":[]},"emotional_preferences":{"additionalProperties":true,"type":"object","title":"Emotional Preferences","default":{}},"memory_notifications_enabled":{"type":"boolean","title":"Memory Notifications Enabled"},"reminiscence_notifications_enabled":{"type":"boolean","title":"Reminiscence Notifications Enabled"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","user_id","character_id","prefer_recent_memories","extended_search_preference","privacy_level","memory_notifications_enabled","reminiscence_notifications_enabled","created_at","updated_at"],"title":"UserMemoryPreferencesResponse"},"UserMemoryPreferencesUpdate":{"properties":{"prefer_recent_memories":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Prefer Recent Memories"},"extended_search_preference":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Extended Search Preference"},"privacy_level":{"anyOf":[{"type":"string","pattern":"^(strict|normal|open)$"},{"type":"null"}],"title":"Privacy Level"},"favorite_topics":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":20},{"type":"null"}],"title":"Favorite Topics"},"important_keywords":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":50},{"type":"null"}],"title":"Important Keywords"},"emotional_preferences":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Emotional Preferences"},"memory_notifications_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Memory Notifications Enabled"},"reminiscence_notifications_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Reminiscence Notifications Enabled"}},"type":"object","title":"UserMemoryPreferencesUpdate"},"UserMemorySettingsOverrideResponse":{"properties":{"character_id":{"type":"string","format":"uuid","title":"Character Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"is_owner":{"type":"boolean","title":"Is Owner"},"user_overrides":{"additionalProperties":true,"type":"object","title":"User Overrides","default":{}},"effective_settings":{"additionalProperties":true,"type":"object","title":"Effective Settings","default":{}},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["character_id","user_id","is_owner"],"title":"UserMemorySettingsOverrideResponse","description":"구매자 메모리 설정 오버라이드 응답"},"UserMemorySettingsOverrideUpdate":{"properties":{"conversation_retention_days":{"anyOf":[{"type":"integer","maximum":365.0,"minimum":1.0},{"type":"null"}],"title":"Conversation Retention Days"},"session_memory_retention_hours":{"anyOf":[{"type":"integer","maximum":168.0,"minimum":1.0},{"type":"null"}],"title":"Session Memory Retention Hours"},"session_memory_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Session Memory Enabled"},"conversation_memory_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Conversation Memory Enabled"},"favorite_memory_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Favorite Memory Enabled"},"search_scope_days":{"anyOf":[{"type":"integer","maximum":365.0,"minimum":1.0},{"type":"null"}],"title":"Search Scope Days"},"max_search_results":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":5.0},{"type":"null"}],"title":"Max Search Results"},"rag_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Rag Enabled"},"rag_top_k":{"anyOf":[{"type":"integer","maximum":20.0,"minimum":1.0},{"type":"null"}],"title":"Rag Top K"},"rag_score_threshold":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Rag Score Threshold"}},"type":"object","title":"UserMemorySettingsOverrideUpdate","description":"구매자가 오버라이드할 수 있는 메모리 설정"},"UserPermissionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"name":{"type":"string","title":"Name"},"status":{"type":"string","title":"Status"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At"},"is_deleted":{"type":"boolean","title":"Is Deleted"},"is_admin":{"type":"boolean","title":"Is Admin"},"is_superuser":{"type":"boolean","title":"Is Superuser"},"can_manage_users":{"type":"boolean","title":"Can Manage Users"},"can_manage_database":{"type":"boolean","title":"Can Manage Database"},"can_manage_ai_dashboard":{"type":"boolean","title":"Can Manage Ai Dashboard"},"can_manage_performance":{"type":"boolean","title":"Can Manage Performance"},"can_manage_ai_cost":{"type":"boolean","title":"Can Manage Ai Cost"},"can_manage_analytics":{"type":"boolean","title":"Can Manage Analytics"},"can_manage_api":{"type":"boolean","title":"Can Manage Api"},"can_manage_system":{"type":"boolean","title":"Can Manage System"},"can_manage_content":{"type":"boolean","title":"Can Manage Content"},"can_manage_security":{"type":"boolean","title":"Can Manage Security"},"can_manage_backup":{"type":"boolean","title":"Can Manage Backup"}},"type":"object","required":["id","email","name","status","created_at","is_deleted","is_admin","is_superuser","can_manage_users","can_manage_database","can_manage_ai_dashboard","can_manage_performance","can_manage_ai_cost","can_manage_analytics","can_manage_api","can_manage_system","can_manage_content","can_manage_security","can_manage_backup"],"title":"UserPermissionResponse"},"UserPermissionUpdate":{"properties":{"user_id":{"type":"string","format":"uuid","title":"User Id"},"can_manage_users":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Can Manage Users"},"can_manage_database":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Can Manage Database"},"can_manage_ai_dashboard":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Can Manage Ai Dashboard"},"can_manage_performance":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Can Manage Performance"},"can_manage_ai_cost":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Can Manage Ai Cost"},"can_manage_analytics":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Can Manage Analytics"},"can_manage_api":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Can Manage Api"},"can_manage_system":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Can Manage System"},"can_manage_content":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Can Manage Content"},"can_manage_security":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Can Manage Security"},"can_manage_backup":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Can Manage Backup"}},"type":"object","required":["user_id"],"title":"UserPermissionUpdate"},"UserPermissionsResponse":{"properties":{"permissions":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Permissions"},"role":{"$ref":"#/components/schemas/TeamRole"},"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"organization_name":{"type":"string","title":"Organization Name"}},"type":"object","required":["permissions","role","organization_id","organization_name"],"title":"UserPermissionsResponse"},"UserResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"사용자 고유 ID"},"email":{"type":"string","title":"Email","description":"이메일 주소"},"name":{"type":"string","title":"Name","description":"사용자 이름"},"locale":{"type":"string","title":"Locale","description":"기본 언어"},"plan":{"type":"string","title":"Plan","description":"구독 플랜","example":"free"},"is_admin":{"type":"boolean","title":"Is Admin","description":"관리자 권한"},"is_superuser":{"type":"boolean","title":"Is Superuser","description":"슈퍼유저 권한"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"가입일"},"can_manage_users":{"type":"boolean","title":"Can Manage Users","description":"사용자 관리 권한","default":false},"can_manage_database":{"type":"boolean","title":"Can Manage Database","description":"데이터베이스 관리 권한","default":false},"can_manage_ai_dashboard":{"type":"boolean","title":"Can Manage Ai Dashboard","description":"AI 대시보드 관리 권한","default":false},"can_manage_performance":{"type":"boolean","title":"Can Manage Performance","description":"성능 모니터링 권한","default":false},"can_manage_ai_cost":{"type":"boolean","title":"Can Manage Ai Cost","description":"AI 비용 관리 권한","default":false},"can_manage_analytics":{"type":"boolean","title":"Can Manage Analytics","description":"분석 대시보드 권한","default":false},"can_manage_api":{"type":"boolean","title":"Can Manage Api","description":"API 관리 권한","default":false},"can_manage_system":{"type":"boolean","title":"Can Manage System","description":"시스템 운영 권한","default":false},"can_manage_content":{"type":"boolean","title":"Can Manage Content","description":"콘텐츠 관리 권한","default":false},"can_manage_security":{"type":"boolean","title":"Can Manage Security","description":"보안 관리 권한","default":false},"can_manage_backup":{"type":"boolean","title":"Can Manage Backup","description":"백업 관리 권한","default":false},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url","description":"프로필 사진 URL"},"banner_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Banner Url","description":"배너 이미지 URL"},"bio":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bio","description":"자기소개"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"직함/타이틀"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company","description":"회사/조직"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location","description":"위치"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website","description":"개인 웹사이트"},"twitter":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Twitter","description":"트위터 핸들"},"github":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Github","description":"GitHub 사용자명"},"linkedin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin","description":"LinkedIn URL"},"portfolio_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Portfolio Url","description":"포트폴리오 URL"},"specialties":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Specialties","description":"전문 분야 (JSON 문자열)"},"is_verified_creator":{"type":"boolean","title":"Is Verified Creator","description":"인증된 크리에이터","default":false},"is_expert":{"type":"boolean","title":"Is Expert","description":"전문가 뱃지","default":false},"show_public_profile":{"type":"boolean","title":"Show Public Profile","description":"공개 프로필 표시 여부","default":true},"birth_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Birth Date","description":"생년월일"},"is_minor":{"type":"boolean","title":"Is Minor","description":"미성년자 여부 (생년월일 기준)","default":false},"safe_mode":{"type":"boolean","title":"Safe Mode","description":"보호 모드 플래그","default":true},"safe_mode_effective":{"type":"boolean","title":"Safe Mode Effective","description":"실제 적용되는 보호 모드 (미성년자·미신고는 항상 true)","default":true}},"type":"object","required":["id","email","name","locale","plan","is_admin","is_superuser","created_at"],"title":"UserResponse","description":"사용자 정보 응답"},"UserUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":50,"minLength":2},{"type":"null"}],"title":"Name","description":"사용자 이름","example":"홍길동"},"locale":{"anyOf":[{"type":"string","pattern":"^(ja|en|ko)$"},{"type":"null"}],"title":"Locale","description":"기본 언어","example":"ko"},"current_password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Password","description":"현재 비밀번호 (비밀번호 변경 시 필수)"},"new_password":{"anyOf":[{"type":"string","minLength":8},{"type":"null"}],"title":"New Password","description":"새 비밀번호 (8자 이상)"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url","description":"프로필 사진 URL"},"banner_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Banner Url","description":"배너 이미지 URL"},"bio":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Bio","description":"자기소개"},"title":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Title","description":"직함/타이틀"},"company":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Company","description":"회사/조직"},"location":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Location","description":"위치"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website","description":"개인 웹사이트"},"twitter":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Twitter","description":"트위터 핸들"},"github":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Github","description":"GitHub 사용자명"},"linkedin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin","description":"LinkedIn URL"},"portfolio_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Portfolio Url","description":"포트폴리오 URL"},"specialties":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Specialties","description":"전문 분야 (JSON 문자열)"},"show_public_profile":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Show Public Profile","description":"공개 프로필 표시 여부"},"birth_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Birth Date","description":"생년월일 (YYYY-MM-DD)"},"safe_mode":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Safe Mode","description":"보호 모드 (성인만 끌 수 있음)"}},"type":"object","title":"UserUpdate","description":"사용자 개인정보 수정 요청"},"UserUpdateRequest":{"properties":{"user_id":{"type":"string","title":"User Id"},"is_admin":{"type":"boolean","title":"Is Admin"}},"type":"object","required":["user_id","is_admin"],"title":"UserUpdateRequest"},"ValidatePresetRequest":{"properties":{"name":{"type":"string","title":"Name"},"seed_prompt":{"type":"string","title":"Seed Prompt"},"personality_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Personality Type"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["name","seed_prompt"],"title":"ValidatePresetRequest","description":"프리셋 검증 요청"},"ValidatePresetResponse":{"properties":{"is_valid":{"type":"boolean","title":"Is Valid"},"quality_score":{"type":"number","title":"Quality Score"},"issues":{"items":{"type":"string"},"type":"array","title":"Issues"},"suggestions":{"items":{"type":"string"},"type":"array","title":"Suggestions"},"details":{"additionalProperties":true,"type":"object","title":"Details"}},"type":"object","required":["is_valid","quality_score","issues","suggestions","details"],"title":"ValidatePresetResponse","description":"프리셋 검증 응답"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VariableSchema":{"properties":{"name":{"type":"string","title":"Name"},"type":{"type":"string","title":"Type"},"required":{"type":"boolean","title":"Required"},"description":{"type":"string","title":"Description"}},"type":"object","required":["name","type","required","description"],"title":"VariableSchema","description":"프롬프트 변수 스키마"},"VectorBillingResponse":{"properties":{"id":{"type":"string","title":"Id"},"user_id":{"type":"string","title":"User Id"},"billing_month":{"type":"string","title":"Billing Month"},"total_documents":{"type":"integer","title":"Total Documents"},"total_chunks":{"type":"integer","title":"Total Chunks"},"total_searches":{"type":"integer","title":"Total Searches"},"total_storage_mb":{"type":"number","title":"Total Storage Mb"},"plan_cost":{"type":"number","title":"Plan Cost"},"document_cost":{"type":"number","title":"Document Cost"},"chunk_cost":{"type":"number","title":"Chunk Cost"},"search_cost":{"type":"number","title":"Search Cost"},"storage_cost":{"type":"number","title":"Storage Cost"},"total_cost":{"type":"number","title":"Total Cost"},"status":{"type":"string","title":"Status"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"paid_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Paid At"}},"type":"object","required":["id","user_id","billing_month","total_documents","total_chunks","total_searches","total_storage_mb","plan_cost","document_cost","chunk_cost","search_cost","storage_cost","total_cost","status","created_at"],"title":"VectorBillingResponse","description":"벡터 DB 청구서 응답"},"VectorStats":{"properties":{"total_vectors":{"type":"integer","title":"Total Vectors"},"total_collections":{"type":"integer","title":"Total Collections"},"total_storage_mb":{"type":"number","title":"Total Storage Mb"},"collections":{"items":{"$ref":"#/components/schemas/CollectionInfo"},"type":"array","title":"Collections"}},"type":"object","required":["total_vectors","total_collections","total_storage_mb","collections"],"title":"VectorStats","description":"벡터 통계"},"VersionCompareResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"version_1":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Version 1"},"version_2":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Version 2"},"diff":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Diff"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["success","version_1","version_2","diff"],"title":"VersionCompareResponse","description":"버전 비교 응답"},"VersionDetailResponse":{"properties":{"id":{"type":"string","title":"Id"},"knowledge_id":{"type":"string","title":"Knowledge Id"},"version_number":{"type":"integer","title":"Version Number"},"version_tag":{"type":"string","title":"Version Tag"},"version_type":{"type":"string","title":"Version Type"},"title":{"type":"string","title":"Title"},"content":{"type":"string","title":"Content"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Keywords"},"change_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Change Description"},"change_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Change Type"},"diff_summary":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Diff Summary"},"quality_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Quality Score"},"confidence_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confidence Score"},"is_current":{"type":"boolean","title":"Is Current"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","knowledge_id","version_number","version_tag","version_type","title","content","summary","keywords","change_description","change_type","diff_summary","quality_score","confidence_score","is_current","created_at"],"title":"VersionDetailResponse","description":"버전 상세 응답"},"VersionResponse":{"properties":{"id":{"type":"string","title":"Id"},"version_number":{"type":"integer","title":"Version Number"},"version_tag":{"type":"string","title":"Version Tag"},"version_type":{"type":"string","title":"Version Type"},"change_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Change Description"},"change_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Change Type"},"changed_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Changed By"},"quality_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Quality Score"},"is_current":{"type":"boolean","title":"Is Current"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","version_number","version_tag","version_type","change_description","change_type","changed_by","quality_score","is_current","created_at"],"title":"VersionResponse","description":"버전 응답"},"VoiceProvider":{"type":"string","enum":["openai","elevenlabs"],"title":"VoiceProvider","description":"음성 TTS 제공자"},"WaitlistRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Name"},"site_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Site Url","description":"위젯을 붙일 사이트"},"purpose":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Purpose"},"locale":{"anyOf":[{"type":"string","pattern":"^(ja|en|ko)$"},{"type":"null"}],"title":"Locale"}},"type":"object","required":["email"],"title":"WaitlistRequest","description":"초대제 대기열 신청 (가입이 닫혀 있을 때)"},"WebhookCreateRequest":{"properties":{"api_key_id":{"type":"string","format":"uuid","title":"Api Key Id"},"target_url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Target Url"},"events":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Events"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["api_key_id","target_url"],"title":"WebhookCreateRequest"},"WebhookCreatedResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"api_key_id":{"type":"string","format":"uuid","title":"Api Key Id"},"target_url":{"type":"string","title":"Target Url"},"events":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Events"},"secret":{"type":"string","title":"Secret"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"warning":{"type":"string","title":"Warning","default":"⚠️ secret은 다시 볼 수 없습니다. payload 서명 검증에 사용하세요."}},"type":"object","required":["id","api_key_id","target_url","secret"],"title":"WebhookCreatedResponse"},"WebhookResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"api_key_id":{"type":"string","format":"uuid","title":"Api Key Id"},"target_url":{"type":"string","title":"Target Url"},"events":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Events"},"enabled":{"type":"boolean","title":"Enabled"},"last_delivery_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Delivery At"},"last_status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Status Code"},"consecutive_failures":{"type":"integer","title":"Consecutive Failures","default":0},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","api_key_id","target_url","enabled","created_at"],"title":"WebhookResponse"},"WebsiteCrawlRequest":{"properties":{"url":{"type":"string","title":"Url"},"max_depth":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Depth","default":3},"max_pages":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Pages","default":50},"delay":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Delay","default":1.0},"respect_robots":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Respect Robots","default":true},"allowed_domains":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Domains"},"excluded_patterns":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Excluded Patterns"},"use_playwright":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Use Playwright","default":false},"crawl_frequency":{"anyOf":[{"type":"string","pattern":"^(manual|daily|weekly|monthly)$"},{"type":"null"}],"title":"Crawl Frequency","default":"manual"}},"type":"object","required":["url"],"title":"WebsiteCrawlRequest"},"WidgetAnalysisRequest":{"properties":{"url":{"type":"string","title":"Url","description":"분석할 쇼핑몰 URL"}},"type":"object","required":["url"],"title":"WidgetAnalysisRequest","description":"위젯 디자인 분석 요청 스키마"},"WidgetChatRequest":{"properties":{"context":{"anyOf":[{"$ref":"#/components/schemas/WidgetContext"},{"type":"null"}]},"message":{"type":"string","title":"Message"},"conversation_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conversation Id"},"lang":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"},"group_mode":{"type":"boolean","title":"Group Mode","default":false},"group_message_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":12,"title":"Group Message Ids"}},"type":"object","required":["message"],"title":"WidgetChatRequest"},"WidgetContext":{"properties":{"site":{"anyOf":[{"$ref":"#/components/schemas/WidgetSite"},{"type":"null"}]},"traits":{"additionalProperties":{"anyOf":[{"type":"string","maxLength":200},{"type":"boolean"},{"type":"integer"},{"type":"number"}]},"type":"object","maxProperties":30,"title":"Traits"}},"additionalProperties":false,"type":"object","title":"WidgetContext"},"WidgetSettings":{"properties":{"show_header":{"type":"boolean","title":"Show Header","description":"캐릭터 헤더 표시 여부","default":true},"header_background_color":{"type":"string","title":"Header Background Color","description":"헤더 배경색 (HEX)","default":"#FFFFFF"},"header_text_color":{"type":"string","title":"Header Text Color","description":"헤더 텍스트 색 (HEX)","default":"#111827"},"theme":{"type":"string","title":"Theme","description":"위젯 테마 (light/dark/auto)","default":"light"},"user_message_bg_color":{"type":"string","title":"User Message Bg Color","description":"사용자 메시지 배경색 (HEX)","default":"#4F46E5"},"user_message_text_color":{"type":"string","title":"User Message Text Color","description":"사용자 메시지 텍스트 색상 (HEX)","default":"#FFFFFF"},"ai_message_bg_color":{"type":"string","title":"Ai Message Bg Color","description":"AI 메시지 배경색 (HEX)","default":"#F3F4F6"},"ai_message_text_color":{"type":"string","title":"Ai Message Text Color","description":"AI 메시지 텍스트 색상 (HEX)","default":"#111827"},"welcome_message":{"anyOf":[{"type":"string"},{"additionalProperties":{"type":"string"},"propertyNames":{"enum":["ko","ja","en"]},"type":"object"},{"type":"null"}],"title":"Welcome Message","description":"커스텀 환영 메시지 (NULL이면 캐릭터 기본 인사말)"},"placeholder_text":{"anyOf":[{"type":"string"},{"additionalProperties":{"type":"string"},"propertyNames":{"enum":["ko","ja","en"]},"type":"object"}],"title":"Placeholder Text","description":"입력창 플레이스홀더","default":"메시지를 입력하세요..."},"default_width":{"type":"string","title":"Default Width","description":"기본 너비","default":"400px"},"default_height":{"type":"string","title":"Default Height","description":"기본 높이","default":"600px"},"show_online_status":{"type":"boolean","title":"Show Online Status","description":"온라인 상태 표시","default":true},"enable_typing_indicator":{"type":"boolean","title":"Enable Typing Indicator","description":"타이핑 인디케이터","default":true},"enable_sound":{"type":"boolean","title":"Enable Sound","description":"알림음 활성화","default":false},"enable_streaming":{"type":"boolean","title":"Enable Streaming","description":"스트리밍 채팅 (실시간 글자 표시)","default":true},"launcher_bg_color":{"type":"string","title":"Launcher Bg Color","description":"런처 배경색 (HEX)","default":"#4F46E5"},"launcher_style":{"type":"string","enum":["icon","avatar"],"title":"Launcher Style","default":"avatar"},"launcher_icon":{"type":"string","title":"Launcher Icon","description":"런처 아이콘 (이모지)","default":"💬"},"launcher_size":{"type":"string","title":"Launcher Size","description":"런처 크기 (small/medium/large)","default":"medium"},"launcher_position":{"type":"string","title":"Launcher Position","description":"런처 위치 (bottom-right/bottom-left)","default":"bottom-right"},"launcher_bottom_margin":{"type":"integer","title":"Launcher Bottom Margin","description":"런처 하단 여백 (px)","default":20},"launcher_side_margin":{"type":"integer","title":"Launcher Side Margin","description":"런처 측면 여백 (px)","default":20},"mobile_full_screen":{"type":"boolean","title":"Mobile Full Screen","description":"모바일 전체화면 여부","default":true},"proactive_enabled":{"type":"boolean","title":"Proactive Enabled","description":"프로액티브 메시지 활성화","default":false},"proactive_message":{"anyOf":[{"type":"string"},{"additionalProperties":{"type":"string"},"propertyNames":{"enum":["ko","ja","en"]},"type":"object"},{"type":"null"}],"title":"Proactive Message","description":"프로액티브 메시지 내용 (NULL이면 AI 자동 생성)"},"proactive_delay_seconds":{"type":"integer","maximum":300.0,"minimum":5.0,"title":"Proactive Delay Seconds","description":"트리거 대기 시간 (초, 5-300)","default":30},"proactive_trigger_type":{"type":"string","title":"Proactive Trigger Type","description":"트리거 유형 (time/scroll/exit_intent)","default":"time"},"proactive_sound_enabled":{"type":"boolean","title":"Proactive Sound Enabled","description":"프로액티브 메시지 알림음","default":true},"proactive_vibration_enabled":{"type":"boolean","title":"Proactive Vibration Enabled","description":"프로액티브 메시지 진동 (모바일)","default":false},"proactive_show_once":{"type":"boolean","title":"Proactive Show Once","description":"세션당 한 번만 표시","default":false},"proactive_badge_enabled":{"type":"boolean","title":"Proactive Badge Enabled","description":"FAB 버튼에 뱃지 표시","default":true},"hide_action_descriptions":{"type":"boolean","title":"Hide Action Descriptions","description":"답변에서 *동작 묘사* 를 제거 (안내형 위젯용)","default":false},"id":{"type":"string","format":"uuid","title":"Id"},"character_id":{"type":"string","format":"uuid","title":"Character Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","character_id","created_at","updated_at"],"title":"WidgetSettings","description":"위젯 설정 응답 스키마"},"WidgetSettingsPublic":{"properties":{"show_header":{"type":"boolean","title":"Show Header"},"header_background_color":{"type":"string","title":"Header Background Color"},"header_text_color":{"type":"string","title":"Header Text Color"},"theme":{"type":"string","title":"Theme"},"user_message_bg_color":{"type":"string","title":"User Message Bg Color"},"user_message_text_color":{"type":"string","title":"User Message Text Color"},"ai_message_bg_color":{"type":"string","title":"Ai Message Bg Color"},"ai_message_text_color":{"type":"string","title":"Ai Message Text Color"},"welcome_message":{"anyOf":[{"type":"string"},{"additionalProperties":{"type":"string"},"propertyNames":{"enum":["ko","ja","en"]},"type":"object"},{"type":"null"}],"title":"Welcome Message"},"placeholder_text":{"anyOf":[{"type":"string"},{"additionalProperties":{"type":"string"},"propertyNames":{"enum":["ko","ja","en"]},"type":"object"}],"title":"Placeholder Text"},"default_width":{"type":"string","title":"Default Width"},"default_height":{"type":"string","title":"Default Height"},"show_online_status":{"type":"boolean","title":"Show Online Status"},"enable_typing_indicator":{"type":"boolean","title":"Enable Typing Indicator"},"enable_sound":{"type":"boolean","title":"Enable Sound"},"enable_streaming":{"type":"boolean","title":"Enable Streaming"},"launcher_bg_color":{"type":"string","title":"Launcher Bg Color"},"launcher_style":{"type":"string","enum":["icon","avatar"],"title":"Launcher Style","default":"avatar"},"launcher_icon":{"type":"string","title":"Launcher Icon"},"launcher_size":{"type":"string","title":"Launcher Size"},"launcher_position":{"type":"string","title":"Launcher Position"},"launcher_bottom_margin":{"type":"integer","title":"Launcher Bottom Margin"},"launcher_side_margin":{"type":"integer","title":"Launcher Side Margin"},"mobile_full_screen":{"type":"boolean","title":"Mobile Full Screen"},"proactive_enabled":{"type":"boolean","title":"Proactive Enabled"},"proactive_message":{"anyOf":[{"type":"string"},{"additionalProperties":{"type":"string"},"propertyNames":{"enum":["ko","ja","en"]},"type":"object"},{"type":"null"}],"title":"Proactive Message"},"proactive_delay_seconds":{"type":"integer","title":"Proactive Delay Seconds"},"proactive_trigger_type":{"type":"string","title":"Proactive Trigger Type"},"proactive_sound_enabled":{"type":"boolean","title":"Proactive Sound Enabled"},"proactive_vibration_enabled":{"type":"boolean","title":"Proactive Vibration Enabled"},"proactive_show_once":{"type":"boolean","title":"Proactive Show Once"},"proactive_badge_enabled":{"type":"boolean","title":"Proactive Badge Enabled"}},"type":"object","required":["show_header","header_background_color","header_text_color","theme","user_message_bg_color","user_message_text_color","ai_message_bg_color","ai_message_text_color","welcome_message","placeholder_text","default_width","default_height","show_online_status","enable_typing_indicator","enable_sound","enable_streaming","launcher_bg_color","launcher_icon","launcher_size","launcher_position","launcher_bottom_margin","launcher_side_margin","mobile_full_screen","proactive_enabled","proactive_message","proactive_delay_seconds","proactive_trigger_type","proactive_sound_enabled","proactive_vibration_enabled","proactive_show_once","proactive_badge_enabled"],"title":"WidgetSettingsPublic","description":"공개 위젯 설정 스키마 (외부 위젯에서 사용)"},"WidgetSettingsUpdate":{"properties":{"show_header":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Show Header"},"header_background_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Header Background Color"},"header_text_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Header Text Color"},"theme":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Theme"},"user_message_bg_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Message Bg Color"},"user_message_text_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Message Text Color"},"ai_message_bg_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Message Bg Color"},"ai_message_text_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Message Text Color"},"welcome_message":{"anyOf":[{"type":"string"},{"additionalProperties":{"type":"string"},"propertyNames":{"enum":["ko","ja","en"]},"type":"object"},{"type":"null"}],"title":"Welcome Message"},"placeholder_text":{"anyOf":[{"type":"string"},{"additionalProperties":{"type":"string"},"propertyNames":{"enum":["ko","ja","en"]},"type":"object"},{"type":"null"}],"title":"Placeholder Text"},"default_width":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Width"},"default_height":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Height"},"show_online_status":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Show Online Status"},"enable_typing_indicator":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enable Typing Indicator"},"enable_sound":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enable Sound"},"enable_streaming":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enable Streaming"},"launcher_bg_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Launcher Bg Color"},"launcher_style":{"anyOf":[{"type":"string","enum":["icon","avatar"]},{"type":"null"}],"title":"Launcher Style"},"launcher_icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Launcher Icon"},"launcher_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Launcher Size"},"launcher_position":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Launcher Position"},"launcher_bottom_margin":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Launcher Bottom Margin"},"launcher_side_margin":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Launcher Side Margin"},"mobile_full_screen":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Mobile Full Screen"},"proactive_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Proactive Enabled"},"proactive_message":{"anyOf":[{"type":"string"},{"additionalProperties":{"type":"string"},"propertyNames":{"enum":["ko","ja","en"]},"type":"object"},{"type":"null"}],"title":"Proactive Message"},"proactive_delay_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Proactive Delay Seconds"},"proactive_trigger_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proactive Trigger Type"},"proactive_sound_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Proactive Sound Enabled"},"proactive_vibration_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Proactive Vibration Enabled"},"proactive_show_once":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Proactive Show Once"},"proactive_badge_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Proactive Badge Enabled"},"hide_action_descriptions":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Hide Action Descriptions"}},"type":"object","title":"WidgetSettingsUpdate","description":"위젯 설정 업데이트 스키마 (모든 필드 선택적)"},"WidgetSite":{"properties":{"url":{"type":"string","maxLength":500,"title":"Url"},"title":{"type":"string","maxLength":200,"title":"Title","default":""},"content":{"type":"string","maxLength":2000,"title":"Content","default":""}},"additionalProperties":false,"type":"object","required":["url"],"title":"WidgetSite"},"WidgetThemeCreate":{"properties":{"character_purchase_id":{"type":"string","format":"uuid","title":"Character Purchase Id"},"theme_name":{"type":"string","title":"Theme Name","default":"custom"},"user_message_text_color":{"type":"string","title":"User Message Text Color","default":"#FFFFFF"},"user_message_bg_color":{"type":"string","title":"User Message Bg Color","default":"#4F46E5"},"ai_message_text_color":{"type":"string","title":"Ai Message Text Color","default":"#1F2937"},"ai_message_bg_color":{"type":"string","title":"Ai Message Bg Color","default":"#F3F4F6"},"chat_window_bg_color":{"type":"string","title":"Chat Window Bg Color","default":"#FFFFFF"},"chat_header_bg_color":{"type":"string","title":"Chat Header Bg Color","default":"#4F46E5"},"chat_header_text_color":{"type":"string","title":"Chat Header Text Color","default":"#FFFFFF"},"input_bg_color":{"type":"string","title":"Input Bg Color","default":"#FFFFFF"},"input_text_color":{"type":"string","title":"Input Text Color","default":"#1F2937"},"input_border_color":{"type":"string","title":"Input Border Color","default":"#D1D5DB"},"input_placeholder_color":{"type":"string","title":"Input Placeholder Color","default":"#9CA3AF"},"send_button_color":{"type":"string","title":"Send Button Color","default":"#4F46E5"},"font_family":{"type":"string","title":"Font Family","default":"'Inter', 'Apple SD Gothic Neo', sans-serif"},"font_size_base":{"type":"string","title":"Font Size Base","default":"14px"},"font_size_small":{"type":"string","title":"Font Size Small","default":"12px"},"font_size_large":{"type":"string","title":"Font Size Large","default":"16px"},"border_radius":{"type":"string","title":"Border Radius","default":"12px"},"message_spacing":{"type":"string","title":"Message Spacing","default":"8px"},"bubble_shadow":{"type":"string","title":"Bubble Shadow","default":"0 1px 2px rgba(0,0,0,0.1)"},"widget_button_bg_color":{"type":"string","title":"Widget Button Bg Color","default":"#4F46E5"},"widget_button_icon_color":{"type":"string","title":"Widget Button Icon Color","default":"#FFFFFF"},"widget_button_position":{"type":"string","title":"Widget Button Position","default":"bottom-right"},"widget_button_text":{"type":"string","title":"Widget Button Text","default":"💬 챗봇"},"welcome_message":{"type":"string","title":"Welcome Message","default":"안녕하세요! 무엇을 도와드릴까요?"},"input_placeholder":{"type":"string","title":"Input Placeholder","default":"메시지를 입력하세요..."}},"type":"object","required":["character_purchase_id"],"title":"WidgetThemeCreate","description":"위젯 테마 생성 요청"},"WidgetThemeUpdate":{"properties":{"theme_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Theme Name"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"user_message_text_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Message Text Color"},"user_message_bg_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Message Bg Color"},"ai_message_text_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Message Text Color"},"ai_message_bg_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Message Bg Color"},"chat_window_bg_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chat Window Bg Color"},"chat_header_bg_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chat Header Bg Color"},"chat_header_text_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chat Header Text Color"},"input_bg_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Bg Color"},"input_text_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Text Color"},"input_border_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Border Color"},"input_placeholder_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Placeholder Color"},"send_button_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Send Button Color"},"font_family":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Font Family"},"font_size_base":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Font Size Base"},"font_size_small":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Font Size Small"},"font_size_large":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Font Size Large"},"border_radius":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Border Radius"},"message_spacing":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message Spacing"},"bubble_shadow":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bubble Shadow"},"widget_button_bg_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Widget Button Bg Color"},"widget_button_icon_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Widget Button Icon Color"},"widget_button_position":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Widget Button Position"},"widget_button_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Widget Button Text"},"welcome_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Welcome Message"},"input_placeholder":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Placeholder"},"custom_css":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Css"}},"type":"object","title":"WidgetThemeUpdate","description":"위젯 테마 업데이트 요청"},"WizardDeployRequest":{"properties":{"character_id":{"type":"string","title":"Character Id"},"allowed_domains":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Domains"},"widget_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Widget Config","description":"위젯 설정","example":{"position":"bottom-right","primaryColor":"#0066FF","theme":"light"}}},"type":"object","required":["character_id"],"title":"WizardDeployRequest","description":"배포 요청\n\nembed_type 필드는 제거됨 — 스니펫은 항상 현행 SDK(window.BestCharConfig +\n/sdk/widget.js) 하나다. 구 프론트가 보내던 embed_type('simple' 등)은 pydantic\n이 여분 필드로 무시한다 (과거엔 enum 에 'simple' 이 없어 기본 경로가 422 였다)."},"WizardDeployResponse":{"properties":{"character_id":{"type":"string","title":"Character Id"},"project_id":{"type":"string","title":"Project Id"},"api_key":{"type":"string","title":"Api Key"},"embed_code":{"type":"string","title":"Embed Code"},"preview_url":{"type":"string","title":"Preview Url"},"documentation_url":{"type":"string","title":"Documentation Url"},"current_step":{"$ref":"#/components/schemas/WizardStep","default":"deploy"},"progress":{"type":"integer","title":"Progress","default":100}},"type":"object","required":["character_id","project_id","api_key","embed_code","preview_url","documentation_url"],"title":"WizardDeployResponse","description":"배포 응답"},"WizardKnowledgeRequest":{"properties":{"character_id":{"type":"string","title":"Character Id"},"sources":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Sources","description":"지식 소스 목록","example":[{"type":"url","url":"https://example.com","use_playwright":false},{"content":"회사 소개 내용...","type":"text"}]}},"type":"object","required":["character_id","sources"],"title":"WizardKnowledgeRequest","description":"지식 추가 요청"},"WizardKnowledgeResponse":{"properties":{"character_id":{"type":"string","title":"Character Id"},"added_sources":{"type":"integer","title":"Added Sources"},"processing_tasks":{"items":{"type":"string"},"type":"array","title":"Processing Tasks","description":"처리 중인 태스크 ID"},"current_step":{"$ref":"#/components/schemas/WizardStep","default":"test"},"progress":{"type":"integer","title":"Progress","default":50}},"type":"object","required":["character_id","added_sources"],"title":"WizardKnowledgeResponse","description":"지식 추가 응답"},"WizardPresetRequest":{"properties":{"preset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preset Id","description":"기존 프리셋 ID (선택 시)"},"custom_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Custom Config","description":"직접 생성 시 설정"},"lang":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang","description":"제작자 UI 언어(ko/ja/en) — 직접 생성 캐릭터의 답변 언어로 고정"}},"type":"object","title":"WizardPresetRequest","description":"Preset 선택 요청"},"WizardPresetResponse":{"properties":{"character_id":{"type":"string","title":"Character Id"},"character_name":{"type":"string","title":"Character Name"},"preset_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preset Name"},"current_step":{"$ref":"#/components/schemas/WizardStep","default":"knowledge"},"progress":{"type":"integer","title":"Progress","default":25}},"type":"object","required":["character_id","character_name","preset_name"],"title":"WizardPresetResponse","description":"Preset 선택 응답"},"WizardSession":{"properties":{"session_id":{"type":"string","title":"Session Id"},"user_id":{"type":"string","title":"User Id"},"character_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Character Id"},"current_step":{"$ref":"#/components/schemas/WizardStep","default":"preset"},"status":{"$ref":"#/components/schemas/WizardStatus","default":"in_progress"},"progress":{"type":"integer","title":"Progress","default":0},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"preset_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Preset Data"},"knowledge_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Knowledge Data"},"test_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Test Data"},"deploy_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Deploy Data"}},"type":"object","required":["session_id","user_id","created_at","updated_at"],"title":"WizardSession","description":"마법사 세션"},"WizardSessionResponse":{"properties":{"session":{"$ref":"#/components/schemas/WizardSession"},"next_action":{"type":"string","title":"Next Action","description":"다음 수행할 액션"},"estimated_time":{"type":"string","title":"Estimated Time","description":"예상 완료 시간"}},"type":"object","required":["session","next_action","estimated_time"],"title":"WizardSessionResponse","description":"마법사 세션 조회 응답"},"WizardStatus":{"type":"string","enum":["in_progress","completed","failed"],"title":"WizardStatus","description":"마법사 상태"},"WizardStep":{"type":"string","enum":["preset","knowledge","test","deploy"],"title":"WizardStep","description":"마법사 단계"},"WizardTestRequest":{"properties":{"character_id":{"type":"string","title":"Character Id"},"test_message":{"type":"string","title":"Test Message","description":"테스트 메시지"},"lang":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang","description":"선호 답변 언어(ko/ja/en) — 캐릭터에 명시 언어가 없을 때 적용"}},"type":"object","required":["character_id","test_message"],"title":"WizardTestRequest","description":"테스트 채팅 요청"},"WizardTestResponse":{"properties":{"character_id":{"type":"string","title":"Character Id"},"test_message":{"type":"string","title":"Test Message"},"ai_response":{"type":"string","title":"Ai Response"},"response_time":{"type":"number","title":"Response Time","description":"응답 시간 (초)"},"knowledge_used":{"type":"boolean","title":"Knowledge Used","description":"지식베이스 사용 여부"},"current_step":{"$ref":"#/components/schemas/WizardStep","default":"deploy"},"progress":{"type":"integer","title":"Progress","default":75}},"type":"object","required":["character_id","test_message","ai_response","response_time","knowledge_used"],"title":"WizardTestResponse","description":"테스트 채팅 응답"},"app__api__v1__endpoints__admin__admin_feedback__FeedbackResponse":{"properties":{"id":{"type":"string","title":"Id"},"page_url":{"type":"string","title":"Page Url"},"page_name":{"type":"string","title":"Page Name"},"feedback_type":{"type":"string","title":"Feedback Type"},"urgency":{"type":"string","title":"Urgency"},"rating":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rating"},"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description"},"status":{"type":"string","title":"Status"},"admin_response":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Response"},"user_id":{"type":"string","title":"User Id"},"user_email":{"type":"string","title":"User Email"},"submitted_at":{"type":"string","title":"Submitted At"},"reviewed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reviewed At"},"implemented_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Implemented At"},"sentiment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sentiment"},"sentiment_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Sentiment Score"}},"type":"object","required":["id","page_url","page_name","feedback_type","urgency","rating","title","description","status","admin_response","user_id","user_email","submitted_at","reviewed_at","implemented_at"],"title":"FeedbackResponse","description":"피드백 응답"},"app__api__v1__endpoints__admin__admin_feedback__FeedbackStatsResponse":{"properties":{"total":{"type":"integer","title":"Total"},"pending":{"type":"integer","title":"Pending"},"reviewed":{"type":"integer","title":"Reviewed"},"implemented":{"type":"integer","title":"Implemented"},"rejected":{"type":"integer","title":"Rejected"},"by_type":{"additionalProperties":true,"type":"object","title":"By Type"},"by_urgency":{"additionalProperties":true,"type":"object","title":"By Urgency"},"avg_rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Rating"}},"type":"object","required":["total","pending","reviewed","implemented","rejected","by_type","by_urgency","avg_rating"],"title":"FeedbackStatsResponse","description":"피드백 통계"},"app__api__v1__endpoints__admin__content_admin__AnnouncementCreate":{"properties":{"title":{"type":"string","title":"Title"},"content":{"type":"string","title":"Content"},"type":{"type":"string","title":"Type","default":"info"},"is_pinned":{"type":"boolean","title":"Is Pinned","default":false},"is_active":{"type":"boolean","title":"Is Active","default":true},"start_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"},"end_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}},"type":"object","required":["title","content"],"title":"AnnouncementCreate"},"app__api__v1__endpoints__admin__content_admin__AnnouncementUpdate":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"is_pinned":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Pinned"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"start_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"},"end_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}},"type":"object","title":"AnnouncementUpdate"},"app__api__v1__endpoints__admin__presets_analytics__FeedbackRequest":{"properties":{"rating":{"type":"integer","title":"Rating"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"},"suggestions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Suggestions"},"ease_of_use":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ease Of Use"},"quality":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Quality"},"accuracy":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Accuracy"},"character_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Character Id"}},"type":"object","required":["rating"],"title":"FeedbackRequest","description":"피드백 제출 요청"},"app__api__v1__endpoints__character_announcements__AnnouncementCreate":{"properties":{"character_id":{"type":"string","title":"Character Id"},"title":{"type":"string","title":"Title"},"content":{"type":"string","title":"Content"},"announcement_type":{"type":"string","title":"Announcement Type","default":"general"},"priority":{"type":"string","title":"Priority","default":"normal"},"is_popup":{"type":"boolean","title":"Is Popup","default":false},"show_in_chat":{"type":"boolean","title":"Show In Chat","default":true},"target_users":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Target Users"},"target_user_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Target User Types"},"start_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"},"end_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"},"max_display_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Display Count"},"display_interval_hours":{"type":"integer","title":"Display Interval Hours","default":24},"style_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Style Config"},"translations":{"anyOf":[{"additionalProperties":{"additionalProperties":{"type":"string"},"type":"object"},"type":"object"},{"type":"null"}],"title":"Translations"}},"type":"object","required":["character_id","title","content"],"title":"AnnouncementCreate"},"app__api__v1__endpoints__character_announcements__AnnouncementUpdate":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"announcement_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Announcement Type"},"priority":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Priority"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"is_popup":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Popup"},"show_in_chat":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Show In Chat"},"start_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"},"end_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"},"style_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Style Config"}},"type":"object","title":"AnnouncementUpdate"},"app__api__v1__endpoints__knowledge_feedback__FeedbackRequest":{"properties":{"knowledge_id":{"type":"string","format":"uuid","title":"Knowledge Id"},"feedback_type":{"type":"string","title":"Feedback Type","description":"피드백 유형: helpful, not_helpful, relevant, irrelevant"},"rating":{"anyOf":[{"type":"integer","maximum":5.0,"minimum":1.0},{"type":"null"}],"title":"Rating","description":"1-5 점수 (선택사항)"},"comment":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Comment","description":"추가 코멘트 (선택사항)"},"query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query","description":"피드백 시 사용한 검색 쿼리"}},"type":"object","required":["knowledge_id","feedback_type"],"title":"FeedbackRequest","description":"사용자 피드백 요청"},"app__api__v1__endpoints__knowledge_feedback__FeedbackResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"},"feedback_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Feedback Id"}},"type":"object","required":["success","message"],"title":"FeedbackResponse","description":"피드백 응답"},"app__api__v1__endpoints__knowledge_feedback__FeedbackStatsResponse":{"properties":{"knowledge_id":{"type":"string","title":"Knowledge Id"},"total_clicks":{"type":"integer","title":"Total Clicks"},"average_position":{"type":"number","title":"Average Position"},"helpful_count":{"type":"integer","title":"Helpful Count"},"not_helpful_count":{"type":"integer","title":"Not Helpful Count"},"average_rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Average Rating"},"quality_score":{"type":"number","title":"Quality Score"}},"type":"object","required":["knowledge_id","total_clicks","average_position","helpful_count","not_helpful_count","average_rating","quality_score"],"title":"FeedbackStatsResponse","description":"피드백 통계 응답"},"app__api__v1__endpoints__widget__widget_feedback__FeedbackRequest":{"properties":{"conversation_id":{"type":"string","format":"uuid","title":"Conversation Id"},"rating":{"type":"integer","maximum":5.0,"minimum":1.0,"title":"Rating","description":"1~5 별점"},"comment":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Comment"},"extra":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Extra"}},"type":"object","required":["conversation_id","rating"],"title":"FeedbackRequest"},"app__api__v1__endpoints__widget__widget_feedback__FeedbackResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"rating":{"type":"integer","title":"Rating"},"submitted_at":{"type":"string","format":"date-time","title":"Submitted At"}},"type":"object","required":["id","rating","submitted_at"],"title":"FeedbackResponse"},"app__schemas__character__character__ImageResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"kind":{"type":"string","title":"Kind"},"url":{"type":"string","title":"Url"},"emotion_tag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Emotion Tag"},"meta_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Meta Json"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","kind","url","emotion_tag","meta_json","created_at"],"title":"ImageResponse"},"app__schemas__external_api__APIKeyResponse":{"properties":{"api_key_id":{"type":"string","title":"Api Key Id"},"api_key":{"type":"string","title":"Api Key"},"key_prefix":{"type":"string","title":"Key Prefix"},"character_id":{"type":"string","title":"Character Id"},"allowed_scopes":{"items":{"type":"string"},"type":"array","title":"Allowed Scopes"},"rate_limits":{"additionalProperties":{"type":"integer"},"type":"object","title":"Rate Limits"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["api_key_id","api_key","key_prefix","character_id","allowed_scopes","rate_limits","created_at"],"title":"APIKeyResponse"},"app__schemas__image__ImageResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"character_id":{"type":"string","format":"uuid","title":"Character Id"},"kind":{"type":"string","title":"Kind"},"url":{"type":"string","title":"Url"},"emotion_tag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Emotion Tag"},"meta_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Meta Json"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","character_id","kind","url","emotion_tag","meta_json","created_at"],"title":"ImageResponse"},"app__schemas__user__apikey__APIKeyResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"prefix":{"type":"string","title":"Prefix"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes","description":"API 키 권한 스코프 목록","default":["read"]},"quota_daily":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quota Daily"},"quota_monthly":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quota Monthly"},"usage_today":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Usage Today"},"usage_month":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Usage Month"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"is_active":{"type":"boolean","title":"Is Active"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key"}},"type":"object","required":["id","user_id","prefix","name","quota_daily","quota_monthly","usage_today","usage_month","created_at","expires_at","is_active","last_used_at","description"],"title":"APIKeyResponse"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}},"tags":[{"name":"auth","description":"사용자 인증 및 토큰 관리"},{"name":"characters","description":"AI 캐릭터 생성, 조회, 프로필 생성"},{"name":"chat","description":"캐릭터와의 실시간 채팅"},{"name":"images","description":"캐릭터 이미지 생성 (DALL-E, Stability)"},{"name":"memory","description":"캐릭터 기억 및 임베딩 관리"},{"name":"apikeys","description":"API 키 발급 및 관리"},{"name":"billing","description":"결제, 사용량, 크레딧 관리"},{"name":"admin","description":"관리자 전용 기능 (ADMIN_EMAILS 허용목록 + is_admin/is_superuser 플래그)"}]}