{"openapi":"3.1.0","info":{"title":"The Public Chart Public API","version":"1.0.0","description":"공개 페이지와 정적 데이터 객체를 탐색하기 위한 API입니다. 정적 리소스에는 단위, 기간, 범위, 출처, 라이선스와 다운로드 링크가 포함됩니다."},"servers":[{"url":"https://thepublicchart.com"}],"paths":{"/api/v1/catalog":{"get":{"operationId":"getPublicCatalog","summary":"공개 콘텐츠 카탈로그 조회","responses":{"200":{"description":"카탈로그 응답","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogEnvelope"}}}}}}},"/api/v1/indicators/{indicator}":{"get":{"operationId":"getWorldBankIndicatorSnapshot","summary":"World Bank 지표 정적 스냅샷 조회","description":"국가별 최신값, 주요 국가 장기 시계열, 출처, 단위, 가공 방법, 품질 메모와 다운로드 링크를 반환합니다.","parameters":[{"name":"indicator","in":"path","required":true,"schema":{"type":"string","enum":["gdp-per-capita","gdp-growth","total-fertility-rate","population","life-expectancy","unemployment-rate","internet-users","co2-emissions-per-capita"]}}],"responses":{"200":{"description":"출처·품질 메타데이터를 포함한 정적 지표 스냅샷","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorldBankIndicatorEnvelope"}}}},"404":{"description":"지원하지 않는 지표"}}}},"/api/v1/economy/gdp-per-capita/world/latest":{"get":{"operationId":"getLatestWorldGdpPerCapita","summary":"국가별 최신 1인당 GDP 정적 스냅샷","description":"World Bank WDI 정적 자산에서 국가별 최신 비결측 관측값을 반환합니다.","responses":{"200":{"description":"GDP 스냅샷 응답","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorldGdpSnapshotResponse"}}}}}}},"/api/v1/oecd/member-country-indicators":{"get":{"operationId":"getOecdMemberCountryIndicators","summary":"OECD 회원국 핵심 지표 정적 스냅샷","description":"OECD 38개 회원국의 가입일과 인구, PPP 기준 1인당 GDP, 실업률, CPI 상승률, 기대수명 최신값·시계열을 반환합니다.","responses":{"200":{"description":"출처·품질·다운로드 메타데이터를 포함한 OECD 회원국 지표","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OecdCountryIndicatorEnvelope"}}}}}}},"/api/v1/elections/kr-local-2026/turnout-map":{"get":{"operationId":"getKoreaLocal2026FinalTurnoutMap","summary":"2026 지방선거 최종 투표율 지도","description":"DB 조회 없이 정적 자산에서 선거일 기준 17개 시도의 최종·사전투표율과 공통 경계를 반환합니다.","responses":{"200":{"description":"해시·출처·품질 메타데이터를 포함한 정적 투표율 지도","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ElectionTurnoutMapEnvelope"}}}}}}}},"components":{"schemas":{"CatalogEnvelope":{"type":"object","additionalProperties":false,"required":["version","data","meta","sources","quality"],"properties":{"version":{"type":"string","const":"1.0"},"data":{"$ref":"#/components/schemas/Catalog"},"meta":{"$ref":"#/components/schemas/ResponseMeta"},"sources":{"type":"array","description":"카탈로그 자체에 직접 적용되는 출처입니다. 개별 데이터 출처는 각 리소스에서 확인합니다.","items":{"$ref":"#/components/schemas/SourceReference"}},"quality":{"$ref":"#/components/schemas/Quality"}}},"Catalog":{"type":"object","additionalProperties":false,"required":["id","title","description","items"],"properties":{"id":{"type":"string","const":"the-public-chart"},"title":{"type":"string"},"description":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/components/schemas/CatalogItem"}}}},"CatalogItem":{"type":"object","additionalProperties":false,"required":["id","path","canonicalUrl","title","description","routeKind","objectType","objectId","view","keywords","cachePolicy","links"],"properties":{"id":{"type":"string"},"path":{"type":"string","pattern":"^/"},"canonicalUrl":{"type":"string","format":"uri"},"title":{"type":"string"},"description":{"type":"string"},"routeKind":{"type":"string","enum":["registered","computed","alias","special"]},"objectType":{"type":"string","enum":["election","topic","dataset","indicator","place","person","party","office","collection"]},"objectId":{"type":"string"},"view":{"type":"string"},"group":{"type":"string","enum":["주제","지역","선거","데이터"]},"keywords":{"type":"array","items":{"type":"string"}},"cachePolicy":{"type":"string","enum":["static","isr-short","isr-daily"]},"links":{"type":"object","additionalProperties":false,"required":["html"],"properties":{"html":{"type":"string","format":"uri"},"json":{"type":"string","format":"uri"},"csv":{"type":"string","format":"uri"},"metadata":{"type":"string","format":"uri"},"map":{"type":"string","format":"uri"}}},"dataProfile":{"type":"object","additionalProperties":false,"required":["status"],"properties":{"status":{"type":"string","enum":["published-static","live","metadata-only"]},"unit":{"type":"string"},"coverage":{"type":"string"},"period":{"type":"string"},"updatedAt":{"type":"string"},"itemCount":{"type":"integer","minimum":0},"itemLabel":{"type":"string"},"license":{"type":"string"}}},"sourceIds":{"type":"array","items":{"type":"string"}}}},"WorldBankIndicatorEnvelope":{"type":"object","additionalProperties":false,"required":["version","data","meta","sources","quality"],"properties":{"version":{"type":"string","const":"1.0"},"data":{"type":"object","description":"정적 자산과 동일한 World Bank 지표 스냅샷","required":["schemaVersion","validAsOf","contentHashSha256","source","indicator","coverage","processing","caveats","downloads","latest","series"],"additionalProperties":true},"meta":{"type":"object","additionalProperties":false,"required":["generatedAt","canonicalUrl","language","contentHashSha256"],"properties":{"generatedAt":{"type":["string","null"],"format":"date"},"canonicalUrl":{"type":"string","format":"uri"},"language":{"type":"string","const":"ko-KR"},"contentHashSha256":{"type":"string","pattern":"^[a-f0-9]{64}$"}}},"sources":{"type":"array","items":{"$ref":"#/components/schemas/SourceReference"}},"quality":{"$ref":"#/components/schemas/Quality"}}},"WorldGdpSnapshotResponse":{"type":"object","required":["data"],"properties":{"data":{"type":"object","required":["summary","latestRows","countrySources"],"properties":{"summary":{"type":"object","required":["observation_count","min_year","max_year"],"properties":{"observation_count":{"type":"string"},"min_year":{"type":"string"},"max_year":{"type":"string"},"source_published_at":{"type":["string","null"]}}},"latestRows":{"type":"array","items":{"$ref":"#/components/schemas/WorldGdpObservation"}},"countrySources":{"type":"array","items":{"type":"object"}}}}}},"WorldGdpObservation":{"type":"object","required":["entity_key","iso3","name_en","period_year","value_usd"],"properties":{"entity_key":{"type":"string"},"iso3":{"type":"string"},"name_en":{"type":["string","null"]},"period_year":{"type":"string"},"value_usd":{"type":"number"}}},"OecdCountryIndicatorEnvelope":{"type":"object","additionalProperties":false,"required":["version","data","meta","sources","quality"],"properties":{"version":{"type":"string","const":"1.0"},"data":{"type":"object","description":"OECD 회원국·가입후보국 메타데이터와 5개 핵심 지표 시계열","required":["schemaVersion","generatedAt","contentHashSha256","coverage","indicators","countries","downloads"],"additionalProperties":true},"meta":{"type":"object","additionalProperties":true,"required":["generatedAt","canonicalUrl","language","memberCount","itemCount","contentHashSha256"]},"sources":{"type":"array","items":{"$ref":"#/components/schemas/SourceReference"}},"quality":{"$ref":"#/components/schemas/Quality"}}},"ElectionTurnoutMapEnvelope":{"type":"object","additionalProperties":false,"required":["version","data","meta","sources","quality"],"properties":{"version":{"type":"string","const":"1.0"},"data":{"$ref":"#/components/schemas/ElectionTurnoutMapPayload"},"meta":{"$ref":"#/components/schemas/ElectionTurnoutMapMeta"},"sources":{"type":"array","items":{"$ref":"#/components/schemas/SourceReference"}},"quality":{"$ref":"#/components/schemas/Quality"}}},"ElectionTurnoutMapPayload":{"type":"object","additionalProperties":false,"required":["schemaVersion","boundaries","frames"],"properties":{"schemaVersion":{"type":"integer","const":2},"boundaries":{"type":"array","items":{"$ref":"#/components/schemas/ElectionTurnoutBoundarySet"}},"frames":{"type":"array","items":{"$ref":"#/components/schemas/ElectionTurnoutFrame"}}}},"ElectionTurnoutBoundarySet":{"type":"object","additionalProperties":false,"required":["boundaryVersionKey","features"],"properties":{"boundaryVersionKey":{"type":"string"},"features":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["place_key","name_ko","geom_json"],"properties":{"place_key":{"type":"string"},"name_ko":{"type":"string"},"geom_json":{"type":"string","description":"GeoJSON geometry serialized as JSON"}}}}}},"ElectionTurnoutFrame":{"type":"object","required":["frameKey","methodKey","boundaryVersionKey","label","features"],"properties":{"frameKey":{"type":"string"},"methodKey":{"type":"string","enum":["total","advance"]},"boundaryVersionKey":{"type":"string"},"label":{"type":"string"},"features":{"type":"array","items":{"type":"object","required":["place_key"],"properties":{"place_key":{"type":"string"},"voters_count":{"type":["number","null"]},"voted_count":{"type":["number","null"]},"source_turnout_rate":{"type":["number","null"]},"previous_turnout_rate":{"type":["number","null"]},"turnout_delta_from_previous":{"type":["number","null"]},"fill_color":{"type":"string"}}}}}},"ElectionTurnoutMapMeta":{"type":"object","additionalProperties":false,"required":["generatedAt","canonicalUrl","language","itemCount","electionKey","validAsOf","contentHashSha256","boundaryVersionKey","boundaryFeatureCount","frameCount"],"properties":{"generatedAt":{"type":"string","format":"date-time"},"canonicalUrl":{"type":"string","format":"uri"},"language":{"type":"string","const":"ko-KR"},"itemCount":{"type":"integer","minimum":0},"electionKey":{"type":"string","const":"kr-local-2026"},"validAsOf":{"type":"string","format":"date-time"},"contentHashSha256":{"type":"string","pattern":"^[a-f0-9]{64}$"},"boundaryVersionKey":{"type":"string"},"boundaryFeatureCount":{"type":"integer","minimum":0},"frameCount":{"type":"integer","minimum":0}}},"ResponseMeta":{"type":"object","additionalProperties":false,"required":["generatedAt","canonicalUrl","language"],"properties":{"generatedAt":{"type":"string","format":"date-time"},"canonicalUrl":{"type":"string","format":"uri"},"language":{"type":"string","const":"ko-KR"},"itemCount":{"type":"integer","minimum":0}}},"SourceReference":{"type":"object","required":["id","name","url","role"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"url":{"type":"string","format":"uri"},"role":{"type":"string","enum":["primary","secondary","geometry","methodology"]},"datasetKey":{"type":"string"},"release":{"type":"string"},"publishedAt":{"type":"string","format":"date-time"},"retrievedAt":{"type":"string","format":"date-time"},"license":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"url":{"type":"string","format":"uri"}}}}},"Quality":{"type":"object","additionalProperties":false,"required":["status","notes"],"properties":{"status":{"type":"string","enum":["registry-backed","source-backed","limited","unavailable"]},"notes":{"type":"array","items":{"type":"string"}},"assessedAt":{"type":"string","format":"date-time"}}}}}}