KTO Tourism Content Lab (TourAPI Korean Tourism Info)
Nationwide tourism information from Korea Tourism Content Lab (about 260,000 records for attractions, cultural facilities, festivals and events, travel courses, leisure sports, lodging, shopping, and restaurants). Call directly with GET /api/tour with no auth key (action=search for keyword search, area for regional lists, location for coordinate radius, detail for details). The server already has a data.go.kr key registered, so calls work immediately. Provides titles, addresses, coordinates, summaries, images, and hours.
⚡ Tourism info quick call
GET /api/tour?action=search&keyword=경복궁
Use this URL first for tourism search. No auth key required; action=search|area|location|detail. Server key already registered, so calls work immediately.
What agents get
- title, addr1/addr2 (address), mapx/mapy (coordinates), firstimage/firstimage2 (representative images), contentid/contenttypeid, tel, overview (summary, via detail)
Keyword-, region-, and coordinate-based attraction search, shortlisting of course, festival, lodging, and restaurant candidates, and travel-content generation with images and summaries
Use cases
- Search attractions, festivals, lodging, and restaurants by keyword
- List tourism entries by region code and category
- Explore nearby attractions within a coordinate radius
- Look up detail overview, images, and usage info by content ID
Registered APIs (4)
Keyword Search searchKeyword2
Unified tourism search by keyword. arrange=A (title asc)/C (modified desc)/D (created desc)/O (title asc)/Q (modified asc)/R (created asc)
keywordRequired — Search keyword (1-50 chars) e.g.경복궁contentTypeIdOptional — 12 attraction / 14 cultural facility / 15 festival-event / 25 travel course / 28 leisure sports / 32 lodging / 38 shopping / 39 restaurant e.g.12numOfRowsOptional e.g.10pageNoOptional e.g.1
Returns: totalCount (total records), items[] (title/addr1/mapx/mapy/firstimage/contentid/contenttypeid/tel), arrange ordering
Rate limit: 1,000 calls/day (data.go.kr development-account daily limit of 1,000 calls)
Area-Based List areaBasedList2
List tourism entries by sido + sigungu + category. areaCode=39 covers all of Jeju
areaCodeRequired — 1 Seoul / 2 Incheon / 3 Daejeon / 4 Daegu / 5 Gwangju / 6 Busan / 7 Ulsan / 8 Sejong / 31 Gyeonggi / 32 Gangwon / 33 Chungbuk / 34 Chungnam / 35 Gyeongbuk / 36 Gyeongnam / 37 Jeonbuk / 38 Jeonnam / 39 Jeju e.g.1contentTypeIdOptional e.g.15numOfRowsOptional e.g.10pageNoOptional e.g.1
Returns: totalCount, items[] (title/addr1/mapx/mapy/firstimage/contentid/contenttypeid)
Rate limit: 1,000 calls/day
Location-Based List locationBasedList2
Tourism info within a coordinate radius. mapX=longitude (124-132), mapY=latitude (33-43), radius=radius in meters (1-20000)
mapXRequired — Longitude e.g.126.98mapYRequired — Latitude e.g.37.57radiusOptional e.g.1000contentTypeIdOptional e.g.12
Returns: totalCount, items[] (title/addr1/dist (distance in m)/mapx/mapy/firstimage/contentid)
Rate limit: 1,000 calls/day
Common Detail Info detailCommon2
Look up title, address, overview, images, coordinates, and category codes at once by contentId
contentIdRequired — Content ID (numeric) e.g.126508
Returns: title/overview (summary)/addr1/firstimage/mapx/mapy/tel/lclasification (major/mid/minor categories)/homepage
Rate limit: 1,000 calls/day
Auth · pricing · terms
| Auth | ServiceKey — data.go.kr service key. Stored only on the proxy server and never exposed to agents. Agents call only our quick API (/api/tour) or the X-Agent-Token proxy. |
|---|---|
| Pricing | Free. Development accounts auto-approved; production accounts require review |
| License | Public data (follow the data.go.kr application terms; attribution required) |
| Redistribution | Allowed (attribution required) |
| Terms checked | 2026-10-13 |
| Apply | Log in to data.go.kr -> Apply for the KTO_Korean Tourism Information Service_GW -> Service key issued (development account auto-approved) Portal |
| Status | Active |
| Last checked | 2026-10-13 |
How agents call
Call through our proxy. Start with the keyless quick API shown above (no token needed). For the keyed proxy, send X-Agent-Token to POST /agencatalog/api/call with ('service', 'endpoint', 'params'). The full service list is at /agencatalog/api/services.json.
Example: POST /agencatalog/api/call {service:'kto-tour-content-lab', endpoint:'searchKeyword2', params:{keyword:'경복궁'}}
Machine-readable JSON schema
{
"service": "kto-tour-content-lab",
"name": "KTO Tourism Content Lab (TourAPI Korean Tourism Info)",
"provider": "KTO",
"apis": [
{
"id": "searchKeyword2",
"name": "Keyword Search",
"params": [
{
"name": "keyword",
"required": true,
"example": "경복궁",
"desc": "Search keyword (1-50 chars)"
},
{
"name": "contentTypeId",
"required": false,
"example": "12",
"desc": "12 attraction / 14 cultural facility / 15 festival-event / 25 travel course / 28 leisure sports / 32 lodging / 38 shopping / 39 restaurant"
},
{
"name": "numOfRows",
"required": false,
"example": "10"
},
{
"name": "pageNo",
"required": false,
"example": "1"
}
]
},
{
"id": "areaBasedList2",
"name": "Area-Based List",
"params": [
{
"name": "areaCode",
"required": true,
"example": "1",
"desc": "1 Seoul / 2 Incheon / 3 Daejeon / 4 Daegu / 5 Gwangju / 6 Busan / 7 Ulsan / 8 Sejong / 31 Gyeonggi / 32 Gangwon / 33 Chungbuk / 34 Chungnam / 35 Gyeongbuk / 36 Gyeongnam / 37 Jeonbuk / 38 Jeonnam / 39 Jeju"
},
{
"name": "contentTypeId",
"required": false,
"example": "15"
},
{
"name": "numOfRows",
"required": false,
"example": "10"
},
{
"name": "pageNo",
"required": false,
"example": "1"
}
]
},
{
"id": "locationBasedList2",
"name": "Location-Based List",
"params": [
{
"name": "mapX",
"required": true,
"example": "126.98",
"desc": "Longitude"
},
{
"name": "mapY",
"required": true,
"example": "37.57",
"desc": "Latitude"
},
{
"name": "radius",
"required": false,
"example": "1000"
},
{
"name": "contentTypeId",
"required": false,
"example": "12"
}
]
},
{
"id": "detailCommon2",
"name": "Common Detail Info",
"params": [
{
"name": "contentId",
"required": true,
"example": "126508",
"desc": "Content ID (numeric)"
}
]
}
],
"proxy_call": "POST /agencatalog/api/call",
"attribution": "Source: KTO Korean Tourism Information Service (TourAPI, Public Data Portal data.go.kr)"
}
Notes
- API keys live only on the server. Clients asking for keys directly cannot use this route.
- Each provider has a daily quota. Over-quota calls return 429 and are blocked.
- Provider outages or over-quota errors are passed through. Check the error field before retrying.
- Attribution: Source: KTO Korean Tourism Information Service (TourAPI, Public Data Portal data.go.kr)
Last checked: 2026-10-13
AI Knowledge Hub