{"openapi":"3.1.0","info":{"title":"Korea Music Chart API","description":"\nPrivate API for cached Korean music chart data from Melon, Genie, and Bugs.\n\nProtected endpoints require the `X-API-Key` header.\n\nMain endpoints:\n\n`GET /charts?site=melon&limit=100`\n\n`GET /charts/compare?keyword=아이유`\n","version":"1.0.0"},"servers":[{"url":"/korea-chart-api"}],"paths":{"/":{"get":{"summary":"Root","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/sites":{"get":{"summary":"Sites","operationId":"sites_sites_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"APIKeyHeader":[]}]}},"/charts":{"get":{"summary":"Get Chart","operationId":"get_chart_charts_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site","in":"query","required":true,"schema":{"type":"string","description":"melon, genie, bugs, flo, or vibe","title":"Site"},"description":"melon, genie, bugs, flo, or vibe"},{"name":"chart_type","in":"query","required":false,"schema":{"type":"string","description":"site-specific (e.g. realtime, all_age, daily_top100)","default":"realtime","title":"Chart Type"},"description":"site-specific (e.g. realtime, all_age, daily_top100)"},{"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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/charts/history":{"get":{"summary":"Get Chart History","operationId":"get_chart_history_charts_history_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site","in":"query","required":true,"schema":{"type":"string","description":"melon, genie, bugs, flo, or vibe","title":"Site"},"description":"melon, genie, bugs, flo, or vibe"},{"name":"chart_type","in":"query","required":false,"schema":{"type":"string","description":"site-specific (e.g. realtime, all_age, daily_top100)","default":"realtime","title":"Chart Type"},"description":"site-specific (e.g. realtime, all_age, daily_top100)"},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":168,"minimum":1,"description":"조회할 과거 시간 범위(시간)","default":12,"title":"Hours"},"description":"조회할 과거 시간 범위(시간)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"스냅샷당 상위 N위 (track_key 지정 시 무시)","default":100,"title":"Limit"},"description":"스냅샷당 상위 N위 (track_key 지정 시 무시)"},{"name":"track_key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"특정 곡 시계열만: 'title_key|artist_key'","title":"Track Key"},"description":"특정 곡 시계열만: 'title_key|artist_key'"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/melon/charts":{"get":{"summary":"Melon Charts","operationId":"melon_charts_melon_charts_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"chart_type","in":"query","required":false,"schema":{"type":"string","description":"realtime, hot100_d100, hot100_d30, daily, weekly","default":"realtime","title":"Chart Type"},"description":"realtime, hot100_d100, hot100_d30, daily, weekly"},{"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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/melon/charts/{chart_type}":{"get":{"summary":"Melon Chart By Type","operationId":"melon_chart_by_type_melon_charts__chart_type__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"chart_type","in":"path","required":true,"schema":{"type":"string","title":"Chart Type"}},{"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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/bugs/charts":{"get":{"summary":"Bugs Charts","operationId":"bugs_charts_bugs_charts_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"chart_type","in":"query","required":false,"schema":{"type":"string","description":"realtime, daily, weekly","default":"realtime","title":"Chart Type"},"description":"realtime, daily, weekly"},{"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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/bugs/charts/{chart_type}":{"get":{"summary":"Bugs Chart By Type","operationId":"bugs_chart_by_type_bugs_charts__chart_type__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"chart_type","in":"path","required":true,"schema":{"type":"string","title":"Chart Type"}},{"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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/genie/charts":{"get":{"summary":"Genie Charts","operationId":"genie_charts_genie_charts_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"chart_type","in":"query","required":false,"schema":{"type":"string","description":"realtime, daily, weekly","default":"realtime","title":"Chart Type"},"description":"realtime, daily, weekly"},{"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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/genie/charts/{chart_type}":{"get":{"summary":"Genie Chart By Type","operationId":"genie_chart_by_type_genie_charts__chart_type__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"chart_type","in":"path","required":true,"schema":{"type":"string","title":"Chart Type"}},{"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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/flo/charts":{"get":{"summary":"Flo Charts","operationId":"flo_charts_flo_charts_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"chart_type","in":"query","required":false,"schema":{"type":"string","description":"all_age, rising, rising_hourly","default":"all_age","title":"Chart Type"},"description":"all_age, rising, rising_hourly"},{"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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/flo/charts/{chart_type}":{"get":{"summary":"Flo Chart By Type","operationId":"flo_chart_by_type_flo_charts__chart_type__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"chart_type","in":"path","required":true,"schema":{"type":"string","title":"Chart Type"}},{"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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/vibe/charts":{"get":{"summary":"Vibe Charts","operationId":"vibe_charts_vibe_charts_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"chart_type","in":"query","required":false,"schema":{"type":"string","description":"daily_top100, domestic_rising, oversea_rising","default":"daily_top100","title":"Chart Type"},"description":"daily_top100, domestic_rising, oversea_rising"},{"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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/vibe/charts/{chart_type}":{"get":{"summary":"Vibe Chart By Type","operationId":"vibe_chart_by_type_vibe_charts__chart_type__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"chart_type","in":"path","required":true,"schema":{"type":"string","title":"Chart Type"}},{"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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/charts/compare":{"get":{"summary":"Compare Charts","operationId":"compare_charts_charts_compare_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"keyword","in":"query","required":false,"schema":{"type":"string","description":"곡명 또는 가수명 검색어","default":"","title":"Keyword"},"description":"곡명 또는 가수명 검색어"},{"name":"chart_type","in":"query","required":false,"schema":{"type":"string","description":"공통 비교용 차트 타입: realtime, daily, weekly","default":"realtime","title":"Chart Type"},"description":"공통 비교용 차트 타입: realtime, daily, weekly"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":300,"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"}}}}}}},"/refresh":{"post":{"summary":"Refresh","operationId":"refresh_refresh_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"site","in":"query","required":false,"schema":{"type":"string","description":"all, melon, genie, bugs, flo, or vibe","default":"all","title":"Site"},"description":"all, melon, genie, bugs, flo, or vibe"},{"name":"chart_type","in":"query","required":false,"schema":{"type":"string","description":"all or a site-specific chart_type","default":"all","title":"Chart Type"},"description":"all or a site-specific chart_type"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"APIKeyHeader":{"type":"apiKey","description":"Enter your private API key from the .env file.","in":"header","name":"X-API-Key"}}}}