{"openapi":"3.1.0","info":{"title":"The Public Chart Public API","version":"1.0.0","description":"공개 페이지와 정적 데이터 객체를 탐색하기 위한 API입니다. 정적 리소스에는 단위, 기간, 범위, 출처, 라이선스와 다운로드 링크가 포함됩니다."},"servers":[{"url":"https://databogo.com"}],"paths":{"/api/v1/catalog":{"get":{"operationId":"getPublicCatalog","summary":"공개 콘텐츠 카탈로그 조회","responses":{"200":{"description":"카탈로그 응답","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogEnvelope"}}}}}}},"/api/v1/exchange-rates/usd-krw":{"get":{"operationId":"getLatestUsdKrwReferenceRate","summary":"최근 USD/KRW 표시용 기준환율","description":"같은 기준일의 ECB EUR/USD 및 EUR/KRW 기준환율로 계산한 USD/KRW 파생값과 두 원값, 계산식, 출처, 라이선스를 반환합니다. 참고용이며 거래 체결 환율이 아닙니다.","responses":{"200":{"description":"ECB 원계열과 파생 계산을 포함한 최근 USD/KRW 기준환율","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExchangeRateEnvelope"}}}},"503":{"description":"ECB 기준환율을 일시적으로 불러올 수 없음"}}}},"/api/v1/exchange-rates/usd-krw/annual":{"get":{"operationId":"getAnnualUsdKrwReferenceRates","summary":"GDP 환산용 연도별 USD/KRW 평균환율","description":"확정 연도는 World Bank WDI PA.NUS.FCRF 한국 공표값을 반환합니다. 아직 공식값이 없는 현재 연도는 같은 날짜의 ECB EUR/USD 및 EUR/KRW 기준환율로 계산한 잠정 누적평균을 별도 상태로 반환합니다.","responses":{"200":{"description":"공식 연도별 평균, 올해 잠정 일별 값과 누적평균, 계산 기준을 포함한 응답","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnnualExchangeRateEnvelope"}}}},"503":{"description":"World Bank 공식환율 또는 ECB 잠정 환율을 일시적으로 불러올 수 없음"}}}},"/api/v1/indicators/{indicator}":{"get":{"operationId":"getWorldBankIndicatorSnapshot","summary":"World Bank 지표 정적 스냅샷 조회","description":"국가별 최신값, 주요 국가 장기 시계열, 출처, 단위, 가공 방법, 품질 메모와 전체 이력 JSON·CSV 링크를 반환합니다.","parameters":[{"name":"indicator","in":"path","required":true,"schema":{"type":"string","enum":["gdp-per-capita","gdp-per-capita-ppp","gdp-per-capita-real","gdp-per-capita-ppp-current","gdp-per-capita-growth","gdp","gdp-real","gdp-ppp-current","gdp-ppp","gdp-growth","gdp-nominal-growth","gdp-deflator","gdp-deflator-growth","inflation-cpi","population","population-density","land-area","life-expectancy"]}}],"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/hotels/classification-counts":{"get":{"operationId":"getOfficialHotelClassificationCounts","summary":"국가별 공식 호텔 등급 수와 데이터 상태","description":"공식 3·4·5성급 호텔 수와 국가별 데이터 없음 사유를 반환합니다.","responses":{"200":{"description":"출처·라이선스·품질 메타데이터를 포함한 국가별 호텔 등급 스냅샷","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HotelClassificationEnvelope"}}}}}}}},"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"}}}},"ExchangeRateEnvelope":{"type":"object","additionalProperties":false,"required":["version","data","meta","sources","quality"],"properties":{"version":{"type":"string","const":"1.0"},"data":{"type":"object","additionalProperties":false,"required":["baseCurrency","quoteCurrency","rate","rateDate","status","calculation"],"properties":{"baseCurrency":{"type":"string","const":"USD"},"quoteCurrency":{"type":"string","const":"KRW"},"rate":{"type":"number","exclusiveMinimum":0},"rateDate":{"type":"string","format":"date"},"status":{"type":"string","const":"derived"},"calculation":{"type":"object","additionalProperties":false,"required":["formula","eurKrw","eurUsd","series"],"properties":{"formula":{"type":"string","const":"EUR/KRW ÷ EUR/USD"},"eurKrw":{"type":"number","exclusiveMinimum":0},"eurUsd":{"type":"number","exclusiveMinimum":0},"series":{"type":"object","additionalProperties":false,"required":["eurKrw","eurUsd"],"properties":{"eurKrw":{"type":"string","const":"EXR.D.KRW.EUR.SP00.A"},"eurUsd":{"type":"string","const":"EXR.D.USD.EUR.SP00.A"}}}}}}},"meta":{"$ref":"#/components/schemas/ResponseMeta"},"sources":{"type":"array","items":{"$ref":"#/components/schemas/SourceReference"}},"quality":{"$ref":"#/components/schemas/Quality"}}},"AnnualExchangeRateEnvelope":{"type":"object","additionalProperties":false,"required":["version","data","meta","sources","quality"],"properties":{"version":{"type":"string","const":"1.0"},"data":{"type":"object","additionalProperties":false,"required":["baseCurrency","quoteCurrency","unit","currentYear","latestRate","annualAverages","currentYearDaily","officialSeries","calculation"],"properties":{"baseCurrency":{"type":"string","const":"USD"},"quoteCurrency":{"type":"string","const":"KRW"},"unit":{"type":"string","const":"KRW per USD"},"currentYear":{"type":"integer"},"latestRate":{"$ref":"#/components/schemas/UsdKrwReferenceRate"},"annualAverages":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["year","rate","periodStart","periodEnd","observationCount","periodStatus","sourceId","indicatorCode"],"properties":{"year":{"type":"integer"},"rate":{"type":"number","exclusiveMinimum":0},"periodStart":{"type":["string","null"],"format":"date"},"periodEnd":{"type":["string","null"],"format":"date"},"observationCount":{"type":["integer","null"],"minimum":1},"periodStatus":{"type":"string","enum":["official-published","year-to-date-provisional"]},"sourceId":{"type":"string","enum":["world-bank-wdi","ecb-exr"]},"indicatorCode":{"type":["string","null"],"enum":["PA.NUS.FCRF",null]}}}},"currentYearDaily":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["rateDate","dailyRate","cumulativeAverage","observationCount"],"properties":{"rateDate":{"type":"string","format":"date"},"dailyRate":{"type":"number","exclusiveMinimum":0},"cumulativeAverage":{"type":"number","exclusiveMinimum":0},"observationCount":{"type":"integer","minimum":1}}}},"officialSeries":{"type":"object","additionalProperties":false,"required":["indicatorCode","sourceUpdatedAt","latestYear"],"properties":{"indicatorCode":{"type":"string","const":"PA.NUS.FCRF"},"sourceUpdatedAt":{"type":"string","format":"date"},"latestYear":{"type":"integer"}}},"calculation":{"type":"object","additionalProperties":true}}},"meta":{"type":"object","additionalProperties":false,"required":["generatedAt","canonicalUrl","language","itemCount","dailyObservationCount","coverageStartYear","coverageEnd"],"properties":{"generatedAt":{"type":"string","format":"date-time"},"canonicalUrl":{"type":"string","format":"uri"},"language":{"type":"string","const":"ko-KR"},"itemCount":{"type":"integer","minimum":1},"dailyObservationCount":{"type":"integer","minimum":1},"coverageStartYear":{"type":"integer"},"coverageEnd":{"type":"string","format":"date"}}},"sources":{"type":"array","items":{"$ref":"#/components/schemas/SourceReference"}},"quality":{"$ref":"#/components/schemas/Quality"}}},"UsdKrwReferenceRate":{"type":"object","additionalProperties":false,"required":["baseCurrency","quoteCurrency","rate","rateDate","status","calculation"],"properties":{"baseCurrency":{"type":"string","const":"USD"},"quoteCurrency":{"type":"string","const":"KRW"},"rate":{"type":"number","exclusiveMinimum":0},"rateDate":{"type":"string","format":"date"},"status":{"type":"string","const":"derived"},"calculation":{"type":"object","additionalProperties":true}}},"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","validAsOf","sourceUpdatedAt","canonicalUrl","language","itemCount","fullObservationCount","returnedLatestCount","returnedSeriesCount","returnedUniqueObservationCount","historyEntityCount","historyCountryCount","historyAggregateCount","historyYearMin","historyYearMax","scope","fullHistoryUrl","fullHistoryJsonUrl","contentHashSha256"],"properties":{"generatedAt":{"type":["string","null"],"format":"date"},"validAsOf":{"type":["string","null"],"format":"date"},"sourceUpdatedAt":{"type":["string","null"],"format":"date"},"canonicalUrl":{"type":"string","format":"uri"},"language":{"type":"string","const":"ko-KR"},"itemCount":{"type":"integer","minimum":0,"description":"v1 호환 필드이며 전체 CSV 관측 수와 같습니다."},"fullObservationCount":{"type":"integer","minimum":0,"description":"전체 이력 CSV의 관측 수"},"returnedLatestCount":{"type":"integer","minimum":0,"description":"응답 data.latest 행 수"},"returnedSeriesCount":{"type":"integer","minimum":0,"description":"응답 data.series 행 수"},"returnedUniqueObservationCount":{"type":"integer","minimum":0,"description":"latest와 series를 합친 뒤 ISO3·연도 중복을 제거한 응답 관측 수"},"historyEntityCount":{"type":"integer","minimum":0,"description":"전체 이력 JSON·CSV의 국가·경제와 집계를 합친 엔터티 수"},"historyCountryCount":{"type":"integer","minimum":0,"description":"전체 이력 JSON·CSV의 국가·경제 수. 최신값 범위와 다를 수 있습니다."},"historyAggregateCount":{"type":"integer","minimum":0,"description":"전체 이력 JSON·CSV의 WLD 집계 수"},"historyYearMin":{"type":"integer","description":"전체 이력의 첫 관측연도"},"historyYearMax":{"type":"integer","description":"전체 이력의 마지막 관측연도"},"scope":{"type":"string","const":"latest-all-entities+featured-history","description":"응답 본문의 관측 범위. 전체 이력은 fullHistoryJsonUrl 또는 fullHistoryUrl에서 제공합니다."},"fullHistoryUrl":{"type":"string","format":"uri"},"fullHistoryJsonUrl":{"type":"string","format":"uri","description":"WorldBankHistoryAsset schema v1 전체 이력 JSON. entities[].offset/length가 병렬 years·values 배열의 구간을 지정합니다."},"contentHashSha256":{"type":"string","pattern":"^[a-f0-9]{64}$","description":"ISO3·연도 순으로 정렬한 전체 관측 객체 배열 JSON.stringify의 SHA-256. 응답 또는 파일 바이트 해시가 아닙니다."}}},"sources":{"type":"array","items":{"$ref":"#/components/schemas/SourceReference"}},"quality":{"$ref":"#/components/schemas/Quality"}}},"WorldBankHistoryAsset":{"type":"object","additionalProperties":false,"required":["schemaVersion","validAsOf","contentHashSha256","source","provenance","indicator","coverage","encoding","entities","years","values"],"properties":{"schemaVersion":{"type":"integer","const":1},"validAsOf":{"type":["string","null"],"format":"date"},"contentHashSha256":{"type":"string","pattern":"^[a-f0-9]{64}$","description":"ISO3·연도 순으로 정렬한 전체 관측 객체 배열의 canonical SHA-256"},"source":{"type":"object","additionalProperties":true},"provenance":{"type":"object","additionalProperties":true},"indicator":{"type":"object","additionalProperties":true},"coverage":{"type":"object","additionalProperties":false,"required":["entityCount","countryCount","aggregateCount","observationCount","yearMin","yearMax","csvScope"],"properties":{"entityCount":{"type":"integer","minimum":0},"countryCount":{"type":"integer","minimum":0},"aggregateCount":{"type":"integer","minimum":0},"observationCount":{"type":"integer","minimum":0},"yearMin":{"type":"integer"},"yearMax":{"type":"integer"},"csvScope":{"type":"string","const":"all-country-history"}}},"encoding":{"type":"object","additionalProperties":true,"required":["layout"],"properties":{"layout":{"type":"string","const":"entity-slices"}}},"entities":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["iso3","name","nameKo","offset","length"],"properties":{"iso3":{"type":"string","pattern":"^[A-Z]{3}$"},"name":{"type":"string"},"nameKo":{"type":"string"},"offset":{"type":"integer","minimum":0},"length":{"type":"integer","minimum":1}}}},"years":{"type":"array","items":{"type":"integer"}},"values":{"type":"array","items":{"type":"number"}}}},"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"}}},"RegionalGdpMapEnvelope":{"type":"object","additionalProperties":false,"required":["version","data","meta","sources","quality"],"properties":{"version":{"type":"string","const":"1.0"},"data":{"type":"object","additionalProperties":true,"required":["generatedAt","indicator","coverage","observations","sources"]},"meta":{"type":"object","additionalProperties":true,"required":["generatedAt","canonicalUrl","itemCount","countryCount"]},"sources":{"type":"array","items":{"$ref":"#/components/schemas/SourceReference"}},"quality":{"$ref":"#/components/schemas/Quality"}}},"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"}}},"HotelClassificationEnvelope":{"type":"object","additionalProperties":false,"required":["version","data","meta","sources","quality"],"properties":{"version":{"type":"string","const":"2.0"},"data":{"type":"object","description":"공식 호텔 등급 관측과 국가별 데이터 상태 정적 스냅샷","required":["schemaVersion","dataset","capturedAt","contentHashSha256","coverage","processing","caveats","sources","downloads","countryAvailability","observations"],"additionalProperties":true},"meta":{"type":"object","additionalProperties":true,"required":["generatedAt","canonicalUrl","language","itemCount","countryCount","availableCountryCount","unavailableCountryCount","reviewPendingCountryCount","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"},"sourceUpdatedAt":{"type":"string","format":"date"},"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"}}}}}}