[
  {
    "title": "Fashly Backend Completion",
    "description": "Mobil redesign icin tamamlanan ek backend kontratlari: visual assets, wardrobe bulk/detail/share, outfit aliases, virtual try-on results ve tracker aksiyonlari.",
    "endpoints": [
      {
        "method": "GET",
        "path": "/api/v1/app/visual-assets",
        "description": "Splash, auth, onboarding ve empty-state ekranlarinda kullanilacak visual asset anahtarlarini dondurur.",
        "requiresAuth": false,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:[{\u0022key\u0022:\u0022splash.hero\u0022,\u0022assetPath\u0022:\u0022assets/images/onboarding/splash_hero.png\u0022}],\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "Service unavailable"
      },
      {
        "method": "POST",
        "path": "/api/v1/wardrobe/items/bulk",
        "description": "Toplu gardirop kaydi olusturur ve gardirop limitini tek seferde kontrol eder.",
        "requiresAuth": true,
        "requestExample": "{\u0022items\u0022:[{\u0022name\u0022:\u0022White Shirt\u0022,\u0022category\u0022:\u0022top\u0022,\u0022subcategory\u0022:\u0022shirt\u0022,\u0022primaryColorFamily\u0022:\u0022white\u0022,\u0022temperatureMinCelsius\u0022:10,\u0022temperatureMaxCelsius\u0022:28}]}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022requestedCount\u0022:1,\u0022createdCount\u0022:1,\u0022items\u0022:[{\u0022id\u0022:\u0022019e...\u0022,\u0022name\u0022:\u0022White Shirt\u0022}]},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "GET",
        "path": "/api/v1/wardrobe/items/{itemId}/detail",
        "description": "Kiyafet detayini metadata ve share linkleriyle tek response olarak dondurur.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022item\u0022:{\u0022id\u0022:\u0022019e...\u0022,\u0022name\u0022:\u0022White Shirt\u0022},\u0022metadata\u0022:null,\u0022shareLinks\u0022:[]},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "PUT",
        "path": "/api/v1/wardrobe/items/{itemId}/metadata-corrections",
        "description": "Kullanicinin duzelttigi metadata bilgisini profil ve item uzerine uygular.",
        "requiresAuth": true,
        "requestExample": "{\u0022name\u0022:\u0022Oversize white shirt\u0022,\u0022primaryColorFamily\u0022:\u0022white\u0022,\u0022styleTags\u0022:[\u0022minimal\u0022],\u0022correctionReason\u0022:\u0022wrong title\u0022}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022primaryColorFamily\u0022:\u0022white\u0022,\u0022styleTags\u0022:[\u0022minimal\u0022],\u0022source\u0022:\u0022gemini\u002Buser\u0022},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "POST",
        "path": "/api/v1/wardrobe/items/{itemId}/share-links",
        "description": "Tek kiyafetin paylasilabilir linkini olusturur.",
        "requiresAuth": true,
        "requestExample": "{\u0022expiresAt\u0022:null}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022token\u0022:\u0022abc\u0022,\u0022shareUrl\u0022:\u0022/shared/wardrobe/items/abc\u0022,\u0022isActive\u0022:true},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "DELETE",
        "path": "/api/v1/wardrobe/items/{itemId}/share-links/{token}",
        "description": "Kiyafet paylasim linkini pasiflestirir.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022token\u0022:\u0022abc\u0022,\u0022isActive\u0022:false},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "POST",
        "path": "/api/v1/outfits/create",
        "description": "Studio outfit collection olusturmak icin mobil dostu alias route.",
        "requiresAuth": true,
        "requestExample": "{\u0022name\u0022:\u0022Weekend\u0022,\u0022styleIntent\u0022:\u0022casual\u0022,\u0022items\u0022:[{\u0022clothingItemId\u0022:\u0022019e...\u0022,\u0022slot\u0022:\u0022top\u0022,\u0022sortOrder\u0022:1}],\u0022canvasLayout\u0022:{\u0022mode\u0022:\u0022flatlay\u0022},\u0022visibility\u0022:\u0022private\u0022}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022id\u0022:\u0022019e...\u0022,\u0022name\u0022:\u0022Weekend\u0022},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "POST",
        "path": "/api/v1/outfits/{id}/style-with-ai",
        "description": "Kayitli studio kombinine AI styling notu ekler.",
        "requiresAuth": true,
        "requestExample": "{\u0022intent\u0022:\u0022smart\u0022}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022aiStylingNotes\u0022:[\u0022Kombin temel slotlar acisindan dengeli gorunuyor.\u0022]},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "POST",
        "path": "/api/v1/outfits/{id}/wear",
        "description": "Kayitli studio kombinini giyildi isaretler ve tracker aktivitesi olusturur.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022id\u0022:\u0022019e...\u0022,\u0022wornAt\u0022:\u00222026-07-09T12:00:00Z\u0022},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "POST",
        "path": "/api/v1/outfits/{id}/render",
        "description": "Studio collection icin stabil render kontrati dondurur; provider baglaninca ayni route renderUrl dondurecek.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022outfitCollectionId\u0022:\u0022019e...\u0022,\u0022status\u0022:\u0022ready\u0022,\u0022renderUrl\u0022:null,\u0022renderMetadata\u0022:{\u0022mode\u0022:\u0022studio_collection_preview\u0022}},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "POST",
        "path": "/api/v1/virtual-try-on/jobs",
        "description": "Virtual Try-On job olusturmak icin mobil dostu alias route.",
        "requiresAuth": true,
        "requestExample": "{\u0022personImageUrl\u0022:\u0022https://cdn/person.jpg\u0022,\u0022garmentImageUrl\u0022:\u0022https://cdn/item.jpg\u0022,\u0022clothingItemIds\u0022:[\u0022019e...\u0022],\u0022mode\u0022:\u0022wardrobe\u0022,\u0022options\u0022:{\u0022quality\u0022:\u0022preview\u0022}}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022id\u0022:\u0022019e...\u0022,\u0022status\u0022:\u0022failed\u0022,\u0022error\u0022:\u0022virtual_try_on_provider_not_configured\u0022},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "GET",
        "path": "/api/v1/virtual-try-on/jobs/{jobId}",
        "description": "Virtual Try-On job durumunu okur.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022id\u0022:\u0022019e...\u0022,\u0022status\u0022:\u0022completed\u0022,\u0022result\u0022:{}},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "GET",
        "path": "/api/v1/virtual-try-on/results",
        "description": "Tamamlanan veya kontrollu fail olan Virtual Try-On sonuclarini listeler.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:[{\u0022id\u0022:\u0022019e...\u0022,\u0022status\u0022:\u0022completed\u0022}],\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "DELETE",
        "path": "/api/v1/virtual-try-on/results/{id}",
        "description": "Virtual Try-On sonucunu kullanici hesabindan siler.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022resultId\u0022:\u0022019e...\u0022,\u0022deleted\u0022:true},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "GET",
        "path": "/api/v1/tracker/forgotten-items",
        "description": "Sustainability Tracker unutulan parca listesini ayri endpoint olarak dondurur.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:[{\u0022clothingItemId\u0022:\u0022019e...\u0022,\u0022actionLabel\u0022:\u0022Yeniden Kombinle\u0022}],\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "GET",
        "path": "/api/v1/tracker/active-items",
        "description": "Sustainability Tracker cok kullanilan parca listesini ayri endpoint olarak dondurur.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:[{\u0022clothingItemId\u0022:\u0022019e...\u0022,\u0022actionLabel\u0022:\u0022Alternatif Dene\u0022}],\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "POST",
        "path": "/api/v1/tracker/items/{id}/restyle",
        "description": "Unutulan veya aktif parca icin restyle aksiyonu olusturur ve puan event\u0027i yazar.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022status\u0022:\u0022created\u0022,\u0022pointsAwarded\u0022:6},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      }
    ]
  },
  {
    "title": "Auth",
    "description": "Kullan\u0131c\u0131 oturumu, JWT access token ve refresh token ak\u0131\u015Flar\u0131.",
    "endpoints": [
      {
        "method": "POST",
        "path": "/api/v1/auth/register",
        "description": "Yeni kullan\u0131c\u0131 olu\u015Fturur ve access/refresh token d\u00F6ner.",
        "requiresAuth": false,
        "requestExample": "{\u0022email\u0022:\u0022demo@example.com\u0022,\u0022password\u0022:\u0022DemoPass123!\u0022,\u0022displayName\u0022:\u0022Demo User\u0022,\u0022city\u0022:\u0022Istanbul\u0022,\u0022country\u0022:\u0022TR\u0022}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022userId\u0022:\u0022019e...\u0022,\u0022email\u0022:\u0022demo@example.com\u0022,\u0022displayName\u0022:\u0022Demo User\u0022,\u0022accessToken\u0022:\u0022eyJ...\u0022,\u0022refreshToken\u0022:\u0022raw-refresh-token\u0022,\u0022accessTokenExpiresAt\u0022:\u00222026-06-04T12:00:00Z\u0022},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022Bu e-posta ile kay\u0131tl\u0131 bir hesap zaten var.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "POST",
        "path": "/api/v1/auth/login",
        "description": "E-posta ve \u015Fifreyle oturum a\u00E7ar.",
        "requiresAuth": false,
        "requestExample": "{\u0022email\u0022:\u0022demo@example.com\u0022,\u0022password\u0022:\u0022DemoPass123!\u0022,\u0022deviceName\u0022:\u0022Pixel 9\u0022}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022accessToken\u0022:\u0022eyJ...\u0022,\u0022refreshToken\u0022:\u0022raw-refresh-token\u0022},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022E-posta veya \u015Fifre hatal\u0131.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "POST",
        "path": "/api/v1/auth/refresh",
        "description": "Refresh token ile yeni access token \u00FCretir.",
        "requiresAuth": false,
        "requestExample": "{\u0022refreshToken\u0022:\u0022raw-refresh-token\u0022,\u0022deviceName\u0022:\u0022Pixel 9\u0022}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022accessToken\u0022:\u0022eyJ...\u0022,\u0022refreshToken\u0022:\u0022next-refresh-token\u0022},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022Oturum s\u00FCresi dolmu\u015F. L\u00FCtfen tekrar giri\u015F yap.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      }
    ]
  },
  {
    "title": "Wardrobe",
    "description": "Kullan\u0131c\u0131n\u0131n ger\u00E7ek gard\u0131rop verisi, g\u00F6rsel upload, metadata ve k\u0131yafet davran\u0131\u015Flar\u0131.",
    "endpoints": [
      {
        "method": "GET",
        "path": "/api/v1/wardrobe/items",
        "description": "Kullan\u0131c\u0131n\u0131n k\u0131yafetlerini listeler.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:[{\u0022id\u0022:\u0022019e...\u0022,\u0022name\u0022:\u0022White Shirt\u0022,\u0022category\u0022:\u0022Top\u0022,\u0022careState\u0022:\u0022Clean\u0022,\u0022wearCount\u0022:0,\u0022media\u0022:[]}],\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "POST",
        "path": "/api/v1/wardrobe/items",
        "description": "Yeni k\u0131yafet kayd\u0131 olu\u015Fturur. Free/Premium gard\u0131rop limitini kontrol eder.",
        "requiresAuth": true,
        "requestExample": "{\u0022name\u0022:\u0022White Shirt\u0022,\u0022category\u0022:\u0022top\u0022,\u0022subcategory\u0022:\u0022shirt\u0022,\u0022primaryColorFamily\u0022:\u0022white\u0022,\u0022temperatureMinCelsius\u0022:10,\u0022temperatureMaxCelsius\u0022:28}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022id\u0022:\u0022019e...\u0022,\u0022name\u0022:\u0022White Shirt\u0022,\u0022category\u0022:\u0022Top\u0022},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022Bu paketteki kullan\u0131m limitine ula\u015Ft\u0131n. Devam etmek i\u00E7in Premium gerekli.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "POST",
        "path": "/api/v1/wardrobe/items/{itemId}/media",
        "description": "K\u0131yafet g\u00F6rselini MinIO\u0027ya y\u00FCkler ve metadata extraction job kuyru\u011Fa al\u0131r.",
        "requiresAuth": true,
        "requestExample": "multipart/form-data: file",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022media\u0022:{\u0022id\u0022:\u0022019e...\u0022,\u0022storageKey\u0022:\u0022wardrobe/...jpg\u0022,\u0022width\u0022:1024,\u0022height\u0022:1024},\u0022metadataJobId\u0022:\u0022019e...\u0022},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022Sadece JPG, PNG veya WEBP g\u00F6rsel y\u00FCkleyebilirsin.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "GET",
        "path": "/api/v1/wardrobe/items/{itemId}/metadata",
        "description": "Worker taraf\u0131ndan \u00E7\u0131kar\u0131lan k\u0131yafet metadata profilini okur.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022primaryColorFamily\u0022:\u0022white\u0022,\u0022styleTags\u0022:[\u0022classic\u0022,\u0022minimal\u0022],\u0022formality\u0022:4},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022Bu k\u0131yafet i\u00E7in metadata hen\u00FCz haz\u0131r de\u011Fil.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "POST",
        "path": "/api/v1/wardrobe/items/{itemId}/worn",
        "description": "K\u0131yafeti giyildi i\u015Faretler, wearCount art\u0131r\u0131r ve activity event \u00FCretir.",
        "requiresAuth": true,
        "requestExample": "{\u0022wornAt\u0022:null}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022id\u0022:\u0022019e...\u0022,\u0022wearCount\u0022:1,\u0022careState\u0022:\u0022Clean\u0022},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022K\u0131yafet bulunamad\u0131.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "POST",
        "path": "/api/v1/wardrobe/items/{itemId}/favorite/toggle",
        "description": "K\u0131yafetin favori durumunu de\u011Fi\u015Ftirir.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022id\u0022:\u0022019e...\u0022,\u0022isFavorite\u0022:true},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022K\u0131yafet bulunamad\u0131.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "PATCH",
        "path": "/api/v1/wardrobe/items/{itemId}/care-state",
        "description": "K\u0131yafetin durumunu Clean, Laundry veya Archived yapar.",
        "requiresAuth": true,
        "requestExample": "{\u0022careState\u0022:\u0022laundry\u0022}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022id\u0022:\u0022019e...\u0022,\u0022careState\u0022:\u0022Laundry\u0022},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022K\u0131yafet durumu ge\u00E7ersiz.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      }
    ]
  },
  {
    "title": "Daily Outfits",
    "description": "Metadata profillerinden deterministik skorlamayla g\u00FCnl\u00FCk kombin \u00FCretimi.",
    "endpoints": [
      {
        "method": "POST",
        "path": "/api/v1/outfits/daily/generate",
        "description": "5\u0027e kadar g\u00FCnl\u00FCk kombin \u00FCretir; bug\u00FCn zaten \u00FCretildiyse limit t\u00FCketmeden mevcut kombinleri d\u00F6nd\u00FCr\u00FCr.",
        "requiresAuth": true,
        "requestExample": "{\u0022occasion\u0022:\u0022casual\u0022,\u0022temperatureCelsius\u0022:20,\u0022count\u0022:5}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:[{\u0022id\u0022:\u0022019e...\u0022,\u0022name\u0022:\u0022Casual kombin\u0022,\u0022score\u0022:87,\u0022items\u0022:[{\u0022clothingItemId\u0022:\u0022019e...\u0022,\u0022role\u0022:\u0022top\u0022}]}],\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022Kombin \u00F6nermek i\u00E7in en az iki \u00FCst, iki alt ve bir ayakkab\u0131 ya da en az iki elbise ve bir ayakkab\u0131 metadata profili gerekli.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "GET",
        "path": "/api/v1/outfits/daily",
        "description": "Bug\u00FCn\u00FCn \u00FCretilmi\u015F kombinlerini listeler.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:[{\u0022id\u0022:\u0022019e...\u0022,\u0022score\u0022:87,\u0022reason\u0022:\u0022Casual stilinde...\u0022}],\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "POST",
        "path": "/api/v1/outfits/{outfitId}/feedback",
        "description": "Kombin be\u011Feni/kay\u0131t/gizleme feedbacki ve activity event \u00FCretir.",
        "requiresAuth": true,
        "requestExample": "{\u0022action\u0022:\u0022saved\u0022,\u0022reason\u0022:\u0022Looks good\u0022}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022id\u0022:\u0022019e...\u0022,\u0022action\u0022:\u0022Saved\u0022,\u0022activity\u0022:{\u0022eventType\u0022:\u0022outfit.feedback_submitted\u0022}},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022Geri bildirim tipi ge\u00E7ersiz.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "POST",
        "path": "/api/v1/outfits/{outfitId}/hero-render",
        "description": "G\u00FCn\u00FCn hero kombini i\u00E7in tek AI g\u00F6rsel \u00FCretir; haz\u0131r g\u00F6rsel varsa tekrar kredi t\u00FCketmeden mevcut URL\u0027i d\u00F6nd\u00FCr\u00FCr.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022outfitId\u0022:\u0022019e...\u0022,\u0022status\u0022:\u0022ready\u0022,\u0022heroRenderUrl\u0022:\u0022https://cdn.example/outfits/hero.webp\u0022,\u0022fallbackMode\u0022:\u0022none\u0022,\u0022error\u0022:null,\u0022renderedAt\u0022:\u00222026-06-16T09:15:00Z\u0022},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022outfitId\u0022:\u0022019e...\u0022,\u0022status\u0022:\u0022failed\u0022,\u0022heroRenderUrl\u0022:null,\u0022fallbackMode\u0022:\u0022item_collage\u0022,\u0022error\u0022:\u0022hero_render_provider_unavailable\u0022,\u0022renderedAt\u0022:null},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}"
      }
    ]
  },
  {
    "title": "Try Before Buy",
    "description": "\u00DCr\u00FCn linkinden \u00FCr\u00FCn ke\u015Ffi ve gard\u0131ropla uyum analizi.",
    "endpoints": [
      {
        "method": "POST",
        "path": "/api/v1/try-before-buy/discover",
        "description": "\u00DCr\u00FCn linkinden ad, do\u011Fru fiyat, g\u00F6rsel, marka ve dinamik \u00FCr\u00FCn bilgilerini \u00E7\u0131kar\u0131r.",
        "requiresAuth": true,
        "requestExample": "{\u0022url\u0022:\u0022https://shop.example.com/products/white-shirt\u0022}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022id\u0022:\u0022019e...\u0022,\u0022productName\u0022:\u0022White Shirt\u0022,\u0022priceText\u0022:\u0022899.90 TL\u0022,\u0022imageCandidates\u0022:[\u0022https://...jpg\u0022],\u0022extractedFacts\u0022:{\u0022Kuma\u015F\u0022:\u0022Pamuk\u0022,\u0022Kal\u0131p\u0022:\u0022Regular fit\u0022},\u0022status\u0022:\u0022Discovered\u0022},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022Bu linkten yeterince g\u00FCvenilir \u00FCr\u00FCn bilgisi \u00E7\u0131karamad\u0131m.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "POST",
        "path": "/api/v1/try-before-buy/analyses/{analysisId}/compatibility",
        "description": "Ke\u015Ffedilen \u00FCr\u00FCn\u00FC kullan\u0131c\u0131n\u0131n gard\u0131robuyla e\u015Fle\u015Ftirir ve 3 fikir d\u00F6nd\u00FCr\u00FCr.",
        "requiresAuth": true,
        "requestExample": "{\u0022occasion\u0022:\u0022casual\u0022,\u0022temperatureCelsius\u0022:20}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022status\u0022:\u0022CompatibilityReady\u0022,\u0022compatibilityScore\u0022:90,\u0022outfitIdeas\u0022:[{\u0022title\u0022:\u0022White Shirt i\u00E7in 2 par\u00E7al\u0131 fikir\u0022,\u0022score\u0022:91,\u0022clothingItemIds\u0022:[\u0022019e...\u0022]}]},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022Dolap uyumu i\u00E7in metadata profili haz\u0131r en az iki k\u0131yafet gerekli.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "GET",
        "path": "/api/v1/try-before-buy/analyses",
        "description": "Son Dene-Al analizlerini listeler.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:[{\u0022id\u0022:\u0022019e...\u0022,\u0022productName\u0022:\u0022White Shirt\u0022,\u0022status\u0022:\u0022CompatibilityReady\u0022}],\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      }
    ]
  },
  {
    "title": "Activities",
    "description": "Profil hareket ge\u00E7mi\u015Fi ve ileride \u00F6neri modelini besleyecek kullan\u0131c\u0131 davran\u0131\u015F eventleri.",
    "endpoints": [
      {
        "method": "GET",
        "path": "/api/v1/activities/recent",
        "description": "Son 50 kullan\u0131c\u0131 activity eventini listeler.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:[{\u0022eventType\u0022:\u0022clothing.worn\u0022,\u0022subjectType\u0022:\u0022clothing_item\u0022,\u0022metadata\u0022:{\u0022wearCount\u0022:\u00221\u0022}}],\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      }
    ]
  },
  {
    "title": "Analytics",
    "description": "Mobil profil ve stil trendleri icin kullaniciya ozel gardirop/aktivite ozeti.",
    "endpoints": [
      {
        "method": "GET",
        "path": "/api/v1/me/analytics",
        "description": "Kullanicinin gardirop sayilarini, giyilme istatistiklerini, favorileri, top renk/kategori dagilimini ve son aktivitelerini dondurur.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022wardrobeItemCount\u0022:12,\u0022favoriteItemCount\u0022:3,\u0022wornItemCount\u0022:5,\u0022totalWearCount\u0022:9,\u0022topColors\u0022:[{\u0022name\u0022:\u0022black\u0022,\u0022count\u0022:4}],\u0022recentActivities\u0022:[]},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      }
    ]
  },
  {
    "title": "MVP Completion",
    "description": "Profil, subscription, job progress, event batch, seyahat bavulu ve sosyal MVP endpointleri.",
    "endpoints": [
      {
        "method": "GET",
        "path": "/api/v1/me",
        "description": "Kullanici profilini ve tercihlerini dondurur.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022email\u0022:\u0022demo@example.com\u0022,\u0022displayName\u0022:\u0022Demo\u0022,\u0022subscriptionTier\u0022:\u0022Free\u0022,\u0022preferences\u0022:{\u0022styleTags\u0022:[\u0022minimal\u0022]}},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "PATCH",
        "path": "/api/v1/me/preferences",
        "description": "Onboarding ve ayarlar ekranindan stil, beden, bildirim ve veri izinlerini gunceller.",
        "requiresAuth": true,
        "requestExample": "{\u0022styleTags\u0022:[\u0022minimal\u0022,\u0022classic\u0022],\u0022sizeProfile\u0022:{\u0022top\u0022:\u0022M\u0022},\u0022visibility\u0022:\u0022private\u0022,\u0022notificationSettings\u0022:{\u0022dailyOutfit\u0022:true},\u0022allowsPersonalization\u0022:true,\u0022allowsModelTraining\u0022:false}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022preferences\u0022:{\u0022styleTags\u0022:[\u0022minimal\u0022,\u0022classic\u0022]}},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "GET",
        "path": "/api/v1/jobs/{jobId}",
        "description": "Upload/AI job progress bilgisini status, yuzde, sonuc ve hata detaylariyla okur.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022id\u0022:\u0022019e...\u0022,\u0022status\u0022:\u0022Completed\u0022,\u0022attemptCount\u0022:1,\u0022progressPercentage\u0022:100,\u0022result\u0022:{\u0022extractionProvider\u0022:\u0022gemini\u0022,\u0022productImageStatus\u0022:\u0022created\u0022}},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022Job bulunamadi.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "POST",
        "path": "/api/v1/events/batch",
        "description": "Mobil analitik ve kisisellestirme eventlerini batch olarak kabul eder.",
        "requiresAuth": true,
        "requestExample": "{\u0022events\u0022:[{\u0022eventType\u0022:\u0022screen_view\u0022,\u0022subjectType\u0022:\u0022screen\u0022,\u0022metadata\u0022:{\u0022name\u0022:\u0022home\u0022}}]}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022acceptedCount\u0022:1},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "GET",
        "path": "/api/v1/subscription/plans",
        "description": "Free ve Premium planlarini ve entitlement limitlerini dondurur.",
        "requiresAuth": false,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:[{\u0022code\u0022:\u0022free\u0022,\u0022tier\u0022:\u0022Free\u0022,\u0022entitlements\u0022:[{\u0022featureCode\u0022:\u0022wardrobe.items\u0022,\u0022limitValue\u0022:25}]}],\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "Service unavailable"
      },
      {
        "method": "GET",
        "path": "/api/v1/subscription/me",
        "description": "Kullanicinin paketi ve kullanilmis limitlerini dondurur.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022tier\u0022:\u0022Free\u0022,\u0022usage\u0022:[{\u0022featureCode\u0022:\u0022outfit.daily\u0022,\u0022used\u0022:1,\u0022limitValue\u0022:1}]},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "POST",
        "path": "/api/v1/travel/trips",
        "description": "Seyahat sehir/tarih/amac/bagaj bilgisiyle trip kaydi olusturur.",
        "requiresAuth": true,
        "requestExample": "{\u0022destinationCity\u0022:\u0022Izmir\u0022,\u0022destinationCountry\u0022:\u0022TR\u0022,\u0022startDate\u0022:\u00222026-07-01\u0022,\u0022endDate\u0022:\u00222026-07-04\u0022,\u0022purpose\u0022:\u0022holiday\u0022,\u0022luggageType\u0022:\u0022carry_on\u0022,\u0022laundryAvailable\u0022:false}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022id\u0022:\u0022019e...\u0022,\u0022destinationCity\u0022:\u0022Izmir\u0022},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "POST",
        "path": "/api/v1/travel/trips/{tripId}/packing-plan",
        "description": "Metadata hazir gardiroptan kapsul bavul ve gunluk kombin planlari uretir.",
        "requiresAuth": true,
        "requestExample": "{\u0022temperatureCelsius\u0022:28}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022score\u0022:86,\u0022itemIds\u0022:[\u0022019e...\u0022],\u0022dailyOutfits\u0022:[{\u0022date\u0022:\u00222026-07-01\u0022,\u0022itemIds\u0022:[\u0022019e...\u0022]}]},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022Seyahat bavulu icin en az ust-alt veya elbise ve bir ayakkabi metadata profili gerekli.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "GET",
        "path": "/api/v1/social/feed",
        "description": "Kesfet feedini populerlik, tazelik ve moderasyon durumuyla listeler.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:[{\u0022caption\u0022:\u0022Summer look\u0022,\u0022creatorUsername\u0022:\u0022stil_editor\u0022,\u0022likeCount\u0022:3,\u0022isLikedByMe\u0022:false,\u0022isSavedByMe\u0022:true,\u0022hashtags\u0022:[\u0022summer\u0022]}],\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "GET",
        "path": "/api/v1/social/feed/page?cursor={cursor}\u0026take=24",
        "description": "Cursor tabanli kisilesmis Kesfet feedini rankingVersion, guardrailVersion ve nextCursor ile dondurur.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022items\u0022:[{\u0022caption\u0022:\u0022Summer look\u0022,\u0022creatorUsername\u0022:\u0022stil_editor\u0022}],\u0022nextCursor\u0022:\u0022eyJ...\u0022,\u0022feedSessionId\u0022:\u0022019e...\u0022,\u0022rankingVersion\u0022:\u0022discover-rank-v1\u0022,\u0022guardrailVersion\u0022:\u0022discover-guardrails-v1\u0022},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "GET",
        "path": "/api/v1/social/search?query={query}\u0026take=30",
        "description": "Post, stil etiketi, renk ve creator sinyalleriyle tam ekran Kesfet aramasi yapar.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:[{\u0022id\u0022:\u0022019e...\u0022,\u0022caption\u0022:\u0022Sade ofis gorunumu\u0022,\u0022media\u0022:[{\u0022displayUrl\u0022:\u0022https://cdn/look.webp\u0022,\u0022aspectRatio\u0022:0.8}]}],\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "GET",
        "path": "/api/v1/social/search/suggestions?query={query}",
        "description": "Arama yazilirken creator, stil, renk ve parca onerilerini agirlikli olarak dondurur.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:[{\u0022type\u0022:\u0022style\u0022,\u0022value\u0022:\u0022minimal\u0022,\u0022weight\u0022:8}],\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "GET",
        "path": "/api/v1/social/posts/{postId}",
        "description": "Paylasim detayini postId ile yeniden yukler ve kullanici interaction durumlarini dondurur.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022caption\u0022:\u0022Summer look\u0022,\u0022creatorUsername\u0022:\u0022stil_editor\u0022,\u0022isLikedByMe\u0022:true,\u0022isSavedByMe\u0022:false},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022Payla\u015F\u0131m bulunamad\u0131.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "GET",
        "path": "/api/v1/social/posts/{postId}/related?cursor={cursor}\u0026take=16",
        "description": "Post detayindaki Kesfedilebilecek daha fazla fikir alanini ayri cursor ile yukler.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022items\u0022:[{\u0022caption\u0022:\u0022Benzer fikir\u0022}],\u0022nextCursor\u0022:\u0022eyJ...\u0022,\u0022anchorPostId\u0022:\u0022019e...\u0022,\u0022rankingVersion\u0022:\u0022discover-rank-v1\u0022,\u0022guardrailVersion\u0022:\u0022discover-guardrails-v1\u0022},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022Payla\u015F\u0131m bulunamad\u0131.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "POST",
        "path": "/api/v1/social/posts/media",
        "description": "Paylasim gorselini object storage\u0027a yukler; mobil kullanicidan gorsel URL\u0027si istemez.",
        "requiresAuth": true,
        "requestExample": "multipart/form-data: file",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022imageUrl\u0022:\u0022http://localhost:9000/aistylist-media/social/...jpg\u0022,\u0022storageKey\u0022:\u0022social/...jpg\u0022},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022Sadece JPG, PNG veya WEBP gorsel yukleyebilirsin.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "POST",
        "path": "/api/v1/social/posts/drafts",
        "description": "Bir ile alti yuklenmis medyadan idempotent post taslagi olusturur; henuz public feed\u0027e girmez.",
        "requiresAuth": true,
        "requestExample": "{\u0022caption\u0022:\u0022Bugunun dengeli gorunumu.\u0022,\u0022visibility\u0022:\u0022public\u0022,\u0022commentsPolicy\u0022:\u0022everyone\u0022,\u0022clientRequestId\u0022:\u0022mobile-019e...\u0022,\u0022media\u0022:[{\u0022storageKey\u0022:\u0022social/...webp\u0022,\u0022displayUrl\u0022:\u0022https://cdn/...webp\u0022,\u0022thumbnailUrl\u0022:\u0022https://cdn/...webp\u0022,\u0022width\u0022:1200,\u0022height\u0022:1500,\u0022contentHash\u0022:\u0022abc...\u0022,\u0022sortOrder\u0022:0}]}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022id\u0022:\u0022019e...\u0022,\u0022status\u0022:\u0022draft\u0022,\u0022visibility\u0022:\u0022public\u0022,\u0022media\u0022:[{\u0022sortOrder\u0022:0,\u0022aspectRatio\u0022:0.8}]},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022Paylasim icin 1 ile 6 medya gerekli.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "PATCH",
        "path": "/api/v1/social/posts/drafts/{postId}",
        "description": "Sahibine ait draft postun aciklama, gorunurluk ve yorum politikasini gunceller.",
        "requiresAuth": true,
        "requestExample": "{\u0022caption\u0022:\u0022Yeni aciklama\u0022,\u0022visibility\u0022:\u0022public\u0022,\u0022commentsPolicy\u0022:\u0022everyone\u0022}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022id\u0022:\u0022019e...\u0022,\u0022status\u0022:\u0022draft\u0022,\u0022caption\u0022:\u0022Yeni aciklama\u0022},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022Yalniz taslak paylasim guncellenebilir.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "POST",
        "path": "/api/v1/social/posts/drafts/{postId}/publish",
        "description": "Draft postu processing durumuna tasir ve icerik zekasi worker jobunu kuyruga yazar.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "202 Accepted: {\u0022success\u0022:true,\u0022data\u0022:{\u0022postId\u0022:\u0022019e...\u0022,\u0022jobId\u0022:\u0022019e...\u0022,\u0022status\u0022:\u0022processing\u0022},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022Paylasim bulunamadi.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "GET",
        "path": "/api/v1/social/posts/{postId}/processing",
        "description": "Post analiz, moderasyon ve yayin durumunu polling icin dondurur.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022postId\u0022:\u0022019e...\u0022,\u0022status\u0022:\u0022published\u0022,\u0022moderationStatus\u0022:\u0022approved\u0022,\u0022analysisVersion\u0022:\u0022social-profile-v2\u0022,\u0022publishedAt\u0022:\u00222026-07-17T16:00:00Z\u0022},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022Paylasim bulunamadi.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "POST",
        "path": "/api/v1/social/posts",
        "description": "Yuklenen gorsel URL\u0027si ve aciklamayla sosyal paylasim olusturur.",
        "requiresAuth": true,
        "requestExample": "{\u0022caption\u0022:\u0022Bugunun sade kombini.\u0022,\u0022imageUrl\u0022:\u0022http://localhost:9000/aistylist-media/social/...jpg\u0022,\u0022hashtags\u0022:[\u0022minimal\u0022]}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022id\u0022:\u0022019e...\u0022,\u0022caption\u0022:\u0022Bugunun sade kombini.\u0022,\u0022isLikedByMe\u0022:false,\u0022isSavedByMe\u0022:false},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022Gorsel zorunlu.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "POST",
        "path": "/api/v1/social/posts/{postId}/hide",
        "description": "Paylasimi kullanicinin feedinden idempotent olarak gizler ve ranking negatif sinyali uretir.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022id\u0022:\u0022019e...\u0022,\u0022caption\u0022:\u0022Summer look\u0022},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022Payla\u015F\u0131m bulunamad\u0131.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "POST",
        "path": "/api/v1/social/events/batch",
        "description": "Sosyal impression/dwell/detail/like/save/hide/report eventlerini clientEventId ve exposureId ile idempotent olarak alir.",
        "requiresAuth": true,
        "requestExample": "{\u0022events\u0022:[{\u0022clientEventId\u0022:\u0022evt-1\u0022,\u0022exposureId\u0022:\u0022exp-1\u0022,\u0022eventType\u0022:\u0022social_impression\u0022,\u0022subjectType\u0022:\u0022post\u0022,\u0022subjectId\u0022:\u0022019e...\u0022,\u0022feedSessionId\u0022:\u0022019e...\u0022,\u0022shownRank\u0022:1}]}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022acceptedCount\u0022:1,\u0022duplicateCount\u0022:0},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022clientEventId bo\u015F olamaz.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "GET",
        "path": "/api/v1/social/style-decks?take=18",
        "description": "Public like uretmeden kullanicinin stil hafizasini netlestiren karar destesini dondurur.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022deckSessionId\u0022:\u0022019e...\u0022,\u0022items\u0022:[{\u0022id\u0022:\u0022019e...\u0022,\u0022caption\u0022:\u0022Katmanli gorunum\u0022}]},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "POST",
        "path": "/api/v1/social/style-decks/{postId}/decision",
        "description": "more_like_this, less_like_this, remember veya skip kararini idempotent stil sinyali olarak kaydeder.",
        "requiresAuth": true,
        "requestExample": "{\u0022action\u0022:\u0022more_like_this\u0022,\u0022clientEventId\u0022:\u0022decision-019e...\u0022,\u0022deckSessionId\u0022:\u0022019e...\u0022}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022postId\u0022:\u0022019e...\u0022,\u0022action\u0022:\u0022more_like_this\u0022},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022Stil karari gecersiz.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "POST",
        "path": "/api/v1/social/users/{blockedUserId}/block",
        "description": "Creator\u0027i butun feed, arama ve related retrieval yollarindan kaldirir.",
        "requiresAuth": true,
        "requestExample": "{\u0022reason\u0022:\u0022not_relevant\u0022}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:true,\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022Kendini engelleyemezsin.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "GET",
        "path": "/api/v1/social/posts/{postId}/comments",
        "description": "Paylasim yorumlarini onayli ve silinmemis kayitlarla listeler.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:[{\u0022creatorUsername\u0022:\u0022stil_editor\u0022,\u0022text\u0022:\u0022Bu oran gercekten temiz duruyor.\u0022,\u0022parentCommentId\u0022:null}],\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "POST",
        "path": "/api/v1/social/posts/{postId}/comments",
        "description": "Paylasima yorum veya ayni paylasima ait yoruma yanit ekler.",
        "requiresAuth": true,
        "requestExample": "{\u0022text\u0022:\u0022Ben bunu ince kemerle de denerdim.\u0022,\u0022parentCommentId\u0022:null}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022text\u0022:\u0022Ben bunu ince kemerle de denerdim.\u0022},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022Yorum bos olamaz.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "POST",
        "path": "/api/v1/social/polls",
        "description": "Free icin 2, Premium icin 4 secenege kadar anket olusturur.",
        "requiresAuth": true,
        "requestExample": "{\u0022question\u0022:\u0022Hangisi daha iyi?\u0022,\u0022options\u0022:[{\u0022title\u0022:\u0022A\u0022},{\u0022title\u0022:\u0022B\u0022}]}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022question\u0022:\u0022Hangisi daha iyi?\u0022,\u0022options\u0022:[{\u0022voteCount\u0022:0}]},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022Bu kadar anket secenegi icin Premium gerekli.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "POST",
        "path": "/api/v1/social/polls/{pollId}/vote",
        "description": "Ankete oy verir; kullanici tekrar oy verirse oyunu yeni secenege tasir.",
        "requiresAuth": true,
        "requestExample": "{\u0022optionId\u0022:\u0022019e...\u0022}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022id\u0022:\u0022019e...\u0022,\u0022creatorUsername\u0022:\u0022stil_editor\u0022,\u0022options\u0022:[{\u0022id\u0022:\u0022019e...\u0022,\u0022voteCount\u0022:4,\u0022isVotedByMe\u0022:true}]},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022Anket secenegi bulunamadi.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      }
    ]
  },
  {
    "title": "Fashly Foundation",
    "description": "Yeni Fashly tasarimi icin app config, onboarding, Stil Studyosu, Virtual Try-On, image based Dene-Al ve Tracker endpointleri.",
    "endpoints": [
      {
        "method": "GET",
        "path": "/api/v1/app/config",
        "description": "Mobilin splash/auth/onboarding gorsel asset anahtarlarini, feature flagleri ve premium kurallarini okur.",
        "requiresAuth": false,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022appName\u0022:\u0022Fashly\u0022,\u0022designSystemVersion\u0022:\u0022fashly-minimal-v1\u0022,\u0022visualAssets\u0022:[{\u0022key\u0022:\u0022splash.hero\u0022,\u0022assetPath\u0022:\u0022assets/images/onboarding/splash_hero.png\u0022}],\u0022featureFlags\u0022:{\u0022onboarding.enabled\u0022:true}},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "Service unavailable"
      },
      {
        "method": "GET",
        "path": "/api/v1/onboarding/me",
        "description": "Kullanicinin onboarding profilini okur; yoksa draft profil olusturur.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022displayName\u0022:\u0022Ba\u011F\u0131\u015F\u0022,\u0022ageRange\u0022:\u002223-27\u0022,\u0022styleGoals\u0022:[\u0022dolabimi_daha_iyi_kullanmak\u0022],\u0022completionStatus\u0022:\u0022draft\u0022},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "PUT",
        "path": "/api/v1/onboarding/me",
        "description": "Onboarding cevaplarini draft olarak kaydeder.",
        "requiresAuth": true,
        "requestExample": "{\u0022displayName\u0022:\u0022Ba\u011F\u0131\u015F\u0022,\u0022ageRange\u0022:\u002223-27\u0022,\u0022city\u0022:\u0022Istanbul\u0022,\u0022country\u0022:\u0022TR\u0022,\u0022styleGoals\u0022:[\u0022new_outfits\u0022],\u0022styleProblems\u0022:[\u0022same_outfits\u0022],\u0022sustainabilityLevel\u0022:\u0022mindful\u0022,\u0022bodyFitPreference\u0022:{\u0022fit\u0022:\u0022regular\u0022},\u0022preferredStyles\u0022:[\u0022minimal\u0022,\u0022streetwear\u0022]}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022completionStatus\u0022:\u0022draft\u0022,\u0022preferredStyles\u0022:[\u0022minimal\u0022,\u0022streetwear\u0022]},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "POST",
        "path": "/api/v1/onboarding/complete",
        "description": "Onboarding\u0027i tamamlar, profil/preference alanlarini senkronlar.",
        "requiresAuth": true,
        "requestExample": "{\u0022summaryOverrides\u0022:{\u0022source\u0022:\u0022first_run\u0022}}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022completionStatus\u0022:\u0022completed\u0022,\u0022completedAt\u0022:\u00222026-07-09T04:00:00Z\u0022},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022Kullan\u0131c\u0131 bulunamad\u0131.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "GET",
        "path": "/api/v1/studio/outfits",
        "description": "Kullanicinin kaydedilmis Create Outfit koleksiyonlarini listeler.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:[{\u0022id\u0022:\u0022019e...\u0022,\u0022name\u0022:\u0022Hafta sonu kombini\u0022,\u0022items\u0022:[{\u0022clothingItemId\u0022:\u0022019e...\u0022,\u0022slot\u0022:\u0022top\u0022}]}],\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "POST",
        "path": "/api/v1/studio/outfits",
        "description": "Premium Create Outfit canvas kombinini kaydeder; yalniz kullanicinin kendi gardirobundaki parcalar kabul edilir.",
        "requiresAuth": true,
        "requestExample": "{\u0022name\u0022:\u0022Hafta sonu\u0022,\u0022styleIntent\u0022:\u0022casual\u0022,\u0022items\u0022:[{\u0022clothingItemId\u0022:\u0022019e...\u0022,\u0022slot\u0022:\u0022top\u0022,\u0022sortOrder\u0022:1}],\u0022canvasLayout\u0022:{\u0022mode\u0022:\u0022flatlay\u0022},\u0022visibility\u0022:\u0022private\u0022}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022name\u0022:\u0022Hafta sonu\u0022,\u0022styleIntent\u0022:\u0022casual\u0022},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022Bu paketteki kullan\u0131m limitine ula\u015Ft\u0131n. Devam etmek i\u00E7in Premium gerekli.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "POST",
        "path": "/api/v1/studio/outfits/{collectionId}/style-with-ai",
        "description": "Kayitli kombin icin AI styling notlari uretir; provider yoksa deterministik guvenli not doner.",
        "requiresAuth": true,
        "requestExample": "{\u0022intent\u0022:\u0022smart\u0022}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022aiStylingNotes\u0022:[\u0022Kombin temel slotlar a\u00E7\u0131s\u0131ndan dengeli g\u00F6r\u00FCn\u00FCyor.\u0022]},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022Kombin koleksiyonu bulunamad\u0131.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "POST",
        "path": "/api/v1/studio/virtual-try-on/jobs",
        "description": "Virtual Try-On job kaydi olusturur; provider bagli degilse kontrollu failed status doner.",
        "requiresAuth": true,
        "requestExample": "{\u0022personImageUrl\u0022:\u0022https://cdn/person.jpg\u0022,\u0022garmentImageUrl\u0022:\u0022https://cdn/item.jpg\u0022,\u0022clothingItemIds\u0022:[\u0022019e...\u0022],\u0022mode\u0022:\u0022wardrobe\u0022,\u0022options\u0022:{\u0022quality\u0022:\u0022preview\u0022}}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022id\u0022:\u0022019e...\u0022,\u0022status\u0022:\u0022failed\u0022,\u0022error\u0022:\u0022virtual_try_on_provider_not_configured\u0022},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022Virtual Try-On i\u00E7in ki\u015Fi foto\u011Fraf\u0131 gerekli.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "GET",
        "path": "/api/v1/tracker/summary",
        "description": "Sustainability Tracker ozetini, unutulan/aktif parcalari ve son aktiviteleri dondurur.",
        "requiresAuth": true,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022totalPoints\u0022:42,\u0022forgottenItemCount\u0022:3,\u0022activeItems\u0022:[{\u0022name\u0022:\u0022Siyah ti\u015F\u00F6rt\u0022,\u0022actionLabel\u0022:\u0022Alternatif Dene\u0022}]},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "POST",
        "path": "/api/v1/try-before-buy/image-analyses",
        "description": "URL yerine kullanicinin yukledigi urun gorseli/screenshot icin Dene-Al analizi olusturur.",
        "requiresAuth": true,
        "requestExample": "{\u0022imageUrl\u0022:\u0022https://cdn/product.jpg\u0022,\u0022productName\u0022:\u0022Siyah blazer\u0022,\u0022metadata\u0022:{\u0022color\u0022:\u0022black\u0022,\u0022category\u0022:\u0022outerwear\u0022}}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022status\u0022:\u0022created\u0022,\u0022productName\u0022:\u0022Siyah blazer\u0022},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022\u00DCr\u00FCn g\u00F6rseli zorunlu.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      },
      {
        "method": "POST",
        "path": "/api/v1/try-before-buy/image-analyses/{analysisId}/compatibility",
        "description": "Gorsel urun analizini kullanicinin gardirobuyla eslestirir.",
        "requiresAuth": true,
        "requestExample": "{\u0022occasion\u0022:\u0022daily\u0022,\u0022temperatureCelsius\u0022:22}",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022status\u0022:\u0022compatibility_ready\u0022,\u0022compatibilityScore\u0022:78},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "{\u0022success\u0022:false,\u0022data\u0022:null,\u0022message\u0022:\u0022Dolap uyumu i\u00E7in metadata profili haz\u0131r en az birka\u00E7 par\u00E7a gerekiyor.\u0022,\u0022traceId\u0022:\u00220HNM...\u0022}"
      }
    ]
  },
  {
    "title": "Admin",
    "description": "Admin paneli ve operasyon ekibi icin API sagligi, job, aktivite ve audit gorunumu.",
    "endpoints": [
      {
        "method": "GET",
        "path": "/api/v1/admin/overview",
        "description": "Sistem geneli kullanici, premium, gardirop, kombin, Dene-Al, activity ve AI job sayilarini dondurur.",
        "requiresAuth": false,
        "requestExample": "Header: X-Admin-Key: development-admin-key-change-me",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022userCount\u0022:120,\u0022premiumUserCount\u0022:18,\u0022wardrobeItemCount\u0022:2400,\u0022aiJobsByStatus\u0022:[{\u0022name\u0022:\u0022Completed\u0022,\u0022count\u0022:900}]},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "GET",
        "path": "/api/v1/admin/ai-jobs/recent?take=50",
        "description": "Son AI job kayitlarini status, hata ve zaman bilgileriyle listeler.",
        "requiresAuth": false,
        "requestExample": "Header: X-Admin-Key: development-admin-key-change-me",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:[{\u0022id\u0022:\u0022019e...\u0022,\u0022jobType\u0022:\u0022clothing.metadata_extraction\u0022,\u0022status\u0022:\u0022Completed\u0022,\u0022attemptCount\u0022:1}],\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "GET",
        "path": "/api/v1/admin/activities/recent?take=50",
        "description": "Tum kullanicilar icin son activity eventlerini operasyon gorunumu olarak listeler.",
        "requiresAuth": false,
        "requestExample": "Header: X-Admin-Key: development-admin-key-change-me",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:[{\u0022eventType\u0022:\u0022clothing.worn\u0022,\u0022subjectType\u0022:\u0022clothing_item\u0022,\u0022occurredAt\u0022:\u00222026-06-04T12:00:00Z\u0022}],\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      },
      {
        "method": "GET",
        "path": "/api/v1/admin/audit-logs/recent?take=50",
        "description": "Admin endpoint erisim audit kayitlarini listeler.",
        "requiresAuth": false,
        "requestExample": "Header: X-Admin-Key: development-admin-key-change-me",
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:[{\u0022actor\u0022:\u0022admin-api-key\u0022,\u0022action\u0022:\u0022admin.overview.read\u0022,\u0022metadata\u0022:{\u0022path\u0022:\u0022/api/v1/admin/overview\u0022}}],\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "401 Unauthorized"
      }
    ]
  },
  {
    "title": "System",
    "description": "Sa\u011Fl\u0131k ve sistem bilgisi endpointleri.",
    "endpoints": [
      {
        "method": "GET",
        "path": "/health",
        "description": "Container health check endpointi.",
        "requiresAuth": false,
        "requestExample": null,
        "successExample": "Healthy",
        "failureExample": "Service unavailable"
      },
      {
        "method": "GET",
        "path": "/api/v1/system/info",
        "description": "API ad\u0131, s\u00FCr\u00FCm ve environment bilgisini d\u00F6ner.",
        "requiresAuth": false,
        "requestExample": null,
        "successExample": "{\u0022success\u0022:true,\u0022data\u0022:{\u0022serviceName\u0022:\u0022AIStylist.Api\u0022,\u0022version\u0022:\u00220.1.0\u0022,\u0022environment\u0022:\u0022Development\u0022},\u0022message\u0022:\u0022OK\u0022,\u0022traceId\u0022:null}",
        "failureExample": "Service unavailable"
      }
    ]
  }
]