{"openapi":"3.1.0","info":{"title":"Dolaşıyo API","version":"1.0.0","description":"Seyahat planlama ve maliyet tahmini API'si. Tüm uç noktalar `/api/v1` altında; yanıtlar `{ data }` ya da `{ error: { code, message, details, requestId } }` biçimindedir.\n\nAnahtarsız kullanımda IP başına günlük 500 istek sınırı vardır; ücretsiz API anahtarı ile sınırlar 5 katına çıkar ve günlük kota uygulanır.\n\nBelgeler: https://dolasiyo.com/gelistiriciler\n\nOturum gerektiren (web sitesine özel) uç noktalar: GET /me/plans, GET /community-plans/{slug}, GET /auth-config, GET/POST /me/adventures, GET/PATCH/DELETE /me/adventures/{id}, POST /me/adventures/{id}/memories, PATCH/DELETE /me/adventures/{id}/memories/{memoryId}, POST /me/adventures/{id}/memories/photos, DELETE /me/adventures/{id}/memories/photos/{photoId}, POST/DELETE /me/memories/{id}/share, GET /posts/{id}, GET/PUT/DELETE /posts/{id}/like, GET/POST /posts/{id}/comments, PATCH/DELETE /posts/{id}/comments/{commentId}, POST /posts/{id}/comments/{commentId}/report, POST /posts/{id}/report, GET /feed/following, GET /users/{username}, GET /users/{username}/posts, GET /users/{username}/visits, GET /users/{username}/badges, GET /users/{username}/boards, GET /users/{username}/followers, /following, GET /plans/{id}/adventure, GET/PATCH /plans/{id}/checklist, GET /plans/{id}/insights/live, PUT/DELETE /destinations/{slug}/save, POST /plans/{id}/email, POST /prices/research, GET/PATCH /me/profile, POST /me/apple-authorization, POST/DELETE /me/avatar, GET/PUT /me/newsletter, GET/POST /me/api-keys, DELETE /me/api-keys/{id}, POST /newsletter, GET/POST /me/shared-plans, PATCH/DELETE /me/shared-plans/{id}, PUT/DELETE /me/shared-plans/{id}/publish, POST /community-plans/{slug}/save, GET/PUT/DELETE /community-plans/{slug}/like, GET/POST /community-plans/{slug}/comments, PATCH/DELETE /comments/{id}, POST /comments/{id}/report, GET /admin/shared-plans, POST /admin/shared-plans/{id}, POST /admin/comments/{id}, POST /admin/posts/{id}, POST /admin/post-comments/{id}.","contact":{"name":"Dolaşıyo","url":"https://dolasiyo.com/gelistiriciler","email":"merhaba@dolasiyo.com"},"termsOfService":"https://dolasiyo.com/gelistiriciler#kosullar"},"servers":[{"url":"https://dolasiyo.com/api/v1"}],"tags":[{"name":"Keşif","description":"Rotalar, konaklama bağlantıları"},{"name":"Yer ve fiyat","description":"Yer arama, fiyat profilleri, döviz"},{"name":"Planlama","description":"Seyahat planı ve maliyet hesabı"},{"name":"Sistem","description":"Durum"}],"paths":{"/destinations":{"get":{"operationId":"destinations-list","tags":["Keşif"],"summary":"Rota akışı","description":"Editörlerin seçtiği ya da kişiselleştirilmiş sırada rotalar. Her kart 2 kişi, önerilen gece sayısı için konaklama + yeme-içme + gezi dahil tahmini maliyet içerir. İmleç (cursor) ile sayfalanır.\n\nRate limit: 120 istek / 60 sn (API anahtarıyla ×5).","security":[{},{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"name":"limit","in":"query","required":false,"description":"Sayfa boyutu (1–50, varsayılan 24)","schema":{"type":"integer"},"example":"12"},{"name":"cursor","in":"query","required":false,"description":"Önceki yanıttaki `nextCursor`","schema":{"type":"string"}},{"name":"category","in":"query","required":false,"description":"Kategori: Deniz, Doğa, Tarih, Kültür, Gastronomi, Kış, Hafta sonu, Yurt dışı","schema":{"type":"string"},"example":"Doğa"},{"name":"q","in":"query","required":false,"description":"Serbest metin arama (en fazla 80 karakter)","schema":{"type":"string"}},{"name":"currency","in":"query","required":false,"description":"Fiyat para birimi (varsayılan TRY)","schema":{"type":"string","enum":["TRY","EUR","USD"]}},{"name":"sort","in":"query","required":false,"description":"Sıralama (varsayılan editorial)","schema":{"type":"string","enum":["editorial","for-you"]}},{"name":"include","in":"query","required":false,"description":"Virgülle ek veri: `categories` (kategori sayıları), `community` (ilk sayfada onaylı topluluk planları)","schema":{"type":"string"},"example":"community"}],"responses":{"200":{"description":"OK — `{ data: … }`","content":{"application/json":{"example":{"data":{"items":[{"id":"_M2BuuVStH","slug":"kapadokya-balon-ve-vadiler","title":"Kapadokya: Balonlar ve Vadiler","summary":"Gün doğumunda balon turu, peri bacaları arasında yürüyüş ve yeraltı şehirleri.","category":"Doğa","lat":38.6431,"lon":34.8289,"suggestedNights":3,"image":{"url":"https://…/500px-Göreme.JPG","largeUrl":"https://…/960px-Göreme.JPG","width":500,"height":333,"credit":"Wikipedia · …"},"tags":["balon","yürüyüş","peri bacası"],"highlights":["Güvercinlik Vadisi","Derinkuyu Yeraltı Şehri"],"city":{"slug":"nevsehir-goreme","name":"Göreme","country":"TR"},"estimate":{"total":48210,"perPerson":24105,"perNight":16070,"currency":"TRY","travelers":2}}],"nextCursor":"o1"}}}}},"401":{"description":"Geçersiz API anahtarı / giriş gerekli","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Doğrulama hatası (`details` alan listesi)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Hız sınırı ya da günlük kota (Retry-After başlığına bak)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/destinations/{slug}":{"get":{"operationId":"destination-detail","tags":["Keşif"],"summary":"Rota detayı","description":"Tek bir rotanın kartı ve maliyet tahmini.\n\nRate limit: 120 istek / 60 sn (API anahtarıyla ×5).","security":[{},{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"name":"slug","in":"path","required":true,"description":"Rota kısa adı","schema":{"type":"string"},"example":"kapadokya-balon-ve-vadiler"},{"name":"currency","in":"query","required":false,"description":"Para birimi","schema":{"type":"string","enum":["TRY","EUR","USD"]}}],"responses":{"200":{"description":"OK — `{ data: … }`","content":{"application/json":{"example":{"data":{"id":"_M2BuuVStH","slug":"kapadokya-balon-ve-vadiler","title":"Kapadokya: Balonlar ve Vadiler","…":"…"}}}}},"401":{"description":"Geçersiz API anahtarı / giriş gerekli","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Doğrulama hatası (`details` alan listesi)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Hız sınırı ya da günlük kota (Retry-After başlığına bak)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/community-plans":{"get":{"operationId":"community-plans","tags":["Keşif"],"summary":"Topluluk planları","description":"Kullanıcıların kendi planlarından hazırlayıp paylaştığı, editörlerin onayladığı tatil planları. Yazar yalnızca herkese açık kullanıcı adıyla görünür. En yeni onaylar önce gelir.\n\nRate limit: 120 istek / 60 sn (API anahtarıyla ×5).","security":[{},{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"name":"limit","in":"query","required":false,"description":"Sayfa boyutu (1–50, varsayılan 24)","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"Atlanacak kayıt (en fazla 500)","schema":{"type":"integer"}},{"name":"category","in":"query","required":false,"description":"Kategori: Deniz, Doğa, Tarih, Kültür, Gastronomi, Kış, Hafta sonu, Yurt dışı","schema":{"type":"string"}},{"name":"q","in":"query","required":false,"description":"Başlık ve hikâyede arama (en fazla 80 karakter)","schema":{"type":"string"}}],"responses":{"200":{"description":"OK — `{ data: … }`","content":{"application/json":{"example":{"data":{"items":[{"kind":"community","id":"Xy12AbCd34","slug":"karadeniz-yaylalari-xy12ab","title":"Karadeniz yaylaları: 4 gecede Ayder ve Uzungöl","excerpt":"Sisli sabahlar, muhlama ve yayla yolları…","category":"Doğa","cover":"https://upload.wikimedia.org/…/500px-Ayder.jpg","nights":4,"travelers":2,"stops":4,"destination":"Ayder","total":38400,"perPerson":19200,"currency":"TRY","author":{"username":"gezgin.ayse","linkable":true}}]}}}}},"401":{"description":"Geçersiz API anahtarı / giriş gerekli","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Doğrulama hatası (`details` alan listesi)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Hız sınırı ya da günlük kota (Retry-After başlığına bak)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/destinations/{slug}/stays":{"get":{"operationId":"destination-stays","tags":["Keşif"],"summary":"Konaklama bağlantıları ve yakındaki oteller","description":"Booking.com, Airbnb, Google Oteller, Etstur ve trivago için tarih ve kişi sayısı doldurulmuş arama bağlantıları; OpenStreetMap'ten bölgedeki konaklama yerleri. Tarih verilmezse bir sonraki cumartesi ve önerilen gece sayısı kullanılır.\n\nRate limit: 60 istek / 60 sn (API anahtarıyla ×5).","security":[{},{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"name":"slug","in":"path","required":true,"description":"Rota kısa adı","schema":{"type":"string"},"example":"alacati-cesme-ruzgar"},{"name":"checkin","in":"query","required":false,"description":"Giriş tarihi (YYYY-MM-DD)","schema":{"type":"string"}},{"name":"checkout","in":"query","required":false,"description":"Çıkış tarihi (YYYY-MM-DD)","schema":{"type":"string"}},{"name":"adults","in":"query","required":false,"description":"Yetişkin sayısı (1–12, varsayılan 2)","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK — `{ data: … }`","content":{"application/json":{"example":{"data":{"checkin":"2026-10-03","checkout":"2026-10-06","adults":2,"links":[{"key":"booking","label":"Booking.com","href":"https://www.booking.com/searchresults.tr.html?ss=Ala%C3%A7at%C4%B1&…"}],"stays":[{"id":"node/123","name":"Taş Otel","kind":"hotel","stars":4,"lat":38.28,"lon":26.37,"distanceKm":0.4}]}}}}},"401":{"description":"Geçersiz API anahtarı / giriş gerekli","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Doğrulama hatası (`details` alan listesi)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Hız sınırı ya da günlük kota (Retry-After başlığına bak)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/places":{"get":{"operationId":"places","tags":["Yer ve fiyat"],"summary":"Yer arama (otomatik tamamlama)","description":"Şehir, ilçe, otel ya da gezilecek yer arar. Sonuçlar planlama isteğindeki `origin`/`destination` alanlarına doğrudan verilebilir.\n\nRate limit: 60 istek / 60 sn (API anahtarıyla ×5).","security":[{},{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"name":"q","in":"query","required":true,"description":"Arama metni (en az 2 karakter)","schema":{"type":"string"},"example":"kapadokya"},{"name":"limit","in":"query","required":false,"description":"Sonuç sayısı (1–10, varsayılan 6)","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK — `{ data: … }`","content":{"application/json":{"example":{"data":{"items":[{"name":"Kapadokya (Lykia) Lodge Otel","label":"Kapadokya (Lykia) Lodge Otel, Uçhisar, Nevşehir, Turkey","lat":38.6292,"lon":34.7695,"country":"TR","type":"hotel"}]}}}}},"401":{"description":"Geçersiz API anahtarı / giriş gerekli","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Doğrulama hatası (`details` alan listesi)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Hız sınırı ya da günlük kota (Retry-After başlığına bak)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/prices":{"get":{"operationId":"prices","tags":["Yer ve fiyat"],"summary":"Bir yerin fiyat profili","description":"Otel (gecelik, çift kişilik oda), lokanta, kahve, market/pazar, şehir içi ulaşım, taksi, müze ve hediyelik fiyatları. Kaynak sırası: canlı araştırma → aylık fiyat gözlemleri (`hermes`, `ranges` = en uygun–üst aralık) → şehir veri seti → ülke ortalaması (`source` alanı).\n\nRate limit: 120 istek / 60 sn (API anahtarıyla ×5).","security":[{},{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"name":"lat","in":"query","required":true,"description":"Enlem","schema":{"type":"number"},"example":"38.64"},{"name":"lon","in":"query","required":true,"description":"Boylam","schema":{"type":"number"},"example":"34.83"},{"name":"name","in":"query","required":false,"description":"Yer adı (eşleştirme için)","schema":{"type":"string"},"example":"Göreme"},{"name":"country","in":"query","required":false,"description":"ISO ülke kodu (TR, GR, …)","schema":{"type":"string"},"example":"TR"},{"name":"tier","in":"query","required":false,"description":"Bütçe seviyesi (varsayılan mid)","schema":{"type":"string","enum":["budget","mid","luxury"]}},{"name":"currency","in":"query","required":false,"description":"Para birimi","schema":{"type":"string","enum":["TRY","EUR","USD"]}}],"responses":{"200":{"description":"OK — `{ data: … }`","content":{"application/json":{"example":{"data":{"currency":"TRY","fxDate":"2026-09-25","summary":{"hotelPerNight":6249,"mealCheap":491,"mealMid":1116,"coffee":195,"marketDaily":458,"localTransportDaily":246,"attractionAvg":1116,"taxiStart":65,"taxiPerKm":55,"souvenirAvg":200,"specialty":{"name":"Lokum (1 kg)","price":558},"source":"dataset","matchedPlace":"Göreme"},"detail":{"hotel":{"budget":3404,"mid":6249,"luxury":17241},"meal":{"cheap":491,"mid":1116,"fine":2901}},"distanceKm":0}}}}},"401":{"description":"Geçersiz API anahtarı / giriş gerekli","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Doğrulama hatası (`details` alan listesi)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Hız sınırı ya da günlük kota (Retry-After başlığına bak)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/prices/history":{"get":{"operationId":"prices-history","tags":["Yer ve fiyat"],"summary":"Aylık fiyat geçmişi","description":"Dolaşıyo'nun her ay topladığı fiyat gözlemleri: il (`tr:07`), ilçe (`tr:48:bodrum`), şehir (`intl:rs:belgrade`), ülke (`country:gr`, yakıt) ve uçuş kalkış noktası (`air:IST`, `dims.route`). Her nokta tipik değer, en uygun–üst aralık (low/high), gözlendiği para birimi ve EUR karşılığı, güven skoru ile döner.\n\nRate limit: 120 istek / 60 sn (API anahtarıyla ×5).","security":[{},{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"name":"place","in":"query","required":true,"description":"Yer anahtarı","schema":{"type":"string"},"example":"tr:07"},{"name":"metric","in":"query","required":false,"description":"Tek bir metrik (hotel_mid, meal_cheap, taxi_start, fuel_diesel, flight_oneway …); boşsa hepsi","schema":{"type":"string"},"example":"hotel_mid"}],"responses":{"200":{"description":"OK — `{ data: … }`","content":{"application/json":{"example":{"data":{"place":{"key":"tr:07","name":"Antalya","level":"il","country":"TR"},"series":[{"metric":"hotel_mid","label":"Otel, orta (çift kişilik oda / gece)","unit":"room-night","dims":{},"points":[{"period":"2026-09","label":"Eylül 2026","value":4200,"low":3100,"high":5600,"currency":"TRY","valueEur":75.4,"confidence":0.85,"source":"hermes"},{"period":"2026-10","label":"Ekim 2026","value":3900,"low":2900,"high":5200,"currency":"TRY","valueEur":69.1,"confidence":0.85,"source":"hermes"}]}]}}}}},"401":{"description":"Geçersiz API anahtarı / giriş gerekli","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Doğrulama hatası (`details` alan listesi)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Hız sınırı ya da günlük kota (Retry-After başlığına bak)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/fx":{"get":{"operationId":"fx","tags":["Yer ve fiyat"],"summary":"Döviz kurları","description":"EUR bazlı güncel kurlar (Avrupa Merkez Bankası referans kurları, günlük).\n\nRate limit: 120 istek / 60 sn (API anahtarıyla ×5).","security":[{},{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[],"responses":{"200":{"description":"OK — `{ data: … }`","content":{"application/json":{"example":{"data":{"base":"EUR","date":"2026-09-25","rates":{"TRY":55.7975,"USD":1.1403,"EUR":1}}}}}},"401":{"description":"Geçersiz API anahtarı / giriş gerekli","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Doğrulama hatası (`details` alan listesi)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Hız sınırı ya da günlük kota (Retry-After başlığına bak)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/plans":{"post":{"operationId":"plans-create","tags":["Planlama"],"summary":"Seyahat planı hesapla","description":"Karayolu/otobüs/tren/uçak için rota, mola ve konaklama durakları, durak başına fiyatlar ve kalem kalem maliyet dökümü (alt–üst aralıkla). `save: true` ile paylaşılabilir bir plan kimliği döner. Aynı girdi 15 dakika önbelleklenir.\n\nRate limit: 10 istek / 60 sn (API anahtarıyla ×5).","security":[{},{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[],"responses":{"200":{"description":"OK — `{ data: … }`","content":{"application/json":{"example":{"data":{"id":null,"result":{"currency":"TRY","route":{"mode":"car","distanceKm":297,"durationHours":3.6,"drivingDays":1,"geometry":[[39.93,32.86],"…"]},"stops":[{"kind":"destination","name":"Göreme","nights":3,"prices":{"hotelPerNight":6249,"…":"…"},"cost":{"lodging":18747,"food":9376,"total":36120},"attractions":["…"]}],"lines":[{"key":"fuel","label":"Yakıt","money":{"amount":3480,"low":3062,"high":4002}}],"total":{"amount":45210,"low":36168,"high":56513},"perPerson":{"amount":22605,"low":18084,"high":28256},"assumptions":["Araç tüketimi 100 km'de 7 L, günlük en fazla 6 saat sürüş."]}}}}}},"401":{"description":"Geçersiz API anahtarı / giriş gerekli","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Doğrulama hatası (`details` alan listesi)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Hız sınırı ya da günlük kota (Retry-After başlığına bak)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"origin":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":160},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"country":{"type":"string","minLength":2,"maxLength":2}},"required":["name","lat","lon"]},"destination":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":160},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"country":{"type":"string","minLength":2,"maxLength":2}},"required":["name","lat","lon"]},"waypoints":{"maxItems":8,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":160},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"country":{"type":"string","minLength":2,"maxLength":2}},"required":["name","lat","lon"]}},"startDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"nights":{"type":"integer","minimum":0,"maximum":60},"travelers":{"type":"integer","minimum":1,"maximum":12},"tier":{"default":"mid","type":"string","enum":["budget","mid","luxury"]},"transport":{"default":"car","type":"string","enum":["car","bus","train","flight"]},"fuelType":{"default":"gasoline","type":"string","enum":["gasoline","diesel","lpg"]},"consumptionPer100km":{"default":7,"type":"number","minimum":2,"maximum":30},"maxDriveHoursPerDay":{"default":6,"type":"number","minimum":2,"maximum":14},"roundTrip":{"default":true,"type":"boolean"},"activitiesPerDay":{"default":2,"type":"integer","minimum":0,"maximum":6},"souvenirsPerPerson":{"default":3,"type":"integer","minimum":0,"maximum":30},"currency":{"default":"TRY","type":"string","enum":["TRY","EUR","USD"]}},"required":["origin","destination","nights","travelers"]},"save":{"type":"boolean","default":false}},"required":["input"]},"example":{"input":{"origin":{"name":"Ankara","lat":39.9334,"lon":32.8597,"country":"TR"},"destination":{"name":"Göreme","lat":38.6431,"lon":34.8289,"country":"TR"},"nights":3,"travelers":2,"tier":"mid","transport":"car","roundTrip":true,"currency":"TRY"},"save":false}}}}}},"/plans/stream":{"post":{"operationId":"plans-stream","tags":["Planlama"],"summary":"Plan hesapla (canlı ilerleme, NDJSON)","description":"`POST /plans` ile aynı gövde; yanıt `application/x-ndjson` akışıdır. Her satır bir JSON nesnesi: `progress` olayları (rota, yolda konaklama, molalar, fiyatlar, kur, toplam), ardından `done` (sonuç) ya da `error`. Aynı `event.id` ile gelen olay öncekini günceller (run → done).\n\nRate limit: 10 istek / 60 sn (API anahtarıyla ×5).","security":[{},{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[],"responses":{"200":{"description":"NDJSON akışı","content":{"application/x-ndjson":{"example":"{\"type\":\"progress\",\"event\":{\"id\":\"route\",\"icon\":\"route\",\"title\":\"Rota hazır\",\"detail\":\"1.786 km · 19 sa 52 dk sürüş\",\"status\":\"done\"}}\n{\"type\":\"progress\",\"event\":{\"id\":\"night-1\",\"icon\":\"moon\",\"title\":\"Yolda konaklama: Bolu\",\"status\":\"done\"}}\n{\"type\":\"progress\",\"event\":{\"id\":\"price-10\",\"icon\":\"hotel\",\"title\":\"Kars: fiyatlar hazır\",\"detail\":\"Otel ~3.348 TRY/gece\",\"status\":\"done\"}}\n{\"type\":\"progress\",\"event\":{\"id\":\"total\",\"icon\":\"sum\",\"title\":\"Toplam: 78.123 TRY\",\"status\":\"done\"}}\n{\"type\":\"done\",\"id\":null,\"result\":{ \"…\": \"…\" }}"}}},"401":{"description":"Geçersiz API anahtarı / giriş gerekli","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Doğrulama hatası (`details` alan listesi)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Hız sınırı ya da günlük kota (Retry-After başlığına bak)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"origin":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":160},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"country":{"type":"string","minLength":2,"maxLength":2}},"required":["name","lat","lon"]},"destination":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":160},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"country":{"type":"string","minLength":2,"maxLength":2}},"required":["name","lat","lon"]},"waypoints":{"maxItems":8,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":160},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"country":{"type":"string","minLength":2,"maxLength":2}},"required":["name","lat","lon"]}},"startDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"nights":{"type":"integer","minimum":0,"maximum":60},"travelers":{"type":"integer","minimum":1,"maximum":12},"tier":{"default":"mid","type":"string","enum":["budget","mid","luxury"]},"transport":{"default":"car","type":"string","enum":["car","bus","train","flight"]},"fuelType":{"default":"gasoline","type":"string","enum":["gasoline","diesel","lpg"]},"consumptionPer100km":{"default":7,"type":"number","minimum":2,"maximum":30},"maxDriveHoursPerDay":{"default":6,"type":"number","minimum":2,"maximum":14},"roundTrip":{"default":true,"type":"boolean"},"activitiesPerDay":{"default":2,"type":"integer","minimum":0,"maximum":6},"souvenirsPerPerson":{"default":3,"type":"integer","minimum":0,"maximum":30},"currency":{"default":"TRY","type":"string","enum":["TRY","EUR","USD"]}},"required":["origin","destination","nights","travelers"]},"save":{"type":"boolean","default":false}},"required":["input"]},"example":{"input":{"origin":{"name":"İzmir","lat":38.42,"lon":27.14},"destination":{"name":"Kars","lat":40.6,"lon":43.1},"nights":5,"travelers":2}}}}}}},"/plans/{id}":{"get":{"operationId":"plans-get","tags":["Planlama"],"summary":"Kayıtlı plan","description":"Paylaşılan bir planın girdisi ve sonucu. Gizli planlar yalnızca sahibine döner.\n\nRate limit: 120 istek / 60 sn (API anahtarıyla ×5).","security":[{},{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Plan kimliği","schema":{"type":"string"},"example":"Ab3dE6gH9k"}],"responses":{"200":{"description":"OK — `{ data: … }`","content":{"application/json":{"example":{"data":{"id":"Ab3dE6gH9k","title":"Ankara → Göreme · 3 gece","input":{"…":"…"},"result":{"…":"…"},"createdAt":"2026-09-26T10:00:00.000Z"}}}}},"401":{"description":"Geçersiz API anahtarı / giriş gerekli","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Doğrulama hatası (`details` alan listesi)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Hız sınırı ya da günlük kota (Retry-After başlığına bak)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/plans/{id}/insights":{"get":{"operationId":"plans-insights","tags":["Planlama"],"summary":"Gün gün program, hava ve kalabalık","description":"Planın seyahat tarihleri için gün gün aktiviteler, hava tahmini (15 gün içindeyse gerçek tahmin, değilse geçen yılın aynı günleri) ve tatil/bayram kaynaklı kalabalık seviyesi.\n\nRate limit: 120 istek / 60 sn (API anahtarıyla ×5).","security":[{},{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Plan kimliği","schema":{"type":"string"},"example":"Ab3dE6gH9k"}],"responses":{"200":{"description":"OK — `{ data: … }`","content":{"application/json":{"example":{"data":{"startDate":"2026-10-03","endDate":"2026-10-06","assumedDates":false,"days":[{"day":1,"date":"2026-10-03","weekday":"Cumartesi","kind":"travel","title":"Ankara → Göreme","activities":["…"],"tips":["…"],"weather":{"label":"Az bulutlu","emoji":"🌤️","tMax":21,"tMin":9,"rain":10,"rainUnit":"%","source":"forecast"},"crowd":{"level":3,"label":"Orta","reasons":["Hafta sonu"]}}]}}}}},"401":{"description":"Geçersiz API anahtarı / giriş gerekli","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Doğrulama hatası (`details` alan listesi)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Hız sınırı ya da günlük kota (Retry-After başlığına bak)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/health":{"get":{"operationId":"health","tags":["Sistem"],"summary":"Servis durumu","description":"Uptime izlemesi için. `status` alanı `ok` ya da `degraded` olur.\n\nRate limit: 120 istek / 60 sn (API anahtarıyla ×5).","security":[{},{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[],"responses":{"200":{"description":"OK — `{ data: … }`","content":{"application/json":{"example":{"data":{"status":"ok","version":"1"}}}}},"401":{"description":"Geçersiz API anahtarı / giriş gerekli","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Doğrulama hatası (`details` alan listesi)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Hız sınırı ya da günlük kota (Retry-After başlığına bak)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"dlsy_…","description":"Authorization: Bearer dlsy_…"},"apiKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key"}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["bad_request","validation_failed","unauthorized","forbidden","not_found","conflict","rate_limited","upstream_failed","internal"]},"message":{"type":"string"},"details":{},"requestId":{"type":"string"}},"required":["code","message","requestId"]}}}}}}