{"openapi":"3.1.0","info":{"title":"김교보-인포맥스","description":"김교보-인포맥스 Linux 데이터 API. 인증 및 호출 예제: /integration.md. 장치 토큰은 데이터 API 키가 아닙니다.","version":"0.3.0"},"paths":{"/downloads/bridge/release.json":{"get":{"tags":["downloads"],"summary":"Metadata","operationId":"metadata_downloads_bridge_release_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstallerRelease"}}}}}}},"/integration.json":{"get":{"tags":["documentation"],"summary":"사람·LLM 공통 연동 안내","operationId":"integration_json_integration_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/integration.md":{"get":{"tags":["documentation"],"summary":"LLM용 Markdown 연동 안내","operationId":"integration_markdown_integration_md_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/bridges/pairing":{"post":{"summary":"클라이언트 등록 코드 발급","operationId":"create_pairing_api_bridges_pairing_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PairingRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"SessionCookie":[]}],"description":"장치 등록에만 쓰는 10분·1회용 코드입니다. 데이터 조회용 Bearer 토큰이 아닙니다.\n\n응답: code, expires_at. Windows 브릿지의 최초 연결 창에 입력하세요.","tags":["운영"]}},"/api/bridge/enroll":{"post":{"summary":"Enroll","operationId":"enroll_api_bridge_enroll_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrollmentRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/bridges":{"get":{"summary":"등록 클라이언트·실시간 연결","operationId":"registered_bridges_api_bridges_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"SessionCookie":[]}],"description":"등록된 장치와 현재 연결 풀을 나누어 반환합니다. 토큰 원문은 포함하지 않습니다.\n\n응답: devices[], live.bridges[], live.connected_count. 등록 해제 여부와 원천 연결은 별도 상태입니다.","tags":["운영"]}},"/api/bridges/{device_id}":{"delete":{"summary":"클라이언트 등록 해제","operationId":"revoke_bridge_api_bridges__device_id__delete","parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Device Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"SessionCookie":[]}],"description":"접속을 종료하고 장치 토큰을 무효화합니다. 다시 연결하려면 새로 등록해야 합니다.\n\n응답: revoked: true|false","tags":["운영"]}},"/api/auth/login":{"post":{"summary":"Login","operationId":"login_api_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/me":{"get":{"summary":"Current User","operationId":"current_user_api_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Current User Api Auth Me Get"}}}}}}},"/api/auth/logout":{"post":{"summary":"Logout","operationId":"logout_api_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/health":{"get":{"summary":"서비스·원천 상태","operationId":"health_api_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Api Health Get"}}}}},"description":"서버 상태와 브릿지 연결 수, 인포맥스 원천 상태를 확인합니다. 서버 ok=true가 데이터 정상 수신을 뜻하지는 않습니다.\n\n응답: ok, database, bridge, upstream.connected_count, upstream.connected, bridgeError, bridgeCompatibility","tags":["운영"]}},"/api/dashboard":{"get":{"summary":"Dashboard","operationId":"dashboard_api_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Dashboard Api Dashboard Get"}}}}},"security":[{"SessionCookie":[]}]}},"/api/bloomberg/reference":{"post":{"summary":"현재값·참조정보","operationId":"bloomberg_reference_api_bloomberg_reference_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BloombergReferenceQuery"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Bloomberg Reference Api Bloomberg Reference Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"SessionCookie":[]}],"description":"Bloomberg Desktop API가 설치된 김교보 브릿지에서 조회합니다. Terminal 로그인 및 데이터 권한이 필요합니다. 현재값은 요청 시점 스냅샷입니다.\n\n응답: provider=bloomberg, request_type=reference, securities[], count, _relay. securityError와 fieldExceptions를 반드시 확인하세요.","tags":["블룸버그"]}},"/api/bloomberg/history":{"post":{"summary":"기간별 히스토리","operationId":"bloomberg_history_api_bloomberg_history_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BloombergHistoryQuery"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Bloomberg History Api Bloomberg History Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"SessionCookie":[]}],"description":"Bloomberg 원천에서 히스토리를 중개합니다. 영속 저장과 조회 감사 로그 적재는 제공하지 않습니다.\n\n응답: provider=bloomberg, request_type=history, securities[].fieldData[], count, _relay. 부분 응답을 병합하며 종목/필드 오류를 보존합니다.","tags":["블룸버그"]}},"/api/rates":{"get":{"summary":"국고채 수익률 전체","operationId":"rates_api_rates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Rates Api Rates Get"}}}}},"security":[{"SessionCookie":[]}],"description":"1·2·3·5·10·20·30·50년 대표 수익률 스냅샷. 값의 단위는 percent(%)이며 3.25는 3.25%입니다.\n\n응답: market, unit, connected, as_of, rates[]. 각 금리는 tenor, value, updated_at 등을 포함합니다. source/cache 여부와 갱신 시각을 확인하세요.","tags":["실시간 금리"]}},"/api/rates/stream":{"get":{"summary":"금리 변경 스트림 · SSE","operationId":"rates_stream_api_rates_stream_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"SessionCookie":[]}],"description":"WebSocket이 아닌 text/event-stream입니다. event: rates의 data JSON을 처리하세요. 브라우저 EventSource는 같은 출처의 로그인 쿠키를 사용합니다.\n\n응답: event: rates / data: JSON. connected, error, rates를 확인합니다. 원천 장애가 HTTP 200 스트림 내부의 상태로 전달될 수 있습니다. 정확히 한 번 전달·재접속 재생을 보장하지 않습니다.","tags":["실시간 금리"]}},"/api/rates/{tenor}":{"get":{"summary":"만기별 수익률","operationId":"rate_api_rates__tenor__get","parameters":[{"name":"tenor","in":"path","required":true,"schema":{"type":"string","title":"Tenor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Rate Api Rates  Tenor  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"SessionCookie":[]}],"description":"국고채 한 만기의 현재 값을 조회합니다.\n\n응답: 단일 금리 객체(tenor, value 등). 지원하지 않는 만기는 404.","tags":["실시간 금리"]}},"/api/news":{"get":{"summary":"뉴스 검색","operationId":"news_api_news_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response News Api News Get"}}}}},"security":[{"SessionCookie":[]}],"description":"통합·연합뉴스·타사뉴스를 제목/키워드 및 공급자 분류로 검색합니다. 기사 객체의 필드는 공급자별로 다를 수 있습니다.\n\n응답: provider, fetched_at, cached, feed, count, total, news[]. 제목은 ktitle/title 등을 확인합니다. cached=true이면 원천 실패 시 과거 수집 결과일 수 있고 upstream_error가 추가됩니다.","tags":["뉴스"],"parameters":[{"name":"feed","in":"query","required":false,"schema":{"type":"string","enum":["all","yonhap","third_party"],"default":"all"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"name":"keywords","in":"query","required":false,"schema":{"type":"string","maxLength":200}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","pattern":"^[0-9]{17}$"}},{"name":"index","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"}},"style":"form","explode":true},{"name":"source","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"}},"style":"form","explode":true},{"name":"category","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"}},"style":"form","explode":true}]}},"/api/news/feeds":{"get":{"summary":"뉴스 피드 목록","operationId":"news_feeds_api_news_feeds_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response News Feeds Api News Feeds Get"}}}}},"security":[{"SessionCookie":[]}],"description":"조회할 수 있는 피드 식별자를 확인합니다.\n\n응답: default: all, feeds: [{id: all|yonhap|third_party, name: ...}]","tags":["뉴스"]}},"/api/bridge/relay":{"get":{"summary":"Relay Status","operationId":"relay_status_api_bridge_relay_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Relay Status Api Bridge Relay Get"}}}}},"security":[{"SessionCookie":[]}]}},"/api/history/types":{"get":{"summary":"지원 데이터 종류","operationId":"history_types_api_history_types_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response History Types Api History Types Get"}}}}},"security":[{"SessionCookie":[]}],"description":"접속된 브릿지의 설치된 인포맥스 정의를 조회합니다. 종류 코드만 지원된다고 모든 종목/필드가 제공되는 것은 아닙니다.\n\n응답: count, types[]. kind와 description을 이용해 다음 카탈로그 조회 대상을 선택합니다.","tags":["히스토리"]}},"/api/history/catalog":{"get":{"summary":"데이터셋·필드 카탈로그","operationId":"history_catalog_api_history_catalog_get","parameters":[{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":4},{"type":"null"}],"title":"Kind"}},{"name":"dataset","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Dataset"}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":100,"default":"","title":"Q"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response History Catalog Api History Catalog Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"SessionCookie":[]}],"description":"쿼리 전에 사용 가능한 데이터셋과 정확한 필드명을 확인합니다. 필드명은 임의로 번역하거나 추측하지 마세요.\n\n응답: 카탈로그 데이터셋과 fields 목록. 실제 응답에서 데이터셋 이름과 필드를 선택한 후 history/query에 전달합니다.","tags":["히스토리"]}},"/api/history/query":{"post":{"summary":"기간별 데이터 조회","operationId":"history_query_api_history_query_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HistoryQuery"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response History Query Api History Query Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"SessionCookie":[]}],"description":"JSON 본문으로 종목·필드·기간을 지정합니다. 성공/실패, 사용자, 조건, 건수와 소요 시간을 PostgreSQL 요청 이력에 기록합니다. 결과 시계열 자체의 DB 우선 적재는 아직 구현되지 않았습니다.\n\n응답: row_count, column_count, columns[{name, wire_type, data_type}], rows[], proxy_duration_ms. null·결측을 0으로 바꾸지 마세요. 날짜 열 이름/열 타입은 columns를 기준으로 해석합니다.","tags":["히스토리"]}},"/api/internal/history/query":{"post":{"tags":["internal"],"summary":"Internal History Query","operationId":"internal_history_query_api_internal_history_query_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HistoryQuery"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Internal History Query Api Internal History Query Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/query-history":{"get":{"summary":"히스토리 조회 요청 이력","operationId":"query_history_api_query_history_get","parameters":[{"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":{"type":"object","additionalProperties":true,"title":"Response Query History Api Query History Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"SessionCookie":[]}],"description":"최신순의 히스토리 조회 감사 로그입니다. 뉴스·금리·SSE 호출, 요청 본문 검증에서 거부된 422 요청, 모든 HTTP 접속을 기록한 로그가 아닙니다.\n\n응답: count, items[]. requested_at, username, query_type, request_payload, status, duration_ms, result_count, error_message","tags":["운영"]}}},"components":{"schemas":{"BloombergHistoryQuery":{"properties":{"securities":{"items":{"type":"string","maxLength":200,"minLength":1},"type":"array","maxItems":50,"minItems":1,"title":"Securities"},"fields":{"items":{"type":"string","maxLength":200,"minLength":1},"type":"array","maxItems":50,"minItems":1,"title":"Fields"},"start":{"type":"string","format":"date","title":"Start"},"end":{"type":"string","format":"date","title":"End"},"periodicity":{"type":"string","enum":["DAILY","WEEKLY","MONTHLY"],"title":"Periodicity","default":"DAILY"}},"additionalProperties":false,"type":"object","required":["securities","fields","start","end"],"title":"BloombergHistoryQuery"},"BloombergReferenceQuery":{"properties":{"securities":{"items":{"type":"string","maxLength":200,"minLength":1},"type":"array","maxItems":50,"minItems":1,"title":"Securities"},"fields":{"items":{"type":"string","maxLength":200,"minLength":1},"type":"array","maxItems":50,"minItems":1,"title":"Fields"}},"additionalProperties":false,"type":"object","required":["securities","fields"],"title":"BloombergReferenceQuery"},"EnrollmentRequest":{"properties":{"code":{"type":"string","maxLength":80,"minLength":20,"title":"Code"},"hostname":{"type":"string","maxLength":100,"minLength":1,"title":"Hostname"}},"type":"object","required":["code","hostname"],"title":"EnrollmentRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HistoryQuery":{"properties":{"kind":{"type":"string","title":"Kind"},"code":{"type":"string","maxLength":80,"minLength":1,"title":"Code"},"fields":{"items":{"type":"string"},"type":"array","maxItems":100,"minItems":1,"title":"Fields"},"start":{"type":"string","title":"Start"},"end":{"type":"string","title":"End"},"limit":{"type":"integer","maximum":100000.0,"minimum":1.0,"title":"Limit","default":1000},"period":{"type":"string","title":"Period","default":"D"},"cycle":{"anyOf":[{"type":"integer","maximum":86400.0,"minimum":1.0},{"type":"null"}],"title":"Cycle"},"time_range":{"anyOf":[{"type":"string","pattern":"^\\d{2}:\\d{2}-\\d{2}:\\d{2}$"},{"type":"null"}],"title":"Time Range"},"cycle_sync":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Cycle Sync"},"sort":{"type":"string","enum":["A","D"],"title":"Sort","default":"A"},"real":{"type":"boolean","title":"Real","default":false},"bizday":{"anyOf":[{"type":"integer","maximum":199.0,"minimum":0.0},{"type":"null"}],"title":"Bizday"},"country":{"anyOf":[{"type":"string","maxLength":30},{"type":"null"}],"title":"Country"},"quote":{"anyOf":[{"type":"string","maxLength":30},{"type":"null"}],"title":"Quote"},"close":{"anyOf":[{"type":"string","maxLength":30},{"type":"null"}],"title":"Close"},"cons":{"anyOf":[{"type":"integer","enum":[1,2]},{"type":"null"}],"title":"Cons"},"comp":{"anyOf":[{"type":"integer","enum":[1,2]},{"type":"null"}],"title":"Comp"},"trai":{"anyOf":[{"type":"integer","maximum":4.0,"minimum":0.0},{"type":"null"}],"title":"Trai"},"unit":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Unit"},"include_date":{"type":"boolean","title":"Include Date","default":true}},"type":"object","required":["kind","code","fields","start","end"],"title":"HistoryQuery"},"InstallerRelease":{"properties":{"version":{"type":"string","pattern":"^\\d+\\.\\d+\\.\\d+\\.\\d+$","title":"Version"},"bridge_version":{"type":"string","pattern":"^\\d+\\.\\d+\\.\\d+$","title":"Bridge Version"},"filename":{"type":"string","title":"Filename"},"bytes":{"type":"integer","exclusiveMinimum":0.0,"title":"Bytes"},"sha256":{"type":"string","pattern":"^[0-9a-f]{64}$","title":"Sha256"},"source_commit":{"type":"string","pattern":"^[0-9a-f]{40}$","title":"Source Commit"},"built_at":{"type":"string","maxLength":100,"minLength":1,"title":"Built At"},"signature":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Signature"}},"type":"object","required":["version","bridge_version","filename","bytes","sha256","source_commit","built_at"],"title":"InstallerRelease"},"LoginRequest":{"properties":{"username":{"type":"string","maxLength":150,"minLength":1,"title":"Username"},"password":{"type":"string","maxLength":500,"minLength":1,"title":"Password"}},"type":"object","required":["username","password"],"title":"LoginRequest"},"PairingRequest":{"properties":{"label":{"type":"string","maxLength":100,"minLength":1,"title":"Label"}},"type":"object","required":["label"],"title":"PairingRequest"},"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"}},"securitySchemes":{"SessionCookie":{"type":"apiKey","in":"cookie","name":"kkb_infomax_session","description":"POST /api/auth/login으로 발급되는 로그인 세션 쿠키. 장치 Bearer 토큰 사용 불가."}}}}