Appearance
병원
엔드포인트
- 병원 검색 —
GET /healthcare/hospitals - 병원 무한 스크롤 —
GET /healthcare/hospitals/scroll - 병원 상세 —
GET /healthcare/hospitals/{id} - 근처의 유사한 병원 —
GET /healthcare/hospitals/{id}/nearby - 비급여 진료비 —
GET /healthcare/hospitals/{id}/hira-npay - 비급여 갱신 요청 —
POST /healthcare/hospitals/{id}/hira-npay/request
전국 병원·의원을 하나의 id 로 다루는 통합 API 입니다.
병원 정보는 기관마다 흩어져 있습니다 — 건강보험심사평가원(HIRA) 은 병상·장비·진료과목 같은 기관 제원을, 국립중앙의료원(NMC) 은 진료시간과 응급실 운영 여부를 갖고 있는데, 두 기관은 코드 체계도 식별자도 다릅니다. 이 API 는 그 둘을 병원 단위로 매칭해 합친 것이라, 쓰는 쪽은 병원 하나를 가리키는 id 하나만 알면 됩니다.
- 검색 조건에 넣을 코드(진료과목·종별·장비 등)는 참조 데이터 에서 받습니다.
- 말로 물어 조건을 얻고 싶다면 AI 검색 을 쓰세요.
- 합치기 전의 원본이 필요하면 정부데이터 원본 을 보세요. 대부분은 볼 일이 없습니다.
TIP
값이 없는(null) 필드는 응답에서 생략됩니다.
병원 검색
GET
/healthcare/hospitals
지역·종별·진료과목·병원명으로 검색한다. 응급실 운영, 달빛어린이병원 필터도 있다.
Request
🔒 Bearer 인증 필요 · 인증 방법GET
/healthcare/hospitalsQuery Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
region | string | optional | 시군구 코드. /address/regions 참조 | |
category | string | optional | 종별 코드. 쉼표로 여러 개(OR). /healthcare/meta/classes 참조. | |
tier | string | optional | 병원 등급. TIER1(의원급) | TIER2(병원급) | TIER3(상급종합) | NURSING | MENTAL. 쉼표로 여러 개(OR). **비워두면 NURSING·MENTAL 이 빠진다** — 장기 입원 시설이라 외래 검색에 섞이면 방해다. `tier=NURSING` 으로 지정하면 나온다. /healthcare/meta/tiers 참조. | |
subject | string | optional | 진료과목 코드. 쉼표로 여러 개(OR). /healthcare/meta/subjects 참조. 진료 분야 그룹(치과·한방 등)은 /healthcare/meta/subject-groups 에서 받아 **코드로 펼쳐서** 넘긴다. 이 API 는 그룹을 모른다. | |
specialist | string | optional | 전문의 있는 과목 코드. 쉼표로 여러 개(OR). subject 와 같은 진료과목 코드지만 **그 과목 전문의를 실제로 보유한** 병원만 건다(subject 는 신고만 하면 걸림). 옵션 목록은 /healthcare/meta/subjects 의 specialist=true 인 과목. | |
name | string | optional | 병원명 (부분 일치) | |
emergency | string | optional | 응급실 운영 병원만 | |
baby | string | optional | 달빛어린이병원만 (야간·휴일 소아진료) | |
assessment | string | optional | 건강보험심사평가원 적정성평가 **항목 코드**(원본 asmGrd 번호). 그 항목에서 1등급(우수)인 병원. 쉼표로 여러 개(OR). 코드·분야 목록은 /healthcare/meta/assessments 참조 (예: 12=대장암, 01=급성기뇌졸중, 20=신생아중환자실). **병원급 이상만 의미가 있다** — 의원은 이 항목을 평가받지 않는다. | |
specialty | string | optional | 전문병원 지정분야 코드. 쉼표로 여러 개(OR). /healthcare/meta/specialties 참조. | |
special | string | optional | 특수진료 코드. 쉼표로 여러 개(OR). /healthcare/meta/specials 참조. | |
equipment | string | optional | 보유장비 코드. 쉼표로 여러 개(OR). /healthcare/meta/equipments 참조. | |
minLat | number | optional | 지도 영역의 남서쪽 위도. **minLat·minLon·maxLat·maxLon 을 넷 다** 보내야 걸린다. 지도를 옮긴 자리에는 시군구 경계가 없어서 화면의 사각형이 그대로 조건이 된다. | |
minLon | number | optional | 지도 영역의 남서쪽 경도 | |
maxLat | number | optional | 지도 영역의 북동쪽 위도 | |
maxLon | number | optional | 지도 영역의 북동쪽 경도 | |
sort | string | optional | enum: default, distance · default default | 정렬 기준. - `default`(기본) 서울 → 경기 → 부산 → 인천 → 나머지, 같은 시도 안에서는 id 순 (병원명 키워드가 있으면 관련도가 먼저다) - `distance` 기준 좌표에서 가까운 순. **lat·lon 을 함께 보내야 한다** — 없으면 400 이다. **거리순은 스크롤 커서와 묶여 있다.** 정렬을 바꾸면 nextToken 을 버리고 처음부터 받아라. |
lat | number | optional | 거리 계산 기준 위도. `sort=distance` 일 때만 쓴다. **1km 격자로 뭉개서 보내라.** 사람마다 좌표가 미세하게 달라 캐시가 통째로 빗나가는 걸 막는다 — 같은 동네면 같은 요청이 된다. 순위가 몇 칸 흔들리는 정도의 손해는 감수한다. | |
lon | number | optional | 거리 계산 기준 경도. `sort=distance` 일 때만 쓴다(lat 설명 참고). | |
page | number | optional | default 1 | 페이지 번호 |
size | number | optional | min 1 · max 100 · default 20 | 페이지 크기 |
Response
200
PageResponse
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
items | HospitalSummary[] | required | ||
page | number | required | 현재 페이지 번호 | |
size | number | required | 페이지 크기 | |
totalCount | number | required | 전체 항목 수 | |
totalPages | number | required | 전체 페이지 수 |
HospitalSummary
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
id | number | required | 통합 병원 id | |
name | string | required | ||
category | Code | optional | 종별. 의원·종합병원·치과의원 … | |
↳code | string | required | ||
↳name | string | required | ||
tier | Code | optional | 병원 등급. TIER1(의원급) | TIER2(병원급) | TIER3(상급종합) | NURSING | MENTAL. 종별에서 유도한 값이다 — 의료법이 병상 수로 종별을 규정하므로 등급이 종별에 이미 들어 있다. | |
↳code | string | required | ||
↳name | string | required | ||
specialty | Code | optional | 전문병원 지정분야(관절·척추·심장 …). 보건복지부 지정이라 병원당 최대 1건이다. | |
↳code | string | required | ||
↳name | string | required | ||
location | Location | required | ||
↳station | string | optional | 가장 가까운 지하철역. 교통정보의 첫 지하철 항목에서 가져온다. **거리 기준으로 고른 값이 아니다.** 정확한 거리·노선 정보는 상세의 transport 를 참고한다. | |
↳stationLine | string | optional | station 이 어느 노선인가. **같은 항목(subway[0])에서 뽑으므로** 역과 어긋나지 않는다. 원문 그대로다 — "2호선" 뿐 아니라 "1,4호선", "인천지하철1호선" 처럼 오기도 한다. 노선색·표기 정규화는 화면이 한다. | |
↳address | string | optional | ||
↳postNo | string | optional | ||
↳region | HospitalRegion | optional | ||
↳code | string | required | ||
↳name | string | required | ||
↳sido | Code | optional | 시도 | |
↳code | string | required | ||
↳name | string | required | ||
↳emdong | string | optional | 읍면동. 코드가 없어 이름 그대로다. | |
↳lat | number | optional | ||
↳lon | number | optional | ||
tel | string | optional | ||
emergency | boolean | required | 응급실 운영 | |
baby | boolean | required | 달빛어린이병원 (야간·휴일 소아진료) | |
distance | number | optional | 기준 좌표로부터의 **직선거리**(m, 반올림). 도로 거리도 소요시간도 아니다. **`sort=distance` 로 조회했을 때만 있다** — 기본 정렬에는 기준 좌표가 없어 잴 것이 없다. |
병원 무한 스크롤
GET
/healthcare/hospitals/scroll
검색(GET /healthcare/hospitals)과 필터는 같고 페이징 방식만 다르다. 페이지 번호 대신 nextToken 으로 이어 받는다 — 무한 스크롤 화면용이다.
첫 호출은 nextToken 없이 필터만 보낸다. 응답의 nextToken 을 다음 호출에 그대로 실어 보내면 이어진다. nextToken 이 없으면 마지막 페이지다 — 그만 부른다.
Request
🔒 Bearer 인증 필요 · 인증 방법GET
/healthcare/hospitals/scrollQuery Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
region | string | optional | 시군구 코드. /address/regions 참조 | |
category | string | optional | 종별 코드. 쉼표로 여러 개(OR). /healthcare/meta/classes 참조. | |
tier | string | optional | 병원 등급. TIER1(의원급) | TIER2(병원급) | TIER3(상급종합) | NURSING | MENTAL. 쉼표로 여러 개(OR). **비워두면 NURSING·MENTAL 이 빠진다** — 장기 입원 시설이라 외래 검색에 섞이면 방해다. `tier=NURSING` 으로 지정하면 나온다. /healthcare/meta/tiers 참조. | |
subject | string | optional | 진료과목 코드. 쉼표로 여러 개(OR). /healthcare/meta/subjects 참조. 진료 분야 그룹(치과·한방 등)은 /healthcare/meta/subject-groups 에서 받아 **코드로 펼쳐서** 넘긴다. 이 API 는 그룹을 모른다. | |
specialist | string | optional | 전문의 있는 과목 코드. 쉼표로 여러 개(OR). subject 와 같은 진료과목 코드지만 **그 과목 전문의를 실제로 보유한** 병원만 건다(subject 는 신고만 하면 걸림). 옵션 목록은 /healthcare/meta/subjects 의 specialist=true 인 과목. | |
name | string | optional | 병원명 (부분 일치) | |
emergency | string | optional | 응급실 운영 병원만 | |
baby | string | optional | 달빛어린이병원만 (야간·휴일 소아진료) | |
assessment | string | optional | 건강보험심사평가원 적정성평가 **항목 코드**(원본 asmGrd 번호). 그 항목에서 1등급(우수)인 병원. 쉼표로 여러 개(OR). 코드·분야 목록은 /healthcare/meta/assessments 참조 (예: 12=대장암, 01=급성기뇌졸중, 20=신생아중환자실). **병원급 이상만 의미가 있다** — 의원은 이 항목을 평가받지 않는다. | |
specialty | string | optional | 전문병원 지정분야 코드. 쉼표로 여러 개(OR). /healthcare/meta/specialties 참조. | |
special | string | optional | 특수진료 코드. 쉼표로 여러 개(OR). /healthcare/meta/specials 참조. | |
equipment | string | optional | 보유장비 코드. 쉼표로 여러 개(OR). /healthcare/meta/equipments 참조. | |
minLat | number | optional | 지도 영역의 남서쪽 위도. **minLat·minLon·maxLat·maxLon 을 넷 다** 보내야 걸린다. 지도를 옮긴 자리에는 시군구 경계가 없어서 화면의 사각형이 그대로 조건이 된다. | |
minLon | number | optional | 지도 영역의 남서쪽 경도 | |
maxLat | number | optional | 지도 영역의 북동쪽 위도 | |
maxLon | number | optional | 지도 영역의 북동쪽 경도 | |
sort | string | optional | enum: default, distance · default default | 정렬 기준. - `default`(기본) 서울 → 경기 → 부산 → 인천 → 나머지, 같은 시도 안에서는 id 순 (병원명 키워드가 있으면 관련도가 먼저다) - `distance` 기준 좌표에서 가까운 순. **lat·lon 을 함께 보내야 한다** — 없으면 400 이다. **거리순은 스크롤 커서와 묶여 있다.** 정렬을 바꾸면 nextToken 을 버리고 처음부터 받아라. |
lat | number | optional | 거리 계산 기준 위도. `sort=distance` 일 때만 쓴다. **1km 격자로 뭉개서 보내라.** 사람마다 좌표가 미세하게 달라 캐시가 통째로 빗나가는 걸 막는다 — 같은 동네면 같은 요청이 된다. 순위가 몇 칸 흔들리는 정도의 손해는 감수한다. | |
lon | number | optional | 거리 계산 기준 경도. `sort=distance` 일 때만 쓴다(lat 설명 참고). | |
nextToken | string | optional | 이어받기 커서. **직전 응답의 nextToken 을 그대로** 실어 보낸다. 비우면 처음부터 조회한다. 불투명 문자열이므로 해석하지 않는다. | |
size | number | optional | min 1 · max 100 · default 20 | 한 번에 가져올 개수 |
db | string | optional | **검증용 파라미터.** 기본 조회 경로 대신 DB 로 직접 조회한다. 일반적인 사용에서는 지정하지 않는다. **nextToken 은 조회 경로마다 형식이 다르다.** 스크롤 도중 이 값을 바꾸면 커서가 맞지 않으므로, 한 스크롤 세션에서는 고정한다. |
Response
200
ScrollResponse
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
items | HospitalSummary[] | required | ||
nextToken | string | optional | 다음 스크롤 커서. 다음 호출에 그대로 실어 보내면 이 지점 다음부터 이어 준다. **없으면 다음 페이지가 없다는 뜻이다** — 스크롤을 멈춘다. 불투명 문자열이므로 해석하지 않는다. |
HospitalSummary
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
id | number | required | 통합 병원 id | |
name | string | required | ||
category | Code | optional | 종별. 의원·종합병원·치과의원 … | |
↳code | string | required | ||
↳name | string | required | ||
tier | Code | optional | 병원 등급. TIER1(의원급) | TIER2(병원급) | TIER3(상급종합) | NURSING | MENTAL. 종별에서 유도한 값이다 — 의료법이 병상 수로 종별을 규정하므로 등급이 종별에 이미 들어 있다. | |
↳code | string | required | ||
↳name | string | required | ||
specialty | Code | optional | 전문병원 지정분야(관절·척추·심장 …). 보건복지부 지정이라 병원당 최대 1건이다. | |
↳code | string | required | ||
↳name | string | required | ||
location | Location | required | ||
↳station | string | optional | 가장 가까운 지하철역. 교통정보의 첫 지하철 항목에서 가져온다. **거리 기준으로 고른 값이 아니다.** 정확한 거리·노선 정보는 상세의 transport 를 참고한다. | |
↳stationLine | string | optional | station 이 어느 노선인가. **같은 항목(subway[0])에서 뽑으므로** 역과 어긋나지 않는다. 원문 그대로다 — "2호선" 뿐 아니라 "1,4호선", "인천지하철1호선" 처럼 오기도 한다. 노선색·표기 정규화는 화면이 한다. | |
↳address | string | optional | ||
↳postNo | string | optional | ||
↳region | HospitalRegion | optional | ||
↳code | string | required | ||
↳name | string | required | ||
↳sido | Code | optional | 시도 | |
↳code | string | required | ||
↳name | string | required | ||
↳emdong | string | optional | 읍면동. 코드가 없어 이름 그대로다. | |
↳lat | number | optional | ||
↳lon | number | optional | ||
tel | string | optional | ||
emergency | boolean | required | 응급실 운영 | |
baby | boolean | required | 달빛어린이병원 (야간·휴일 소아진료) | |
distance | number | optional | 기준 좌표로부터의 **직선거리**(m, 반올림). 도로 거리도 소요시간도 아니다. **`sort=distance` 로 조회했을 때만 있다** — 기본 정렬에는 기준 좌표가 없어 잴 것이 없다. |
병원 상세
GET
/healthcare/hospitals/{id}
진료과목·진료시간·인력·병상·장비·역량을 함께 반환한다. 진료시간은 kind 로 갈린다 — general(일반)과 baby(달빛어린이)는 시간대가 다르다.
Request
🔒 Bearer 인증 필요 · 인증 방법GET
/healthcare/hospitals/{id}Path Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
id | number | required | 통합 병원 id |
Response
200
HospitalDetail
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
id | number | required | 통합 병원 id | |
name | string | required | ||
category | Code | optional | 종별. 의원·종합병원·치과의원 … | |
tier | Code | optional | 병원 등급. TIER1(의원급) | TIER2(병원급) | TIER3(상급종합) | NURSING | MENTAL. 종별에서 유도한 값이다 — 의료법이 병상 수로 종별을 규정하므로 등급이 종별에 이미 들어 있다. | |
specialty | Code | optional | 전문병원 지정분야(관절·척추·심장 …). 보건복지부 지정이라 병원당 최대 1건이다. | |
location | Location | required | ||
tel | string | optional | ||
emergency | boolean | required | 응급실 운영 | |
baby | boolean | required | 달빛어린이병원 (야간·휴일 소아진료) | |
distance | number | optional | 기준 좌표로부터의 **직선거리**(m, 반올림). 도로 거리도 소요시간도 아니다. **`sort=distance` 로 조회했을 때만 있다** — 기본 정렬에는 기준 좌표가 없어 잴 것이 없다. | |
corpName | string | optional | 법인격 + 법인명. `name` 은 원본에서 이 표기를 뗀 값이다. 어느 재단·학원 소속인지는 대학병원 계열을 알아보는 단서라 버리지 않고 따로 준다. **법인 표기가 없으면 필드 자체가 없다**(전체의 98.8%). | |
legalName | string | optional | 원본이 제공한 원문 이름. **`name` 과 다를 때만 온다.** 표시용이 아니라 서류·간판 표기가 필요하거나 원문과 대조할 때 쓴다. | |
sources | Sources | required | ||
homepage | string | optional | ||
establishedAt | string | optional | 개설일자 (YYYYMMDD) | |
intro | string | optional | 병원 소개·진료 안내 | |
notice | string | optional | 기타 안내. **구조화된 진료시간이 못 담는 예외**가 자유 텍스트로 온다 — "접수시간: 평일 08:30~17:00", "신정·구정·추석 당일 휴진" 등. | |
directions | string | optional | 찾아오는 길. 병원이 쓴 문장이다. transport 와 별개다 | |
transport | Transport | required | 교통편. 없으면 빈 목록이 담긴 객체다 | |
parking | Parking | optional | ||
subjects | Subject[] | required | ||
hours | Hours[] | required | ||
staff | Staff | optional | ||
beds | Beds | optional | 규모기관만 있다 | |
equipments | Equipment[] | required | ||
capabilities | Capability[] | required | ||
assessment | Assessment | optional | 심평원 병원평가. **HIRA 연동(ykiho)이 있고 평가대상인 병원만 온다** — 없으면 필드 자체가 없다. |
Code
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
code | string | required | ||
name | string | required |
Location
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
station | string | optional | 가장 가까운 지하철역. 교통정보의 첫 지하철 항목에서 가져온다. **거리 기준으로 고른 값이 아니다.** 정확한 거리·노선 정보는 상세의 transport 를 참고한다. | |
stationLine | string | optional | station 이 어느 노선인가. **같은 항목(subway[0])에서 뽑으므로** 역과 어긋나지 않는다. 원문 그대로다 — "2호선" 뿐 아니라 "1,4호선", "인천지하철1호선" 처럼 오기도 한다. 노선색·표기 정규화는 화면이 한다. | |
address | string | optional | ||
postNo | string | optional | ||
region | HospitalRegion | optional | ||
↳code | string | required | ||
↳name | string | required | ||
↳sido | Code | optional | 시도 | |
↳code | string | required | ||
↳name | string | required | ||
↳emdong | string | optional | 읍면동. 코드가 없어 이름 그대로다. | |
lat | number | optional | ||
lon | number | optional |
Sources
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
ykiho | string | optional | HIRA 요양기호. 원본을 직접 확인할 때만 쓴다. | |
hpid | string | optional | NMC 기관ID |
Transport
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
subway | TransportRoute[] | required | ||
↳kindName | string | optional | 교통편 원문. 화면 표기에 쓴다 | |
↳line | string | optional | 노선. 여러 노선이 한 문자열로 오기도 한다 | |
↳arrival | string | optional | 하차지점 | |
↳dir | string | optional | 이름은 방향이지만 실제로는 이용 안내가 온다 | |
↳distance | string | optional | 거리 **또는 소요시간**. 표기가 일정하지 않아 계산에 쓰지 않는다 | |
↳note | string | optional | ||
bus | TransportRoute[] | required | 시내·마을·시외/고속버스가 모두 들어온다. 구분은 kindName | |
↳kindName | string | optional | 교통편 원문. 화면 표기에 쓴다 | |
↳line | string | optional | 노선. 여러 노선이 한 문자열로 오기도 한다 | |
↳arrival | string | optional | 하차지점 | |
↳dir | string | optional | 이름은 방향이지만 실제로는 이용 안내가 온다 | |
↳distance | string | optional | 거리 **또는 소요시간**. 표기가 일정하지 않아 계산에 쓰지 않는다 | |
↳note | string | optional | ||
etc | TransportRoute[] | required | 자가용·기차·기타. 대중교통이 아닌 것도 있다 | |
↳kindName | string | optional | 교통편 원문. 화면 표기에 쓴다 | |
↳line | string | optional | 노선. 여러 노선이 한 문자열로 오기도 한다 | |
↳arrival | string | optional | 하차지점 | |
↳dir | string | optional | 이름은 방향이지만 실제로는 이용 안내가 온다 | |
↳distance | string | optional | 거리 **또는 소요시간**. 표기가 일정하지 않아 계산에 쓰지 않는다 | |
↳note | string | optional |
Parking
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
capacity | number | optional | 주차 가능대수 | |
paid | boolean | optional | 유료 여부 | |
note | string | optional |
Subject
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
code | string | required | ||
name | string | required | ||
declared | boolean | required | 신고한 과목인가. **진료과목** 판정 기준이다. | |
doctorCount | number | optional | 과목별 의사수. **겸직이 중복 계산되므로 합산하지 않는다** — 총원은 staff.doctorTotal 이다. | |
specialistCount | number | optional | 과목별 전문의수. 0보다 크면 **표시과목**이다. 상세 수집이 끝난 병원만 값이 있다. |
Hours
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
kind | string | required | general(일반 진료) | baby(달빛어린이). **시간대가 다르다** — 달빛은 야간에 소아만 받는다. | |
day | number | required | 1~7 = 월~일, 8 = 공휴일 | |
open | string | optional | ||
close | string | optional | ||
breakStart | string | optional | ||
breakEnd | string | optional |
Staff
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
doctorTotal | number | optional | 총 의사수. 중복 없는 실제 인원이다. | |
specialist | number | optional | ||
resident | number | optional | ||
intern | number | optional | ||
generalDoctor | number | optional | ||
dentist | number | optional | ||
oriental | number | optional | ||
midwife | number | optional |
Beds
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
total | number | optional | 허가 병상수 | |
standard | number | optional | ||
higher | number | optional | ||
icu | number | optional | 중환자실 | |
emergency | number | optional | 응급실 병상 | |
operatingRoom | number | optional | ||
delivery | number | optional | ||
neonatal | number | optional | ||
isolation | number | optional | 음압 격리 | |
psyOpen | number | optional | ||
psyClosed | number | optional |
Equipment
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
code | string | required | ||
name | string | required | ||
count | number | optional | 보유 대수 |
Capability
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
type | string | required | severe(중증처치) | specialty(전문병원) | special(특수진료) | |
code | string | required | ||
name | string | optional |
Assessment
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
groups | AssessmentGroup[] | required | 그룹별 평가 결과. 심평원 홈페이지 노출 순서다. **항목이 하나라도 있는 그룹만 온다.** | |
↳code | string | required | ||
↳name | string | required | ||
↳items | AssessmentItem[] | required | ||
↳code | string | required | 심평원 평가항목 번호 | |
↳name | string | required | 항목명. 요청 언어(Accept-Language)로 온다. 번역이 없으면 한국어로 폴백한다. **한국어 외 언어는 표시용 번역이다** — 원본(심평원)은 한국어만 제공한다. | |
↳grade | string | required | 등급. 원본 값을 그대로 전달한다. **1 이 가장 좋고 5 가 가장 나쁘다.** '등급제외' 는 평가는 했으나 등급을 매기지 않은 항목이다(평가대상이 아닌 항목은 목록에 포함되지 않는다). **천식(code='16')은 표기가 다르다** — 1등급을 '양호', 등급제외를 '0' 으로 준다. 이 값을 숫자로 파싱해 정렬하면 안 되며, 항목 간 비교에는 normalized 를 사용한다. | |
↳normalized | object | required | 등급을 항목 간 비교 가능하게 옮긴 값. 1~5 또는 'X'(등급대상 제외). 천식의 '양호'→1, '0'→'X' 가 여기서 흡수된다. |
근처의 유사한 병원
GET
/healthcare/hospitals/{id}/nearby
이 병원을 대체할 만한 근처 병원을 찾는다.
단순히 가까운 순이 아니다. 진료과목이 겹치는지를 가장 크게 보고, 전문병원 지정분야·종별·응급실 운영 여부로 보정한 뒤, 거리를 가중치로 곱해 정렬한다.
겹친 과목은 matchedSubjects 로 함께 반환하므로, 결과에 포함된 근거를 화면에 표시할 수 있다.
요양병원·정신병원은 기본적으로 제외되며, 기준 병원이 그 계열이면 같은 계열에서만 찾는다.
결과가 비어도 정상이다(좌표가 없는 병원이거나 반경 안에 후보가 없다). 병원 자체가 없을 때만 404 다.
Request
🔒 Bearer 인증 필요 · 인증 방법GET
/healthcare/hospitals/{id}/nearbyPath Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
id | number | required | 기준이 될 통합 병원 id |
Query Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
radius | number | optional | min 500 · max 100000 | 반경(미터). **비워 두는 것을 권장한다** — 비우면 기준 병원의 등급에 따라 서버가 정한다. 등급마다 "근처" 의 크기가 다르다. 의원급은 걸어갈 거리에 여러 곳이 있지만, 상급종합은 전국 47곳이라 좁게 잡으면 결과가 비어 버린다. ``` 의원급 1km 병원급 5km 상급종합 80km 요양병원 15km 정신병원 30km ``` 값을 주면 그 값이 우선한다. **실제 적용된 반경은 응답의 radius 로 확인한다** — 요청값과 다를 수 있다. |
size | number | optional | min 1 · max 20 · default 6 | 개수. 상세 하단 섹션은 기본 5개면 충분하다. **이어받기(커서)가 없다.** "더 보기" 가 필요하면 size 를 키워 다시 불러라 — 앞 항목이 중복되지만 클라이언트가 교체하면 된다. 채점 비용은 반경이 정하지 size 가 정하지 않아서, 커서를 두어도 서버가 아끼는 게 없다. |
Response
200
HospitalNearbyResponse
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
radius | number | required | 이 결과를 만든 반경(m). 요청에 radius 가 있었으면 그 값, 없었으면 **기준 병원 등급으로 서버가 고른 값**이다. "반경 N 안에서" 같은 표기에는 요청값이 아니라 이 값을 쓴다. | |
items | HospitalNearby[] | required |
HospitalNearby
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
id | number | required | 통합 병원 id | |
name | string | required | ||
category | Code | optional | 종별. 의원·종합병원·치과의원 … | |
↳code | string | required | ||
↳name | string | required | ||
tier | Code | optional | 병원 등급. TIER1(의원급) | TIER2(병원급) | TIER3(상급종합) | NURSING | MENTAL. 종별에서 유도한 값이다 — 의료법이 병상 수로 종별을 규정하므로 등급이 종별에 이미 들어 있다. | |
↳code | string | required | ||
↳name | string | required | ||
specialty | Code | optional | 전문병원 지정분야(관절·척추·심장 …). 보건복지부 지정이라 병원당 최대 1건이다. | |
↳code | string | required | ||
↳name | string | required | ||
location | Location | required | ||
↳station | string | optional | 가장 가까운 지하철역. 교통정보의 첫 지하철 항목에서 가져온다. **거리 기준으로 고른 값이 아니다.** 정확한 거리·노선 정보는 상세의 transport 를 참고한다. | |
↳stationLine | string | optional | station 이 어느 노선인가. **같은 항목(subway[0])에서 뽑으므로** 역과 어긋나지 않는다. 원문 그대로다 — "2호선" 뿐 아니라 "1,4호선", "인천지하철1호선" 처럼 오기도 한다. 노선색·표기 정규화는 화면이 한다. | |
↳address | string | optional | ||
↳postNo | string | optional | ||
↳region | HospitalRegion | optional | ||
↳code | string | required | ||
↳name | string | required | ||
↳sido | Code | optional | 시도 | |
↳code | string | required | ||
↳name | string | required | ||
↳emdong | string | optional | 읍면동. 코드가 없어 이름 그대로다. | |
↳lat | number | optional | ||
↳lon | number | optional | ||
tel | string | optional | ||
emergency | boolean | required | 응급실 운영 | |
baby | boolean | required | 달빛어린이병원 (야간·휴일 소아진료) | |
distance | number | optional | 기준 병원으로부터의 **직선거리(m)**. 도로 거리도 소요시간도 아니다 — "420m" 처럼 대략의 가까움을 보여주는 용도다. | |
matchedSubjects | MatchedSubject[] | required | 기준 병원과 겹친 진료과목. 이 병원이 결과에 포함된 근거다. **빈 배열일 수 있다** — 겹치는 과목이 없어도 반경 안이면 거리순으로 채운다. | |
↳code | string | required | ||
↳name | string | required | ||
↳specialist | boolean | required | 기준 병원과 이 병원이 **둘 다** 그 과 전문의를 보유하는가. 신고만 한 과목과 전문의가 실제 있는 과목은 대체재로서 무게가 다르다. 배지를 진하게 칠하는 식으로 쓰면 되고, 무시해도 그만이다. |
비급여 진료비
GET
/healthcare/hospitals/{id}/hira-npay
병원이 신고한 비급여 항목별 가격. 대분류 → 표준코드로 묶어 기관 전건을 한 번에 돌려준다(페이지 없음).
빈 categories 도 정상이다. 비급여를 신고한 기관은 전체의 약 4%(3,511곳)이며, 의원급(clCd=31)은 원본에 없어 항상 비어 있다. 404 는 병원 자체가 없을 때만 반환한다.
금액은 범위다. 한 표준코드에 원본 행이 여럿일 수 있어서다(체외충격파가 단순/복잡 두 행). 단일가면 minAmount 와 maxAmount 가 같으며, 이때는 범위로 표시하지 않는다.
한 기관에 수백 행이 될 수 있어(최다 1,048행) 병원 상세와 분리된 엔드포인트다.
Request
🔒 Bearer 인증 필요 · 인증 방법GET
/healthcare/hospitals/{id}/hira-npayPath Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
id | number | required | 통합 병원 id |
Response
200
HospitalNonPayment
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
noticeUrl | string | optional | 병원이 신고한 비급여 안내 URL. 원본은 행마다 같은 값을 반복하지만 여기서는 한 번만 싣는다. 없는 기관이 있고, 의원급(크롤 출처)엔 아예 없다. | |
source | string | required | hira, web, none, requestable, unavailable | 이 응답의 출처, 또는 왜 비었는지. - `hira` — 공개 API(병원급 이상). 금액이 행마다 단일값이라 `price.details` 가 찬다. - `web` — 심평원 홈페이지(의원급). 원본이 범위만 줘서 **`price.details` 가 빈다**. - `none` — 조회했으나 그 기관이 신고한 항목이 없다. 다시 요청해도 결과가 같다. - `requestable` — 공개 API 에 없고 아직 조회한 적도 없다. **갱신 요청(POST .../hira-npay/request)이 가능하다.** - `unavailable` — 요청할 수 없다. 심평원 식별자(ykiho)가 없는 병원은 조회 자체가 불가능하다. |
requestStatus | string | optional | pending, running, failed | 갱신 요청의 진행 상태. `source=requestable` 일 때만 의미가 있으며, 요청한 적이 없으면 오지 않는다. **`done` 상태는 없다** — 처리가 끝나면 결과가 `source`(web 또는 none)로 나타난다. |
categories | NonPaymentCategory[] | required | 대분류 묶음. 원본 게시 순서를 유지한다. **빈 배열도 정상이다** — 사유는 `source` 로 확인한다. |
NonPaymentCategory
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
name | string | required | 중분류명 | |
mdivCd | string | optional | 중분류코드(원본 npayMdivCd). 화면이 이 코드로 표시 그룹(검사·초음파·MRI…)을 묶는다. 코드마스터에 없는 항목이면 없다. | |
items | NonPaymentItem[] | required | ||
↳code | string | required | 표준 항목코드. 기관 간 비교는 이 코드로 한다. 코드가 없는 원본 행은 `sno:12` 형태로 혼자 선다. | |
↳name | string | required | 항목명. 대분류는 category 에 있으므로 뒷부분만 담는다. | |
↳price | NonPaymentPrice | required | ||
↳min | number | required | 최저가(원). **단일가면 max 와 같다** — 두 값이 같으면 범위로 표시하지 않는다. | |
↳max | number | required | 최고가(원). | |
↳details | NonPaymentPriceDetail[] | required | 범위를 이룬 개별 행. **한 코드에 여러 행일 수 있다** — 예: 체외충격파(SZ0840000)의 단순·복잡. **빈 배열도 정상이다.** 원본이 범위만 제공하는 출처에서는 세부 내역이 없다 — 조회 실패를 뜻하지 않으며, 이 경우 범위(min·max)만 표시한다. | |
↳name | string | optional | 요양기관이 자체적으로 붙인 항목명. **기관마다 표기가 달라 기관 간 비교에는 쓰지 않는다** — 비교는 code 로 한다. | |
↳amount | number | required | 그 기관이 실제로 받는 금액(원). |
비급여 갱신 요청
POST
/healthcare/hospitals/{id}/hira-npay/request
이 병원의 비급여를 받아오도록 요청만 한다. 즉시 반영되지 않는다 — 큐에 등록되고 배치가 처리한다.
source=requestable 일 때만 의미가 있다. 공개 API 에 이미 있으면(hira) 요청할 이유가 없고, 받아봤는데 없으면(none) 다시 요청해도 결과가 같다.
같은 병원을 여러 번 눌러도 큐에는 한 줄이다. 처리 결과는 다음 조회의 source 로 나타난다(web|none).
Request
🔒 Bearer 인증 필요 · 인증 방법POST
/healthcare/hospitals/{id}/hira-npay/requestPath Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
id | number | required | 통합 병원 id |
Response
200
NonPaymentRequestResult
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
result | string | required | `queued` — 요청이 등록됐다. 처리가 끝나면 다음 조회부터 `source` 가 web 또는 none 으로 바뀐다. |