{"openapi":"3.1.0","info":{"title":"서로나 API","description":"서로나 (seorona) helps people who move to Seoul and rent alone pick a neighborhood before they look at\nlistings. Every call is a GET:\n\n- /api/v1/around describes one spot in Seoul: the nearest facility of each kind and how far it is, the\n  stations within walking distance, the usual rent of its 행정동 and, for each\n  destination given (a workplace, a school), the subway minutes there. It takes a place name or an\n  address and resolves it itself.\n- /api/v1/dongs lists every 행정동 of Seoul with its rent and convenience, and /api/v1/dongs/{key} gives one\n  in full: rent by housing kind, convenience item by item, the nearest stations and the cells to draw.\n\nEvery figure is computed from 국토교통부 actual rent contracts of the last 12 months and public facility\ndata. It is reference information, not a listing, and 서로나 does not broker. `summary_ko` and `notice`\nare finished Korean sentences for the person you are answering: repeat them as they are. Money is in 만원\n(10,000 KRW). No authentication; 30 calls a minute per IP. The written guide is\nhttps://seorona.frony.app/llms.txt.\n","version":"1"},"paths":{"/api/v1/status":{"get":{"summary":"Status","operationId":"status_api_v1_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}}}}}},"/api/v1/config":{"get":{"summary":"Config","operationId":"config_api_v1_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Config"}}}}}}},"/api/v1/search":{"get":{"summary":"Search","description":"Kakao address and keyword search for the site's own place picker. Agents need not call it:\naround takes the place name itself.","operationId":"search_api_v1_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":100,"title":"Q"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResults"}}}},"422":{"description":"`invalid_input`: 입력값을 확인해 주세요. ","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"`rate_limited`: 요청이 너무 잦습니다. 1분 뒤에 다시 시도해 주세요. ","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"`search_unavailable`: 주소 검색이 잠시 안 됩니다. 잠시 뒤에 다시 시도해 주세요. ","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/around":{"get":{"summary":"Around","description":"One spot in Seoul: for each kind of facility (convenience store, groceries, clinic, pharmacy, subway\nstation, bus stop and more) the nearest one and how far it is, the stations within walking distance,\nconvenience scores against the rest of Seoul, the 행정동 it is in with that dong's usual one-person rent,\nand the subway trip to each destination in `to`. Elsewhere in the capital area (판교) it gives only the\nstations and the subway trips: facilities and rent are collected for Seoul only.","operationId":"around_api_v1_around_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":100},{"type":"null"}],"description":"The spot to look around: a station, a place name or an address in Seoul, e.g. 신림역, 관악구 신림동 1741, or elsewhere in the capital area for its stations and subway trips only. Resolved with Kakao search; the response says which place was used.","title":"Address"},"description":"The spot to look around: a station, a place name or an address in Seoul, e.g. 신림역, 관악구 신림동 1741, or elsewhere in the capital area for its stations and subway trips only. Resolved with Kakao search; the response says which place was used."},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":38.0,"minimum":37.0},{"type":"null"}],"description":"Latitude (WGS84), given with lon instead of a place name.","title":"Lat"},"description":"Latitude (WGS84), given with lon instead of a place name."},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":127.8,"minimum":126.3},{"type":"null"}],"description":"Longitude (WGS84), given with lat.","title":"Lon"},"description":"Longitude (WGS84), given with lat."},{"name":"to","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"maxItems":5,"description":"Up to five destinations, such as a workplace or a school, to time the subway trip to: each a place name (강남역) or 'lat,lon' (37.4979,127.0276). Repeat the parameter for more than one.","default":[],"title":"To"},"description":"Up to five destinations, such as a workplace or a school, to time the subway trip to: each a place name (강남역) or 'lat,lon' (37.4979,127.0276). Repeat the parameter for more than one."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Around"}}}},"422":{"description":"`invalid_input`: 입력값을 확인해 주세요. `place_not_found`: 그 장소를 서울과 수도권에서 찾지 못했습니다. 역 이름이나 도로명 주소로 다시 시도해 주세요. ","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"`rate_limited`: 요청이 너무 잦습니다. 1분 뒤에 다시 시도해 주세요. ","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"`search_unavailable`: 주소 검색이 잠시 안 됩니다. 잠시 뒤에 다시 시도해 주세요. ","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"`not_ready`: 데이터를 불러오는 중입니다. 잠시 뒤에 다시 시도해 주세요. ","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/dongs":{"get":{"summary":"Dong List","description":"Every 행정동 of Seoul with the rent of recent one-person contracts there, convenience scores and the nearest\nstation, narrowed by 구 or budget when asked. Pass a `key` (or the name) to /api/v1/dongs/{key} for the full\nprofile.","operationId":"dong_list_api_v1_dongs_get","parameters":[{"name":"gu","in":"query","required":false,"schema":{"anyOf":[{"enum":["종로구","중구","용산구","성동구","광진구","동대문구","중랑구","성북구","강북구","도봉구","노원구","은평구","서대문구","마포구","양천구","강서구","구로구","금천구","영등포구","동작구","관악구","서초구","강남구","송파구","강동구"],"type":"string"},{"type":"null"}],"description":"Only the dongs of this 구, e.g. 관악구.","title":"Gu"},"description":"Only the dongs of this 구, e.g. 관악구."},{"name":"max_monthly","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":1000,"minimum":0},{"type":"null"}],"description":"Only dongs whose usual one-person monthly rent is at most this, in 만원; dongs without contracts drop out.","title":"Max Monthly"},"description":"Only dongs whose usual one-person monthly rent is at most this, in 만원; dongs without contracts drop out."},{"name":"max_deposit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":100000,"minimum":0},{"type":"null"}],"description":"Only dongs whose usual one-person deposit is at most this, in 만원; dongs without contracts drop out.","title":"Max Deposit"},"description":"Only dongs whose usual one-person deposit is at most this, in 만원; dongs without contracts drop out."},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"enum":["monthly","deposit","station"],"type":"string"},{"type":"null"}],"description":"Order by the usual monthly rent or deposit (lowest first) or by the walk to the nearest station.","title":"Sort"},"description":"Order by the usual monthly rent or deposit (lowest first) or by the walk to the nearest station."},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"At most this many dongs, after sorting.","title":"Limit"},"description":"At most this many dongs, after sorting."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DongList"}}}},"422":{"description":"`invalid_input`: 입력값을 확인해 주세요. ","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"`not_ready`: 데이터를 불러오는 중입니다. 잠시 뒤에 다시 시도해 주세요. ","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/dongs/{key}":{"get":{"summary":"Dong Profile","description":"One 행정동 in full: the rent of recent one-person contracts by housing kind, every convenience item, the\nstations within walking distance, cautions, the H3 cells to draw and a `summary_ko` to repeat.","operationId":"dong_profile_api_v1_dongs__key__get","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","minLength":2,"maxLength":60,"description":"The dong's `key` (11620 서림동), its name (관악구 서림동) or, when only one 행정동 has it, the bare name (서림동). A numbered name works with or without 제 (망원1동, 망원제1동); without its number (역삼동) the answer is a 422 that lists the numbered dongs.","title":"Key"},"description":"The dong's `key` (11620 서림동), its name (관악구 서림동) or, when only one 행정동 has it, the bare name (서림동). A numbered name works with or without 제 (망원1동, 망원제1동); without its number (역삼동) the answer is a 422 that lists the numbered dongs."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DongProfile"}}}},"404":{"description":"`dong_not_found`: 그 동네를 찾지 못했습니다. 구와 동 이름(예: 관악구 서림동)으로 다시 시도해 주세요. ","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"`invalid_input`: 입력값을 확인해 주세요. ","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"`not_ready`: 데이터를 불러오는 중입니다. 잠시 뒤에 다시 시도해 주세요. ","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}}},"components":{"schemas":{"ApiError":{"properties":{"code":{"type":"string","enum":["not_ready","rate_limited","search_unavailable","invalid_input","place_not_found","dong_not_found"],"title":"Code"},"message":{"type":"string","title":"Message"}},"type":"object","required":["code","message"],"title":"ApiError"},"Around":{"properties":{"point":{"items":{"type":"number"},"type":"array","title":"Point"},"dong":{"anyOf":[{"$ref":"#/components/schemas/DongBrief"},{"type":"null"}]},"scores":{"additionalProperties":{"type":"integer"},"type":"object","title":"Scores"},"top_percent":{"additionalProperties":{"type":"integer"},"type":"object","title":"Top Percent"},"items":{"items":{"$ref":"#/components/schemas/NearestFacility"},"type":"array","title":"Items"},"stations":{"items":{"$ref":"#/components/schemas/Station"},"type":"array","title":"Stations"},"adult_bars_300m":{"type":"integer","title":"Adult Bars 300M"},"cautions":{"items":{"type":"string"},"type":"array","title":"Cautions"},"commutes":{"items":{"$ref":"#/components/schemas/Trip"},"type":"array","title":"Commutes"},"resolved_place":{"anyOf":[{"$ref":"#/components/schemas/SearchHit"},{"type":"null"}]},"summary_ko":{"type":"string","title":"Summary Ko"},"notice":{"type":"string","title":"Notice"}},"type":"object","required":["point","dong","scores","top_percent","items","stations","adult_bars_300m","cautions","commutes","summary_ko","notice"],"title":"Around"},"Config":{"properties":{"kakao_js_key":{"type":"string","title":"Kakao Js Key"},"min_app_version":{"type":"string","title":"Min App Version"}},"type":"object","required":["kakao_js_key","min_app_version"],"title":"Config"},"Destination":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"lat":{"type":"number","title":"Lat"},"lon":{"type":"number","title":"Lon"}},"type":"object","required":["name","lat","lon"],"title":"Destination"},"DongBrief":{"properties":{"key":{"type":"string","title":"Key"},"name":{"type":"string","title":"Name"},"rent":{"$ref":"#/components/schemas/RentSummary"}},"type":"object","required":["key","name","rent"],"title":"DongBrief"},"DongList":{"properties":{"count":{"type":"integer","title":"Count"},"period":{"items":{"type":"string"},"type":"array","title":"Period"},"dongs":{"items":{"$ref":"#/components/schemas/DongSummary"},"type":"array","title":"Dongs"},"notice":{"type":"string","title":"Notice"}},"type":"object","required":["count","period","dongs","notice"],"title":"DongList"},"DongProfile":{"properties":{"key":{"type":"string","title":"Key"},"name":{"type":"string","title":"Name"},"gu":{"type":"string","title":"Gu"},"center":{"items":{"type":"number"},"type":"array","title":"Center"},"rent":{"$ref":"#/components/schemas/RentSummary"},"scores":{"additionalProperties":{"type":"integer"},"type":"object","title":"Scores"},"top_percent":{"additionalProperties":{"type":"integer"},"type":"object","title":"Top Percent"},"adult_bars_300m":{"type":"number","title":"Adult Bars 300M"},"station":{"anyOf":[{"$ref":"#/components/schemas/Station"},{"type":"null"}]},"rent_by_kind":{"additionalProperties":{"$ref":"#/components/schemas/RentSummary"},"propertyNames":{"enum":["rowhouse","officetel","house"]},"type":"object","title":"Rent By Kind"},"items":{"items":{"$ref":"#/components/schemas/FacilityScore"},"type":"array","title":"Items"},"stations":{"items":{"$ref":"#/components/schemas/Station"},"type":"array","title":"Stations"},"cautions":{"items":{"type":"string"},"type":"array","title":"Cautions"},"period":{"items":{"type":"string"},"type":"array","title":"Period"},"cells":{"items":{"items":{"items":{"type":"number"},"type":"array"},"type":"array"},"type":"array","title":"Cells"},"summary_ko":{"type":"string","title":"Summary Ko"},"notice":{"type":"string","title":"Notice"}},"type":"object","required":["key","name","gu","center","rent","scores","top_percent","adult_bars_300m","station","rent_by_kind","items","stations","cautions","period","cells","summary_ko","notice"],"title":"DongProfile"},"DongSummary":{"properties":{"key":{"type":"string","title":"Key"},"name":{"type":"string","title":"Name"},"gu":{"type":"string","title":"Gu"},"center":{"items":{"type":"number"},"type":"array","title":"Center"},"rent":{"$ref":"#/components/schemas/RentSummary"},"scores":{"additionalProperties":{"type":"integer"},"type":"object","title":"Scores"},"top_percent":{"additionalProperties":{"type":"integer"},"type":"object","title":"Top Percent"},"adult_bars_300m":{"type":"number","title":"Adult Bars 300M"},"station":{"anyOf":[{"$ref":"#/components/schemas/Station"},{"type":"null"}]}},"type":"object","required":["key","name","gu","center","rent","scores","top_percent","adult_bars_300m","station"],"title":"DongSummary"},"FacilityScore":{"properties":{"group":{"type":"string","title":"Group"},"label":{"type":"string","title":"Label"},"score":{"type":"integer","title":"Score"}},"type":"object","required":["group","label","score"],"title":"FacilityScore"},"NearestFacility":{"properties":{"group":{"type":"string","title":"Group"},"label":{"type":"string","title":"Label"},"score":{"type":"integer","title":"Score"},"nearest":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nearest"},"distance_m":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Distance M"},"walk_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Walk Minutes"}},"type":"object","required":["group","label","score","nearest","distance_m","walk_minutes"],"title":"NearestFacility"},"RentSummary":{"properties":{"n":{"type":"integer","title":"N"},"median_deposit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Median Deposit"},"median_monthly":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Median Monthly"}},"type":"object","required":["n","median_deposit","median_monthly"],"title":"RentSummary"},"SearchHit":{"properties":{"name":{"type":"string","title":"Name"},"address":{"type":"string","title":"Address"},"lat":{"type":"number","title":"Lat"},"lon":{"type":"number","title":"Lon"}},"type":"object","required":["name","address","lat","lon"],"title":"SearchHit"},"SearchResults":{"properties":{"results":{"items":{"$ref":"#/components/schemas/SearchHit"},"type":"array","title":"Results"}},"type":"object","required":["results"],"title":"SearchResults"},"Station":{"properties":{"name":{"type":"string","title":"Name"},"lines":{"items":{"type":"string"},"type":"array","title":"Lines"},"walk_minutes":{"type":"integer","title":"Walk Minutes"}},"type":"object","required":["name","lines","walk_minutes"],"title":"Station"},"Status":{"properties":{"ready":{"type":"boolean","title":"Ready"},"loaded_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loaded At"},"versions":{"additionalProperties":{"type":"string"},"type":"object","title":"Versions"}},"type":"object","required":["ready","loaded_at","versions"],"title":"Status"},"Trip":{"properties":{"to":{"$ref":"#/components/schemas/Destination"},"minutes":{"type":"integer","title":"Minutes"},"transfers":{"type":"integer","title":"Transfers"},"board":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Board"},"alight":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alight"}},"type":"object","required":["to","minutes","transfers","board","alight"],"title":"Trip"}}}}