{"openapi":"3.0.0","paths":{"/api/v1/auth/register":{"post":{"operationId":"AuthController_register_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterDto"}}}},"responses":{"201":{"description":"User successfully registered"},"409":{"description":"Email already in use"},"429":{"description":"Too many requests"}},"summary":"Register a new user","tags":["auth"]}},"/api/v1/auth/login":{"post":{"operationId":"AuthController_login_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginDto"}}}},"responses":{"200":{"description":"User successfully logged in"},"401":{"description":"Invalid credentials"},"429":{"description":"Too many requests"}},"summary":"Login user","tags":["auth"]}},"/api/v1/auth/google":{"get":{"operationId":"AuthController_googleAuth_v1","parameters":[],"responses":{"200":{"description":""}},"summary":"Google OAuth login","tags":["auth"]}},"/api/v1/auth/google/callback":{"get":{"operationId":"AuthController_googleAuthRedirect_v1","parameters":[],"responses":{"200":{"description":""}},"summary":"Google OAuth callback","tags":["auth"]}},"/api/v1/auth/verify-email":{"post":{"operationId":"AuthController_verifyEmail_v1","parameters":[],"responses":{"200":{"description":"Email verified successfully"},"401":{"description":"Invalid or expired token"}},"summary":"Verify email with token","tags":["auth"]}},"/api/v1/auth/resend-verification":{"post":{"operationId":"AuthController_resendVerification_v1","parameters":[],"responses":{"200":{"description":"Verification email sent"},"409":{"description":"User not found or already verified"},"429":{"description":"Too many requests"}},"summary":"Resend verification email","tags":["auth"]}},"/api/v1/auth/forgot-password":{"post":{"operationId":"AuthController_forgotPassword_v1","parameters":[],"responses":{"200":{"description":"Password reset email sent if user exists"},"429":{"description":"Too many requests"}},"summary":"Request password reset","tags":["auth"]}},"/api/v1/auth/reset-password":{"post":{"operationId":"AuthController_resetPassword_v1","parameters":[],"responses":{"200":{"description":"Password reset successfully"},"401":{"description":"Invalid or expired token"}},"summary":"Reset password with token","tags":["auth"]}},"/api/v1/email-templates":{"get":{"operationId":"EmailController_findAll_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Email"]},"post":{"operationId":"EmailController_create_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTemplateDto"}}}},"responses":{"201":{"description":""}},"tags":["Email"]}},"/api/v1/email-templates/{id}":{"get":{"operationId":"EmailController_findOne_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Email"]},"put":{"operationId":"EmailController_update_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTemplateDto"}}}},"responses":{"200":{"description":""}},"tags":["Email"]},"delete":{"operationId":"EmailController_remove_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Email"]}},"/api/v1/email-templates/initialize-defaults":{"post":{"operationId":"EmailController_initializeDefaults_v1","parameters":[],"responses":{"201":{"description":""}},"tags":["Email"]}},"/api/v1/email-templates/test-send":{"post":{"operationId":"EmailController_testSend_v1","parameters":[],"responses":{"201":{"description":""}},"tags":["Email"]}},"/api/v1/settings":{"get":{"operationId":"SettingsController_findAll_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Settings"]}},"/api/v1/settings/category/{category}":{"get":{"operationId":"SettingsController_findByCategory_v1","parameters":[{"name":"category","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Settings"]}},"/api/v1/settings/footer":{"get":{"operationId":"SettingsController_getFooter_v1","parameters":[{"name":"lang","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Settings"]},"put":{"operationId":"SettingsController_updateFooter_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Settings"]}},"/api/v1/settings/{key}":{"get":{"operationId":"SettingsController_findOne_v1","parameters":[{"name":"key","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Settings"]},"patch":{"operationId":"SettingsController_update_v1","parameters":[{"name":"key","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSettingDto"}}}},"responses":{"200":{"description":""}},"tags":["Settings"]}},"/api/v1/settings/initialize":{"post":{"operationId":"SettingsController_initializeDefaults_v1","parameters":[],"responses":{"201":{"description":""}},"tags":["Settings"]}},"/api/v1/settings/email/test":{"post":{"operationId":"SettingsController_testEmail_v1","parameters":[],"responses":{"201":{"description":""}},"tags":["Settings"]}},"/api/v1/settings/email/test-connection":{"post":{"operationId":"SettingsController_testEmailConnection_v1","parameters":[],"responses":{"201":{"description":""}},"tags":["Settings"]}},"/api/v1/properties":{"post":{"operationId":"PropertiesController_create_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePropertyDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Create a new property","tags":["properties"]},"get":{"operationId":"PropertiesController_findAll_v1","parameters":[{"name":"page","required":false,"in":"query","description":"Page number","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"default":20,"type":"number"}},{"name":"search","required":false,"in":"query","description":"Search query","schema":{"type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Category ID","schema":{"type":"number"}},{"name":"subCategoryId","required":false,"in":"query","description":"Subcategory ID","schema":{"type":"number"}},{"name":"listingType","required":false,"in":"query","description":"Listing type","schema":{"type":"string","enum":["sale","rent","daily_rent","project"]}},{"name":"status","required":false,"in":"query","description":"Status","schema":{"type":"string","enum":["pending","approved","rejected","sold","rented"]}},{"name":"city","required":false,"in":"query","description":"City","schema":{"type":"string"}},{"name":"district","required":false,"in":"query","description":"District (single)","schema":{"type":"string"}},{"name":"districts","required":false,"in":"query","description":"Districts (comma-separated)","schema":{"type":"string"}},{"name":"minPrice","required":false,"in":"query","description":"Minimum price","schema":{"type":"number"}},{"name":"maxPrice","required":false,"in":"query","description":"Maximum price","schema":{"type":"number"}},{"name":"minBedrooms","required":false,"in":"query","description":"Minimum bedrooms","schema":{"type":"number"}},{"name":"minBathrooms","required":false,"in":"query","description":"Minimum bathrooms","schema":{"type":"number"}},{"name":"minArea","required":false,"in":"query","description":"Minimum area (m²)","schema":{"type":"number"}},{"name":"maxArea","required":false,"in":"query","description":"Maximum area (m²)","schema":{"type":"number"}},{"name":"featured","required":false,"in":"query","description":"Featured only","schema":{"default":false,"type":"boolean"}},{"name":"agentId","required":false,"in":"query","description":"Agent ID","schema":{"type":"number"}},{"name":"excludeId","required":false,"in":"query","description":"Exclude a specific property ID from results (used for similar listings)","schema":{"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Sort by field","schema":{"default":"createdAt","type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Sort order","schema":{"default":"DESC","type":"string","enum":["ASC","DESC"]}}],"responses":{"200":{"description":""}},"summary":"Get all properties with filters","tags":["properties"]}},"/api/v1/properties/featured":{"get":{"operationId":"PropertiesController_getFeatured_v1","parameters":[{"name":"limit","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"summary":"Get featured properties","tags":["properties"]}},"/api/v1/properties/suggestions":{"get":{"operationId":"PropertiesController_getSuggestions_v1","parameters":[],"responses":{"200":{"description":""}},"summary":"Boş sonuç ekranı için yakın bölge / geniş fiyat / benzer ilan","tags":["properties"]}},"/api/v1/properties/filters/options":{"get":{"operationId":"PropertiesController_getFilterOptions_v1","parameters":[],"responses":{"200":{"description":""}},"summary":"Get all available filter options","tags":["properties"]}},"/api/v1/properties/my-properties":{"get":{"operationId":"PropertiesController_getMyProperties_v1","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get current user properties (legacy, returns flat array)","tags":["properties"]}},"/api/v1/properties/my-properties/manage":{"get":{"operationId":"PropertiesController_getMyPropertiesManaged_v1","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Paginated + filtered my-properties for management dashboard","tags":["properties"]}},"/api/v1/properties/my-properties/ids":{"get":{"operationId":"PropertiesController_getMyPropertyIds_v1","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Filtreye uyan tüm ilan ID'leri (çapraz sayfa toplu seçim için)","tags":["properties"]}},"/api/v1/properties/analyze-seo":{"post":{"operationId":"PropertiesController_analyzeSeo_v1","parameters":[],"responses":{"201":{"description":""}},"summary":"Analyze SEO score for property data","tags":["properties"]}},"/api/v1/properties/check-price":{"post":{"operationId":"PropertiesController_checkPrice_v1","parameters":[],"responses":{"201":{"description":""}},"summary":"Fiyatın makul olup olmadığını kontrol eder (form uyarısı için)","tags":["properties"]}},"/api/v1/properties/bulk-refresh":{"post":{"operationId":"PropertiesController_bulkRefresh_v1","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Bulk refresh updatedAt timestamp for owned properties","tags":["properties"]}},"/api/v1/properties/bulk-activate":{"post":{"operationId":"PropertiesController_bulkActivate_v1","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Bulk activate owned properties","tags":["properties"]}},"/api/v1/properties/bulk-deactivate":{"post":{"operationId":"PropertiesController_bulkDeactivate_v1","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Bulk deactivate owned properties","tags":["properties"]}},"/api/v1/properties/bulk-delete":{"post":{"operationId":"PropertiesController_bulkDelete_v1","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Bulk delete owned properties","tags":["properties"]}},"/api/v1/properties/bulk-update-category":{"post":{"operationId":"PropertiesController_bulkUpdateCategory_v1","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Bulk update category for owned properties","tags":["properties"]}},"/api/v1/properties/{id}/translate":{"post":{"operationId":"PropertiesController_translateMissing_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Translate missing languages for a property","tags":["properties"]}},"/api/v1/properties/{slugOrId}":{"get":{"operationId":"PropertiesController_findOne_v1","parameters":[{"name":"slugOrId","required":true,"in":"path","schema":{"type":"string"}},{"name":"locale","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Get property by slug or ID","tags":["properties"]}},"/api/v1/properties/{id}":{"patch":{"operationId":"PropertiesController_update_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePropertyDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Update property","tags":["properties"]},"delete":{"operationId":"PropertiesController_remove_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Delete property","tags":["properties"]}},"/api/v1/properties/{id}/boost":{"post":{"operationId":"PropertiesController_toggleBoost_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Toggle property boost status","tags":["properties"]}},"/api/v1/properties/{id}/track-view":{"post":{"operationId":"PropertiesController_trackCardView_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"summary":"Track a card/carousel interaction view","tags":["properties"]}},"/api/v1/moderation/queue":{"get":{"operationId":"ModerationController_getPendingQueue_v1","parameters":[{"name":"limit","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get pending moderation queue (Admin only)","tags":["moderation"]}},"/api/v1/moderation/review/{id}":{"post":{"operationId":"ModerationController_reviewContent_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewContentDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Review content (Admin only)","tags":["moderation"]}},"/api/v1/moderation/stats":{"get":{"operationId":"ModerationController_getStats_v1","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get moderation statistics (Admin only)","tags":["moderation"]}},"/api/v1/moderation/report":{"post":{"operationId":"ModerationController_reportContent_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportContentDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Report content","tags":["moderation"]}},"/api/v1/moderation/reports":{"get":{"operationId":"ModerationController_getReports_v1","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get all reports (Admin only)","tags":["moderation"]}},"/api/v1/moderation/reports/{id}/review":{"post":{"operationId":"ModerationController_reviewReport_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Review a report (Admin only)","tags":["moderation"]}},"/api/v1/ai/generate-description":{"post":{"operationId":"AiController_generateDescription_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateDescriptionDto"}}}},"responses":{"200":{"description":"Description generated successfully"},"400":{"description":"Bad request"}},"summary":"Generate property description using AI","tags":["AI"]}},"/api/v1/ai/generate-title":{"post":{"operationId":"AiController_generateTitle_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateTitleDto"}}}},"responses":{"200":{"description":"Title generated successfully"},"400":{"description":"Bad request"}},"summary":"Generate property title using AI","tags":["AI"]}},"/api/v1/ai/estimate-price":{"post":{"operationId":"AiController_estimatePrice_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EstimatePriceDto"}}}},"responses":{"200":{"description":"Price estimated successfully"},"400":{"description":"Bad request"}},"summary":"Estimate property price using AI","tags":["AI"]}},"/api/v1/ai/translate":{"post":{"operationId":"AiController_translateText_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranslateTextDto"}}}},"responses":{"200":{"description":"Text translated successfully"},"400":{"description":"Bad request"}},"summary":"Translate text using AI","tags":["AI"]}},"/api/v1/ai/generate-instagram-caption":{"post":{"operationId":"AiController_generateInstagramCaption_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateInstagramCaptionDto"}}}},"responses":{"200":{"description":"Caption generated successfully"},"400":{"description":"Bad request"}},"summary":"Generate Instagram caption and hashtags for property","tags":["AI"]}},"/api/v1/favorites":{"get":{"operationId":"FavoritesController_getUserFavorites_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Favorites"]}},"/api/v1/favorites/{propertyId}":{"post":{"operationId":"FavoritesController_addToFavorites_v1","parameters":[{"name":"propertyId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"tags":["Favorites"]},"delete":{"operationId":"FavoritesController_removeFromFavorites_v1","parameters":[{"name":"propertyId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"tags":["Favorites"]}},"/api/v1/favorites/check/{propertyId}":{"get":{"operationId":"FavoritesController_checkFavorite_v1","parameters":[{"name":"propertyId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Favorites"]}},"/api/v1/favorites/count":{"get":{"operationId":"FavoritesController_getFavoriteCount_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Favorites"]}},"/api/v1/upload":{"post":{"operationId":"UploadController_upload_v1","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Upload file (avatar, logo, cover image) - NO watermark","tags":["Upload"]}},"/api/v1/upload/image":{"post":{"operationId":"UploadController_uploadImage_v1","parameters":[],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"},"folder":{"type":"string","default":"ilancik"},"imageType":{"type":"string","enum":["property","logo","avatar","cover","other"],"default":"other","description":"Type of image - only \"property\" gets watermark"}}}}}},"responses":{"200":{"description":"Image uploaded successfully"},"400":{"description":"Bad request"}},"security":[{"bearer":[]}],"summary":"Upload single image to Cloudinary with conditional watermark","tags":["Upload"]},"delete":{"operationId":"UploadController_deleteImage_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"publicId":{"type":"string","description":"Cloudinary public ID"}}}}}},"responses":{"200":{"description":"Image deleted successfully"},"400":{"description":"Bad request"}},"security":[{"bearer":[]}],"summary":"Delete image from Cloudinary","tags":["Upload"]}},"/api/v1/upload/images":{"post":{"operationId":"UploadController_uploadImages_v1","parameters":[],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"files":{"type":"array","items":{"type":"string","format":"binary"}},"folder":{"type":"string","default":"ilancik"},"imageType":{"type":"string","enum":["property","logo","avatar","cover","other"],"default":"property","description":"Type of images - only \"property\" gets watermark"}}}}}},"responses":{"200":{"description":"Images uploaded successfully"},"400":{"description":"Bad request"}},"security":[{"bearer":[]}],"summary":"Upload multiple images to Cloudinary with conditional watermark","tags":["Upload"]},"delete":{"operationId":"UploadController_deleteImages_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"publicIds":{"type":"array","items":{"type":"string"},"description":"Array of Cloudinary public IDs"}}}}}},"responses":{"200":{"description":"Images deleted successfully"},"400":{"description":"Bad request"}},"security":[{"bearer":[]}],"summary":"Delete multiple images from Cloudinary","tags":["Upload"]}},"/api/v1/upload/video":{"post":{"operationId":"UploadController_uploadVideo_v1","parameters":[],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"},"folder":{"type":"string","default":"ilancik/videos"}}}}}},"responses":{"200":{"description":"Video uploaded successfully"},"400":{"description":"Bad request - File too large or invalid format"}},"security":[{"bearer":[]}],"summary":"Upload video to Cloudinary (max 50MB)","tags":["Upload"]},"delete":{"operationId":"UploadController_deleteVideo_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"publicId":{"type":"string","description":"Cloudinary public ID of the video"}}}}}},"responses":{"200":{"description":"Video deleted successfully"},"400":{"description":"Bad request"}},"security":[{"bearer":[]}],"summary":"Delete video from Cloudinary","tags":["Upload"]}},"/api/v1/locations":{"post":{"operationId":"LocationsController_create_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateLocationDto"}}}},"responses":{"201":{"description":"Location created successfully"}},"security":[{"bearer":[]}],"summary":"Create a new location (Admin only)","tags":["locations"]},"get":{"operationId":"LocationsController_findAll_v1","parameters":[],"responses":{"200":{"description":"Returns all locations"}},"summary":"Get all locations","tags":["locations"]}},"/api/v1/locations/active":{"get":{"operationId":"LocationsController_findAllActive_v1","parameters":[],"responses":{"200":{"description":"Returns all active locations"}},"summary":"Get all active locations","tags":["locations"]}},"/api/v1/locations/tree":{"get":{"operationId":"LocationsController_findTree_v1","parameters":[],"responses":{"200":{"description":"Returns locations in tree structure"}},"summary":"Get locations as tree structure","tags":["locations"]}},"/api/v1/locations/roots":{"get":{"operationId":"LocationsController_findRoots_v1","parameters":[],"responses":{"200":{"description":"Returns root locations"}},"summary":"Get root locations (cities)","tags":["locations"]}},"/api/v1/locations/slug/{slug}":{"get":{"operationId":"LocationsController_findBySlug_v1","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns the location"},"404":{"description":"Location not found"}},"summary":"Get location by slug","tags":["locations"]}},"/api/v1/locations/slug/{slug}/children":{"get":{"operationId":"LocationsController_findChildrenBySlug_v1","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns child locations"}},"summary":"Get children of location by slug","tags":["locations"]}},"/api/v1/locations/{id}":{"get":{"operationId":"LocationsController_findOne_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns the location"},"404":{"description":"Location not found"}},"summary":"Get location by ID","tags":["locations"]},"patch":{"operationId":"LocationsController_update_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateLocationDto"}}}},"responses":{"200":{"description":"Location updated successfully"},"404":{"description":"Location not found"}},"security":[{"bearer":[]}],"summary":"Update location (Admin only)","tags":["locations"]},"delete":{"operationId":"LocationsController_remove_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Location deleted successfully"},"404":{"description":"Location not found"}},"security":[{"bearer":[]}],"summary":"Delete location (Admin only)","tags":["locations"]}},"/api/v1/locations/{id}/children":{"get":{"operationId":"LocationsController_findChildren_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns child locations"}},"summary":"Get child locations","tags":["locations"]}},"/api/v1/property-categories":{"post":{"operationId":"PropertyCategoriesController_create_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePropertyCategoryDto"}}}},"responses":{"201":{"description":"Category created successfully"}},"security":[{"bearer":[]}],"summary":"Create a new property category (Admin only)","tags":["property-categories"]},"get":{"operationId":"PropertyCategoriesController_findAll_v1","parameters":[],"responses":{"200":{"description":"Returns all categories"}},"summary":"Get all property categories","tags":["property-categories"]}},"/api/v1/property-categories/active":{"get":{"operationId":"PropertyCategoriesController_findAllActive_v1","parameters":[],"responses":{"200":{"description":"Returns all active categories"}},"summary":"Get all active property categories","tags":["property-categories"]}},"/api/v1/property-categories/tree":{"get":{"operationId":"PropertyCategoriesController_findTree_v1","parameters":[],"responses":{"200":{"description":"Returns categories in tree structure"}},"summary":"Get categories as tree structure","tags":["property-categories"]}},"/api/v1/property-categories/slug/{slug}":{"get":{"operationId":"PropertyCategoriesController_findBySlug_v1","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns the category"},"404":{"description":"Category not found"}},"summary":"Get category by slug","tags":["property-categories"]}},"/api/v1/property-categories/{id}":{"get":{"operationId":"PropertyCategoriesController_findOne_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns the category"},"404":{"description":"Category not found"}},"summary":"Get category by ID","tags":["property-categories"]},"patch":{"operationId":"PropertyCategoriesController_update_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePropertyCategoryDto"}}}},"responses":{"200":{"description":"Category updated successfully"},"404":{"description":"Category not found"}},"security":[{"bearer":[]}],"summary":"Update category (Admin only)","tags":["property-categories"]},"delete":{"operationId":"PropertyCategoriesController_remove_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Category deleted successfully"},"404":{"description":"Category not found"}},"security":[{"bearer":[]}],"summary":"Delete category (Admin only)","tags":["property-categories"]}},"/api/v1/agencies":{"post":{"operationId":"AgenciesController_create_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAgencyDto"}}}},"responses":{"201":{"description":""}},"tags":["Agencies"]},"get":{"operationId":"AgenciesController_findAll_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Agencies"]}},"/api/v1/agencies/my-agencies":{"get":{"operationId":"AgenciesController_getMyAgencies_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Agencies"]}},"/api/v1/agencies/active":{"get":{"operationId":"AgenciesController_findActive_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Agencies"]}},"/api/v1/agencies/verified":{"get":{"operationId":"AgenciesController_findVerified_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Agencies"]}},"/api/v1/agencies/slug/{slug}":{"get":{"operationId":"AgenciesController_findBySlug_v1","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Agencies"]}},"/api/v1/agencies/{id}":{"get":{"operationId":"AgenciesController_findOne_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Agencies"]},"patch":{"operationId":"AgenciesController_update_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAgencyDto"}}}},"responses":{"200":{"description":""}},"tags":["Agencies"]},"delete":{"operationId":"AgenciesController_remove_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Agencies"]}},"/api/v1/agencies/{id}/stats":{"get":{"operationId":"AgenciesController_getStats_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Agencies"]}},"/api/v1/agencies/{id}/properties":{"get":{"operationId":"AgenciesController_getProperties_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Agencies"]}},"/api/v1/agencies/{id}/properties/manage":{"get":{"operationId":"AgenciesController_getPropertiesForManagement_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Agencies"]}},"/api/v1/agencies/{id}/agents":{"get":{"operationId":"AgenciesController_getAgents_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Agencies"]},"post":{"operationId":"AgenciesController_addAgent_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"tags":["Agencies"]}},"/api/v1/agencies/{id}/agents/create":{"post":{"operationId":"AgenciesController_createAgent_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAgentDto"}}}},"responses":{"201":{"description":""}},"tags":["Agencies"]}},"/api/v1/agencies/{id}/agents/{agentId}":{"patch":{"operationId":"AgenciesController_updateAgent_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"agentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Agencies"]},"delete":{"operationId":"AgenciesController_removeAgent_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"agentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Agencies"]}},"/api/v1/agencies/{id}/projects":{"get":{"operationId":"AgenciesController_getProjects_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Agencies"]}},"/api/v1/projects":{"post":{"operationId":"ProjectsController_create_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProjectDto"}}}},"responses":{"201":{"description":""}},"tags":["Projects"]},"get":{"operationId":"ProjectsController_findAll_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Projects"]}},"/api/v1/projects/active":{"get":{"operationId":"ProjectsController_findActive_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Projects"]}},"/api/v1/projects/featured":{"get":{"operationId":"ProjectsController_findFeatured_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Projects"]}},"/api/v1/projects/by-status/{status}":{"get":{"operationId":"ProjectsController_findByStatus_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Projects"]}},"/api/v1/projects/slug/{slug}":{"get":{"operationId":"ProjectsController_findBySlug_v1","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Projects"]}},"/api/v1/projects/{id}":{"get":{"operationId":"ProjectsController_findOne_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Projects"]},"patch":{"operationId":"ProjectsController_update_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProjectDto"}}}},"responses":{"200":{"description":""}},"tags":["Projects"]},"put":{"operationId":"ProjectsController_updatePut_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProjectDto"}}}},"responses":{"200":{"description":""}},"tags":["Projects"]},"delete":{"operationId":"ProjectsController_remove_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Projects"]}},"/api/v1/projects/{id}/stats":{"get":{"operationId":"ProjectsController_getStats_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Projects"]}},"/api/v1/users":{"post":{"operationId":"UsersController_create_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserDto"}}}},"responses":{"201":{"description":""}},"tags":["Users"]},"get":{"operationId":"UsersController_findAll_v1","parameters":[{"name":"role","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Users"]}},"/api/v1/users/featured-agents":{"get":{"operationId":"UsersController_getFeaturedAgents_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Users"]}},"/api/v1/users/top-agents-by-views":{"get":{"operationId":"UsersController_getTopAgentsByViews_v1","parameters":[{"name":"limit","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Users"]}},"/api/v1/users/active":{"get":{"operationId":"UsersController_findActive_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Users"]}},"/api/v1/users/role/{role}":{"get":{"operationId":"UsersController_findByRole_v1","parameters":[{"name":"role","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Users"]}},"/api/v1/users/agency/{agencyId}":{"get":{"operationId":"UsersController_findByAgency_v1","parameters":[{"name":"agencyId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Users"]}},"/api/v1/users/stats/count":{"get":{"operationId":"UsersController_getCount_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Users"]}},"/api/v1/users/stats/count-by-role":{"get":{"operationId":"UsersController_getCountByRole_v1","parameters":[{"name":"role","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Users"]}},"/api/v1/users/slug/{slug}":{"get":{"operationId":"UsersController_findBySlug_v1","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Users"]}},"/api/v1/users/profile":{"get":{"operationId":"UsersController_getProfile_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Users"]},"patch":{"operationId":"UsersController_updateProfile_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SafeUpdateProfileDto"}}}},"responses":{"200":{"description":""}},"tags":["Users"]}},"/api/v1/users/change-password":{"patch":{"operationId":"UsersController_changePassword_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePasswordDto"}}}},"responses":{"200":{"description":""}},"tags":["Users"]}},"/api/v1/users/upgrade-to-agent":{"post":{"operationId":"UsersController_upgradeToAgent_v1","parameters":[],"responses":{"201":{"description":""}},"tags":["Users"]}},"/api/v1/users/send-verification-email":{"post":{"operationId":"UsersController_sendVerificationEmail_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Users"]}},"/api/v1/users/{id}":{"get":{"operationId":"UsersController_findOne_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Users"]},"patch":{"operationId":"UsersController_update_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserDto"}}}},"responses":{"200":{"description":""}},"tags":["Users"]},"delete":{"operationId":"UsersController_remove_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Users"]}},"/api/v1/seed":{"post":{"operationId":"SeedController_seed_v1","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Seed database with test data (Admin only)","tags":["seed"]}},"/api/v1/seed/roommate":{"post":{"operationId":"SeedController_seedRoommate_v1","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Seed 12 dummy roommate profiles for testing (Admin only)","tags":["seed"]}},"/api/v1/seed/detective":{"post":{"operationId":"SeedController_seedDetective_v1","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Seed 3 detectives + 2 clients + 2 sample requests for testing (Admin only)","tags":["seed"]}},"/api/v1/admin/stats/overview":{"get":{"operationId":"AdminController_getOverviewStats_v1","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get admin dashboard overview stats","tags":["Admin"]}},"/api/v1/admin/stats/properties":{"get":{"operationId":"AdminController_getPropertyStats_v1","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get property statistics","tags":["Admin"]}},"/api/v1/admin/stats/users":{"get":{"operationId":"AdminController_getUserStats_v1","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get user statistics","tags":["Admin"]}},"/api/v1/admin/stats/recent-activities":{"get":{"operationId":"AdminController_getRecentActivities_v1","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get recent activities","tags":["Admin"]}},"/api/v1/admin/users":{"get":{"operationId":"AdminController_getUsers_v1","parameters":[{"name":"search","required":false,"in":"query","description":"Search term for name, email, or phone","schema":{"type":"string"}},{"name":"role","required":false,"in":"query","description":"Filter by user role","schema":{"type":"string","enum":["user","agent","agency_owner","admin"]}},{"name":"isActive","required":false,"in":"query","description":"Filter by active status","schema":{"type":"boolean"}},{"name":"isVerified","required":false,"in":"query","description":"Filter by verified status","schema":{"type":"boolean"}},{"name":"page","required":false,"in":"query","description":"Page number","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"default":20,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Sort field","schema":{"default":"createdAt","type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Sort order","schema":{"default":"DESC","type":"string","enum":["ASC","DESC"]}},{"name":"agencyId","required":false,"in":"query","description":"Filter by agency ID","schema":{"type":"number"}},{"name":"startDate","required":false,"in":"query","description":"Start date for filtering","schema":{"type":"string"}},{"name":"endDate","required":false,"in":"query","description":"End date for filtering","schema":{"type":"string"}}],"responses":{"200":{"description":"Returns paginated users list"}},"security":[{"bearer":[]}],"summary":"Get all users with filters and pagination","tags":["Admin"]}},"/api/v1/admin/users/{id}":{"get":{"operationId":"AdminController_getUserById_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Returns user details"},"404":{"description":"User not found"}},"security":[{"bearer":[]}],"summary":"Get user by ID","tags":["Admin"]},"patch":{"operationId":"AdminController_updateUser_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserAdminDto"}}}},"responses":{"200":{"description":"User updated successfully"},"404":{"description":"User not found"}},"security":[{"bearer":[]}],"summary":"Update user","tags":["Admin"]},"delete":{"operationId":"AdminController_deleteUser_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"User deactivated successfully"},"404":{"description":"User not found"}},"security":[{"bearer":[]}],"summary":"Delete (deactivate) user","tags":["Admin"]}},"/api/v1/admin/users/{id}/activate":{"patch":{"operationId":"AdminController_toggleUserActive_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"User status updated"}},"security":[{"bearer":[]}],"summary":"Activate/deactivate user","tags":["Admin"]}},"/api/v1/admin/users/{id}/verify":{"patch":{"operationId":"AdminController_verifyUser_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"User verified successfully"}},"security":[{"bearer":[]}],"summary":"Verify user email","tags":["Admin"]}},"/api/v1/admin/users/{id}/role":{"patch":{"operationId":"AdminController_changeUserRole_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeUserRoleDto"}}}},"responses":{"200":{"description":"User role changed successfully"}},"security":[{"bearer":[]}],"summary":"Change user role","tags":["Admin"]}},"/api/v1/admin/users/{id}/reset-password":{"post":{"operationId":"AdminController_resetUserPassword_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPasswordAdminDto"}}}},"responses":{"200":{"description":"Password reset successfully"}},"security":[{"bearer":[]}],"summary":"Reset user password","tags":["Admin"]}},"/api/v1/admin/users/bulk-action":{"post":{"operationId":"AdminController_bulkUserAction_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkActionDto"}}}},"responses":{"200":{"description":"Bulk action completed successfully"}},"security":[{"bearer":[]}],"summary":"Perform bulk action on users","tags":["Admin"]}},"/api/v1/admin/properties":{"get":{"operationId":"AdminController_getProperties_v1","parameters":[{"name":"search","required":false,"in":"query","description":"Search term for title, description","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","description":"Filter by status","schema":{"type":"string","enum":["pending","approved","rejected","draft"]}},{"name":"propertyType","required":false,"in":"query","description":"Filter by property type","schema":{"type":"string"}},{"name":"listingType","required":false,"in":"query","description":"Filter by listing type (sale/rent)","schema":{"type":"string"}},{"name":"locationId","required":false,"in":"query","description":"Filter by location ID","schema":{"type":"number"}},{"name":"categoryId","required":false,"in":"query","description":"Filter by category ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Filter by agent ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Filter by agency ID","schema":{"type":"number"}},{"name":"minPrice","required":false,"in":"query","description":"Minimum price","schema":{"type":"number"}},{"name":"maxPrice","required":false,"in":"query","description":"Maximum price","schema":{"type":"number"}},{"name":"isFeatured","required":false,"in":"query","description":"Filter by featured status","schema":{"type":"boolean"}},{"name":"startDate","required":false,"in":"query","description":"Start date for filtering","schema":{"type":"string"}},{"name":"endDate","required":false,"in":"query","description":"End date for filtering","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"default":20,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Sort field","schema":{"default":"createdAt","type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Sort order","schema":{"default":"DESC","type":"string","enum":["ASC","DESC"]}}],"responses":{"200":{"description":"Returns paginated properties list"}},"security":[{"bearer":[]}],"summary":"Get all properties with filters and pagination","tags":["Admin"]}},"/api/v1/admin/properties/{id}":{"get":{"operationId":"AdminController_getPropertyById_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Returns property details"},"404":{"description":"Property not found"}},"security":[{"bearer":[]}],"summary":"Get property by ID","tags":["Admin"]},"patch":{"operationId":"AdminController_updateProperty_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePropertyAdminDto"}}}},"responses":{"200":{"description":"Property updated successfully"},"404":{"description":"Property not found"}},"security":[{"bearer":[]}],"summary":"Update property","tags":["Admin"]},"delete":{"operationId":"AdminController_deleteProperty_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Property deleted successfully"},"404":{"description":"Property not found"}},"security":[{"bearer":[]}],"summary":"Delete property","tags":["Admin"]}},"/api/v1/admin/properties/{id}/status":{"patch":{"operationId":"AdminController_changePropertyStatus_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePropertyStatusDto"}}}},"responses":{"200":{"description":"Property status updated"}},"security":[{"bearer":[]}],"summary":"Change property status","tags":["Admin"]}},"/api/v1/admin/properties/{id}/feature":{"patch":{"operationId":"AdminController_featureProperty_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeaturePropertyDto"}}}},"responses":{"200":{"description":"Property featured status updated"}},"security":[{"bearer":[]}],"summary":"Feature/unfeature property","tags":["Admin"]}},"/api/v1/admin/properties/bulk-action":{"post":{"operationId":"AdminController_bulkPropertyAction_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkActionDto"}}}},"responses":{"200":{"description":"Bulk action completed successfully"}},"security":[{"bearer":[]}],"summary":"Perform bulk action on properties","tags":["Admin"]}},"/api/v1/admin/homepage/agencies":{"get":{"operationId":"AdminController_getAllAgencies_v1","parameters":[],"responses":{"200":{"description":"Returns all agencies"}},"security":[{"bearer":[]}],"summary":"Get all agencies with featured status","tags":["Admin"]}},"/api/v1/admin/homepage/agencies/{id}/toggle-featured":{"patch":{"operationId":"AdminController_toggleAgencyFeature_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Agency featured status updated"}},"security":[{"bearer":[]}],"summary":"Toggle agency featured on homepage status","tags":["Admin"]}},"/api/v1/admin/homepage/agents":{"get":{"operationId":"AdminController_getAllAgents_v1","parameters":[],"responses":{"200":{"description":"Returns all agents"}},"security":[{"bearer":[]}],"summary":"Get all agents with featured status","tags":["Admin"]}},"/api/v1/admin/homepage/agents/{id}/toggle-featured":{"patch":{"operationId":"AdminController_toggleAgentFeature_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Agent featured status updated"}},"security":[{"bearer":[]}],"summary":"Toggle agent featured on homepage status","tags":["Admin"]}},"/api/v1/currency/rates":{"get":{"operationId":"CurrencyController_getExchangeRates_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Currency"]}},"/api/v1/currency/convert/{amount}/{from}":{"get":{"operationId":"CurrencyController_convertToTRY_v1","parameters":[{"name":"amount","required":true,"in":"path","schema":{"type":"string"}},{"name":"from","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Currency"]}},"/api/v1/currency/rate/{currency}":{"get":{"operationId":"CurrencyController_getRate_v1","parameters":[{"name":"currency","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Currency"]}},"/api/v1/scraper/start":{"post":{"operationId":"ScraperController_startScraping_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartScrapeDto"}}}},"responses":{"201":{"description":""}},"tags":["Scraper"]}},"/api/v1/scraper/jobs/active":{"get":{"operationId":"ScraperController_getActiveJob_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Scraper"]}},"/api/v1/scraper/jobs/{id}/status":{"get":{"operationId":"ScraperController_getJobStatus_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Scraper"]}},"/api/v1/scraper/jobs/{id}":{"get":{"operationId":"ScraperController_getJob_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Scraper"]}},"/api/v1/scraper/jobs":{"get":{"operationId":"ScraperController_getUserJobs_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Scraper"]}},"/api/v1/scraper/admin/jobs":{"get":{"operationId":"ScraperController_getAllJobsForAdmin_v1","parameters":[{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Scraper"]}},"/api/v1/scraper/jobs/{id}/cancel":{"post":{"operationId":"ScraperController_cancelJob_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Scraper"]}},"/api/v1/scraper/jobs/{id}/resume":{"post":{"operationId":"ScraperController_resumeJob_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"202":{"description":""}},"tags":["Scraper"]}},"/api/v1/scraper/confirm":{"post":{"operationId":"ScraperController_confirmImport_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmImportDto"}}}},"responses":{"202":{"description":""}},"tags":["Scraper"]}},"/api/v1/pages/public":{"get":{"operationId":"PagesController_findPublished_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Pages"]}},"/api/v1/pages/public/{slug}":{"get":{"operationId":"PagesController_findPublishedBySlug_v1","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}},{"name":"lang","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Pages"]}},"/api/v1/pages":{"get":{"operationId":"PagesController_findAll_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Pages"]},"post":{"operationId":"PagesController_create_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePageDto"}}}},"responses":{"201":{"description":""}},"tags":["Pages"]}},"/api/v1/pages/{id}":{"get":{"operationId":"PagesController_findOne_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Pages"]},"put":{"operationId":"PagesController_update_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePageDto"}}}},"responses":{"200":{"description":""}},"tags":["Pages"]},"delete":{"operationId":"PagesController_remove_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Pages"]}},"/api/v1/pages/{id}/publish":{"post":{"operationId":"PagesController_publish_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"201":{"description":""}},"tags":["Pages"]}},"/api/v1/pages/{id}/unpublish":{"post":{"operationId":"PagesController_unpublish_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"201":{"description":""}},"tags":["Pages"]}},"/api/v1/pages/initialize-defaults":{"post":{"operationId":"PagesController_initializeDefaults_v1","parameters":[],"responses":{"201":{"description":""}},"tags":["Pages"]}},"/api/v1/sitemap.xml":{"get":{"operationId":"SeoController_getSitemapIndex_v1","parameters":[],"responses":{"200":{"description":""}},"summary":"Get sitemap index","tags":["seo"]}},"/api/v1/sitemap-properties.xml":{"get":{"operationId":"SeoController_getPropertiesSitemap_v1","parameters":[],"responses":{"200":{"description":""}},"summary":"Get properties sitemap","tags":["seo"]}},"/api/v1/sitemap-pages.xml":{"get":{"operationId":"SeoController_getPagesSitemap_v1","parameters":[],"responses":{"200":{"description":""}},"summary":"Get pages sitemap","tags":["seo"]}},"/api/v1/sitemap-agencies.xml":{"get":{"operationId":"SeoController_getAgenciesSitemap_v1","parameters":[],"responses":{"200":{"description":""}},"summary":"Get agencies sitemap","tags":["seo"]}},"/api/v1/sitemap-blog.xml":{"get":{"operationId":"SeoController_getBlogSitemap_v1","parameters":[],"responses":{"200":{"description":""}},"summary":"Get blog sitemap","tags":["seo"]}},"/api/v1/sitemap-static.xml":{"get":{"operationId":"SeoController_getStaticSitemap_v1","parameters":[],"responses":{"200":{"description":""}},"summary":"Get static pages sitemap","tags":["seo"]}},"/api/v1/sitemap-locations.xml":{"get":{"operationId":"SeoController_getLocationsSitemap_v1","parameters":[],"responses":{"200":{"description":""}},"summary":"Get locations sitemap — all /satilik/:city(/:district) and /kiralik/... programmatic pages","tags":["seo"]}},"/api/v1/seo/location-stats":{"get":{"operationId":"SeoController_getLocationStats_v1","parameters":[{"name":"city","required":false,"in":"query","schema":{"type":"string"}},{"name":"district","required":false,"in":"query","schema":{"type":"string"}},{"name":"listingType","required":false,"in":"query","schema":{"enum":["sale","rent","daily_rent"],"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Aggregate listing stats for a location — used by Next.js generateMetadata on city/district pages","tags":["seo"]}},"/api/v1/seo/market-report-2026":{"get":{"operationId":"SeoController_getMarketReport2026_v1","parameters":[],"responses":{"200":{"description":""}},"summary":"Get Cyprus Property Market Report 2026 data","tags":["seo"]}},"/api/v1/robots.txt":{"get":{"operationId":"SeoController_getRobotsTxt_v1","parameters":[],"responses":{"200":{"description":""}},"summary":"Get robots.txt","tags":["seo"]}},"/api/v1/places/nearby":{"get":{"operationId":"PlacesController_getNearbyPlaces_v1","parameters":[{"name":"lat","required":true,"in":"query","schema":{"type":"string"}},{"name":"lng","required":true,"in":"query","schema":{"type":"string"}},{"name":"radius","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Places"]}},"/api/v1/places/cache/stats":{"get":{"operationId":"PlacesController_getCacheStats_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Places"]}},"/api/v1/places/cache/clear":{"post":{"operationId":"PlacesController_clearCache_v1","parameters":[],"responses":{"201":{"description":""}},"tags":["Places"]}},"/api/v1/places/cache/prewarm":{"post":{"operationId":"PlacesController_triggerPrewarm_v1","parameters":[{"name":"days","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"tags":["Places"]}},"/api/v1/reviews":{"post":{"operationId":"ReviewsController_create_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateReviewDto"}}}},"responses":{"201":{"description":""}},"tags":["Reviews"]},"get":{"operationId":"ReviewsController_findAll_v1","parameters":[{"name":"targetUserId","required":true,"in":"query","schema":{"type":"string"}},{"name":"agencyId","required":true,"in":"query","schema":{"type":"string"}},{"name":"isApproved","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Reviews"]}},"/api/v1/reviews/rating":{"get":{"operationId":"ReviewsController_getAverageRating_v1","parameters":[{"name":"targetUserId","required":true,"in":"query","schema":{"type":"string"}},{"name":"agencyId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Reviews"]}},"/api/v1/reviews/{id}":{"get":{"operationId":"ReviewsController_findOne_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Reviews"]},"delete":{"operationId":"ReviewsController_remove_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Reviews"]}},"/api/v1/reviews/{id}/approve":{"patch":{"operationId":"ReviewsController_approve_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Reviews"]}},"/api/v1/reviews/{id}/reject":{"patch":{"operationId":"ReviewsController_reject_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Reviews"]}},"/api/v1/blog":{"post":{"operationId":"BlogController_create_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBlogPostDto"}}}},"responses":{"201":{"description":""}},"tags":["Blog"]},"get":{"operationId":"BlogController_findAll_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Blog"]}},"/api/v1/blog/statistics":{"get":{"operationId":"BlogController_getStatistics_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Blog"]}},"/api/v1/blog/slug/{slug}":{"get":{"operationId":"BlogController_findBySlug_v1","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}},{"name":"lang","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Blog"]}},"/api/v1/blog/{id}":{"get":{"operationId":"BlogController_findOne_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Blog"]},"patch":{"operationId":"BlogController_update_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBlogPostDto"}}}},"responses":{"200":{"description":""}},"tags":["Blog"]},"delete":{"operationId":"BlogController_remove_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"tags":["Blog"]}},"/api/v1/blog/bulk-delete":{"post":{"operationId":"BlogController_bulkDelete_v1","parameters":[],"responses":{"204":{"description":""}},"tags":["Blog"]}},"/api/v1/blog/bulk-update-status":{"post":{"operationId":"BlogController_bulkUpdateStatus_v1","parameters":[],"responses":{"201":{"description":""}},"tags":["Blog"]}},"/api/v1/blog/ai/models":{"get":{"operationId":"BlogController_listAiModels_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Blog"]}},"/api/v1/blog/ai/generate-title":{"post":{"operationId":"BlogController_generateTitle_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateBlogTitleDto"}}}},"responses":{"201":{"description":""}},"tags":["Blog"]}},"/api/v1/blog/ai/generate-content":{"post":{"operationId":"BlogController_generateContent_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateBlogContentDto"}}}},"responses":{"201":{"description":""}},"tags":["Blog"]}},"/api/v1/blog/ai/generate-bulk-titles":{"post":{"operationId":"BlogController_generateBulkTitles_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateBulkTitlesDto"}}}},"responses":{"201":{"description":""}},"tags":["Blog"]}},"/api/v1/blog/ai/generate-bulk-posts":{"post":{"operationId":"BlogController_generateBulkPosts_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateBulkPostsDto"}}}},"responses":{"201":{"description":""}},"tags":["Blog"]}},"/api/v1/stats/public":{"get":{"operationId":"StatsController_getPublicStats_v1","parameters":[],"responses":{"200":{"description":"Returns public statistics","content":{"application/json":{"schema":{"type":"object","properties":{"properties":{"type":"number","example":500},"agencies":{"type":"number","example":50},"customers":{"type":"number","example":1000}}}}}}},"summary":"Get public statistics for homepage","tags":["Stats"]}},"/api/v1/contact-tracking/properties/{id}/track":{"post":{"operationId":"ContactTrackingController_trackClick_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}},{"name":"user-agent","required":true,"in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrackContactDto"}}}},"responses":{"201":{"description":""}},"tags":["ContactTracking"]}},"/api/v1/contact-tracking/properties/{id}/stats":{"get":{"operationId":"ContactTrackingController_getPropertyStats_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}},{"name":"startDate","required":true,"in":"query","schema":{"type":"string"}},{"name":"endDate","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["ContactTracking"]}},"/api/v1/contact-tracking/agents/{id}/stats":{"get":{"operationId":"ContactTrackingController_getAgentStats_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}},{"name":"startDate","required":true,"in":"query","schema":{"type":"string"}},{"name":"endDate","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["ContactTracking"]}},"/api/v1/contact-tracking/global/stats":{"get":{"operationId":"ContactTrackingController_getGlobalStats_v1","parameters":[{"name":"startDate","required":true,"in":"query","schema":{"type":"string"}},{"name":"endDate","required":true,"in":"query","schema":{"type":"string"}},{"name":"propertiesPage","required":true,"in":"query","schema":{"type":"number"}},{"name":"agentsPage","required":true,"in":"query","schema":{"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["ContactTracking"]}},"/api/v1/contact-tracking/agents/{id}/detailed-stats":{"get":{"operationId":"ContactTrackingController_getAgentDetailedStats_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}},{"name":"startDate","required":true,"in":"query","schema":{"type":"string"}},{"name":"endDate","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["ContactTracking"]}},"/api/v1/contact-tracking/reports/detailed":{"get":{"operationId":"ContactTrackingController_getDetailedReport_v1","parameters":[{"name":"propertyIds","required":true,"in":"query","schema":{"type":"string"}},{"name":"agentIds","required":true,"in":"query","schema":{"type":"string"}},{"name":"startDate","required":true,"in":"query","schema":{"type":"string"}},{"name":"endDate","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["ContactTracking"]}},"/api/v1/contact-tracking/reports/export-csv":{"get":{"operationId":"ContactTrackingController_exportCsv_v1","parameters":[{"name":"agentIds","required":true,"in":"query","schema":{"type":"string"}},{"name":"startDate","required":true,"in":"query","schema":{"type":"string"}},{"name":"endDate","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["ContactTracking"]}},"/api/v1/contact-tracking/my-stats":{"get":{"operationId":"ContactTrackingController_getMyStats_v1","parameters":[{"name":"dateRange","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["ContactTracking"]}},"/api/v1/contact-tracking/my-stats/properties":{"get":{"operationId":"ContactTrackingController_getMyPropertyStats_v1","parameters":[{"name":"page","required":true,"in":"query","schema":{"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"type":"number"}},{"name":"sortBy","required":true,"in":"query","schema":{"type":"string"}},{"name":"sortOrder","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["ContactTracking"]}},"/api/v1/contact-tracking/profile-view/{id}":{"post":{"operationId":"ContactTrackingController_incrementProfileView_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"201":{"description":""}},"tags":["ContactTracking"]}},"/api/v1/public/agency/me":{"get":{"operationId":"PublicApiController_getMe_v1","parameters":[],"responses":{"200":{"description":""}},"security":[{"agency-api-key":[]}],"summary":"Inspect current API key: scopes, limits, quota","tags":["public-agency-api"]}},"/api/v1/public/agency/profile":{"get":{"operationId":"PublicApiController_getProfile_v1","parameters":[],"responses":{"200":{"description":""}},"security":[{"agency-api-key":[]}],"summary":"Get agency profile","tags":["public-agency-api"]}},"/api/v1/public/agency/contact":{"get":{"operationId":"PublicApiController_getContact_v1","parameters":[],"responses":{"200":{"description":""}},"security":[{"agency-api-key":[]}],"summary":"Get agency contact details","tags":["public-agency-api"]}},"/api/v1/public/agency/agents":{"get":{"operationId":"PublicApiController_getAgents_v1","parameters":[],"responses":{"200":{"description":""}},"security":[{"agency-api-key":[]}],"summary":"List agency agents","tags":["public-agency-api"]}},"/api/v1/public/agency/agents/{slug}":{"get":{"operationId":"PublicApiController_getAgentDetail_v1","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"agency-api-key":[]}],"summary":"Get agent detail by slug (agency-scoped)","tags":["public-agency-api"]}},"/api/v1/public/agency/properties":{"get":{"description":"Varsayılan olarak yalnızca yayında (approved) ilanlar döner. properties:write yetkisine sahip anahtarlar `status` ve `isActive` filtrelerini kullanarak bekleyen/reddedilen/pasif ilanlarını da görebilir — aksi halde API ile eklenen bir ilanın durumu takip edilemez.","operationId":"PublicApiController_getProperties_v1","parameters":[{"name":"page","required":true,"in":"query","schema":{"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"type":"number"}},{"name":"listingType","required":true,"in":"query","schema":{"type":"string"}},{"name":"city","required":true,"in":"query","schema":{"type":"string"}},{"name":"district","required":true,"in":"query","schema":{"type":"string"}},{"name":"minPrice","required":true,"in":"query","schema":{"type":"number"}},{"name":"maxPrice","required":true,"in":"query","schema":{"type":"number"}},{"name":"bedrooms","required":true,"in":"query","schema":{"type":"number"}},{"name":"bathrooms","required":true,"in":"query","schema":{"type":"number"}},{"name":"minArea","required":true,"in":"query","schema":{"type":"number"}},{"name":"maxArea","required":true,"in":"query","schema":{"type":"number"}},{"name":"categoryId","required":true,"in":"query","schema":{"type":"number"}},{"name":"subCategoryId","required":true,"in":"query","schema":{"type":"number"}},{"name":"agentId","required":true,"in":"query","schema":{"type":"number"}},{"name":"featured","required":true,"in":"query","schema":{"type":"string"}},{"name":"sort","required":true,"in":"query","schema":{"type":"string"}},{"name":"search","required":true,"in":"query","schema":{"type":"string"}},{"name":"status","required":true,"in":"query","schema":{"type":"string"}},{"name":"isActive","required":true,"in":"query","schema":{"type":"string"}},{"name":"externalId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"agency-api-key":[]}],"summary":"List agency properties (filterable, paginated)","tags":["public-agency-api"]}},"/api/v1/public/agency/properties/featured":{"get":{"operationId":"PublicApiController_getFeaturedProperties_v1","parameters":[{"name":"limit","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"agency-api-key":[]}],"summary":"Get featured properties of the agency","tags":["public-agency-api"]}},"/api/v1/public/agency/properties/id/{id}":{"get":{"operationId":"PublicApiController_getPropertyById_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"agency-api-key":[]}],"summary":"Get property by numeric ID (agency-scoped)","tags":["public-agency-api"]}},"/api/v1/public/agency/properties/{slug}":{"get":{"operationId":"PublicApiController_getPropertyBySlug_v1","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"agency-api-key":[]}],"summary":"Get property detail by slug (agency-scoped)","tags":["public-agency-api"]}},"/api/v1/public/agency/stats":{"get":{"operationId":"PublicApiController_getStats_v1","parameters":[],"responses":{"200":{"description":""}},"security":[{"agency-api-key":[]}],"summary":"Get agency statistics","tags":["public-agency-api"]}},"/api/v1/public/agency/locations":{"get":{"operationId":"PublicApiController_getLocations_v1","parameters":[],"responses":{"200":{"description":""}},"security":[{"agency-api-key":[]}],"summary":"List cities/districts used by agency listings","tags":["public-agency-api"]}},"/api/v1/public/agency/categories":{"get":{"operationId":"PublicApiController_getCategories_v1","parameters":[],"responses":{"200":{"description":""}},"security":[{"agency-api-key":[]}],"summary":"List categories used by agency listings","tags":["public-agency-api"]}},"/api/v1/public/agency/inquiry":{"post":{"operationId":"PublicApiController_createInquiry_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateInquiryDto"}}}},"responses":{"201":{"description":""}},"security":[{"agency-api-key":[]}],"summary":"Submit a customer inquiry (contact form)","tags":["public-agency-api"]}},"/api/v1/public/partner/properties":{"post":{"description":"Creates a new listing owned by your agency. Provide `externalId` (your CRM ID) to enable idempotent upserts later. Consumes one unit of the daily listing quota.","operationId":"PartnerPropertiesController_createProperty_v1","parameters":[{"name":"Idempotency-Key","in":"header","description":"Recommended for POST/PUT — prevents duplicates on retry","required":false,"schema":{"type":"string"}},{"name":"X-Signature","in":"header","description":"HMAC-SHA256 of METHOD:PATH:sha256(body):TIMESTAMP:NONCE","required":true,"schema":{"type":"string"}},{"name":"X-Nonce","in":"header","description":"Single-use random string per request (max 80 chars)","required":true,"schema":{"type":"string"}},{"name":"X-Timestamp","in":"header","description":"Unix timestamp in seconds (±5 minutes)","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerCreatePropertyDto"}}}},"responses":{"201":{"description":"Listing created"},"400":{"description":"Validation error, or externalId already exists (use PUT upsert)"},"429":{"description":"Rate limit or daily quota exceeded"}},"security":[{"agency-api-key":[]}],"summary":"Create a listing","tags":["partner-write-api"]}},"/api/v1/public/partner/properties/{id}":{"patch":{"description":"Updates only the provided fields. Does NOT consume the daily listing quota. Only listings created via the Partner API can be modified.","operationId":"PartnerPropertiesController_updateProperty_v1","parameters":[{"name":"Idempotency-Key","in":"header","description":"Recommended for POST/PUT — prevents duplicates on retry","required":false,"schema":{"type":"string"}},{"name":"X-Signature","in":"header","description":"HMAC-SHA256 of METHOD:PATH:sha256(body):TIMESTAMP:NONCE","required":true,"schema":{"type":"string"}},{"name":"X-Nonce","in":"header","description":"Single-use random string per request (max 80 chars)","required":true,"schema":{"type":"string"}},{"name":"X-Timestamp","in":"header","description":"Unix timestamp in seconds (±5 minutes)","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerUpdatePropertyDto"}}}},"responses":{"200":{"description":"Listing updated"},"404":{"description":"Listing not found or belongs to another agency"}},"security":[{"agency-api-key":[]}],"summary":"Partially update a listing","tags":["partner-write-api"]},"delete":{"description":"Sets isActive=false. The record is NOT permanently deleted — favourites, view statistics and messages attached to it are preserved. Permanent deletion is only available from the İlancık panel.","operationId":"PartnerPropertiesController_archiveProperty_v1","parameters":[{"name":"Idempotency-Key","in":"header","description":"Recommended for POST/PUT — prevents duplicates on retry","required":false,"schema":{"type":"string"}},{"name":"X-Signature","in":"header","description":"HMAC-SHA256 of METHOD:PATH:sha256(body):TIMESTAMP:NONCE","required":true,"schema":{"type":"string"}},{"name":"X-Nonce","in":"header","description":"Single-use random string per request (max 80 chars)","required":true,"schema":{"type":"string"}},{"name":"X-Timestamp","in":"header","description":"Unix timestamp in seconds (±5 minutes)","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Listing archived"}},"security":[{"agency-api-key":[]}],"summary":"Archive a listing (soft delete)","tags":["partner-write-api"]}},"/api/v1/public/partner/properties/external/{externalId}":{"put":{"description":"The main endpoint for CRM synchronisation: send the full desired state and the listing is created if missing, updated otherwise. Quota is consumed only when a new listing is created. Response includes `created: true|false`.","operationId":"PartnerPropertiesController_upsertProperty_v1","parameters":[{"name":"Idempotency-Key","in":"header","description":"Recommended for POST/PUT — prevents duplicates on retry","required":false,"schema":{"type":"string"}},{"name":"X-Signature","in":"header","description":"HMAC-SHA256 of METHOD:PATH:sha256(body):TIMESTAMP:NONCE","required":true,"schema":{"type":"string"}},{"name":"X-Nonce","in":"header","description":"Single-use random string per request (max 80 chars)","required":true,"schema":{"type":"string"}},{"name":"X-Timestamp","in":"header","description":"Unix timestamp in seconds (±5 minutes)","required":true,"schema":{"type":"string"}},{"name":"externalId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerUpsertPropertyDto"}}}},"responses":{"200":{"description":"Listing created or updated"}},"security":[{"agency-api-key":[]}],"summary":"Create or update a listing by your CRM ID (upsert)","tags":["partner-write-api"]}},"/api/v1/public/partner/properties/{id}/status":{"patch":{"description":"Toggles isActive. Note: moderation `status` is system-controlled and cannot be set through the Partner API.","operationId":"PartnerPropertiesController_setPropertyStatus_v1","parameters":[{"name":"Idempotency-Key","in":"header","description":"Recommended for POST/PUT — prevents duplicates on retry","required":false,"schema":{"type":"string"}},{"name":"X-Signature","in":"header","description":"HMAC-SHA256 of METHOD:PATH:sha256(body):TIMESTAMP:NONCE","required":true,"schema":{"type":"string"}},{"name":"X-Nonce","in":"header","description":"Single-use random string per request (max 80 chars)","required":true,"schema":{"type":"string"}},{"name":"X-Timestamp","in":"header","description":"Unix timestamp in seconds (±5 minutes)","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerPropertyStatusDto"}}}},"responses":{"200":{"description":""}},"security":[{"agency-api-key":[]}],"summary":"Publish or unpublish a listing","tags":["partner-write-api"]}},"/api/v1/public/partner/properties/{id}/images":{"put":{"description":"Replaces the whole list (not a partial add) so that images removed in your CRM are also removed here. Max 40 URLs.","operationId":"PartnerPropertiesController_replaceImages_v1","parameters":[{"name":"Idempotency-Key","in":"header","description":"Recommended for POST/PUT — prevents duplicates on retry","required":false,"schema":{"type":"string"}},{"name":"X-Signature","in":"header","description":"HMAC-SHA256 of METHOD:PATH:sha256(body):TIMESTAMP:NONCE","required":true,"schema":{"type":"string"}},{"name":"X-Nonce","in":"header","description":"Single-use random string per request (max 80 chars)","required":true,"schema":{"type":"string"}},{"name":"X-Timestamp","in":"header","description":"Unix timestamp in seconds (±5 minutes)","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerPropertyImagesDto"}}}},"responses":{"200":{"description":""}},"security":[{"agency-api-key":[]}],"summary":"Replace the image list","tags":["partner-write-api"]}},"/api/v1/public/partner/imports":{"post":{"description":"Accepts up to 200 listings and returns 202 with a jobId immediately. Each item is upserted by your externalId (created if missing, updated otherwise). Poll GET /imports/:jobId for progress. Quota for the whole batch is reserved up-front: if your remaining daily quota is smaller than the batch, nothing is queued and 429 is returned. Units are refunded for items that turn out to be updates or that fail. Auto-translation is skipped in bulk imports.","operationId":"PartnerImportsController_createImport_v1","parameters":[{"name":"Idempotency-Key","in":"header","description":"Strongly recommended for POST — prevents re-queuing the whole batch on retry","required":false,"schema":{"type":"string"}},{"name":"X-Signature","in":"header","description":"HMAC-SHA256 of METHOD:PATH:sha256(body):TIMESTAMP:NONCE","required":true,"schema":{"type":"string"}},{"name":"X-Nonce","in":"header","description":"Single-use random string per request (max 80 chars)","required":true,"schema":{"type":"string"}},{"name":"X-Timestamp","in":"header","description":"Unix timestamp in seconds (±5 minutes)","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerImportRequestDto"}}}},"responses":{"202":{"description":"Batch accepted; job queued"},"400":{"description":"Validation error in the batch"},"409":{"description":"Another import job of yours is still running"},"429":{"description":"Daily listing quota insufficient"}},"security":[{"agency-api-key":[]}],"summary":"Submit a batch of listings for asynchronous import","tags":["partner-write-api"]}},"/api/v1/public/partner/imports/{id}":{"get":{"description":"Returns counters while running and the full per-item result list once finished. Each result carries your externalId plus outcome (created | updated | failed) so you can reconcile against your CRM. Recommended polling interval: 5-10 seconds.","operationId":"PartnerImportsController_getImport_v1","parameters":[{"name":"Idempotency-Key","in":"header","description":"Strongly recommended for POST — prevents re-queuing the whole batch on retry","required":false,"schema":{"type":"string"}},{"name":"X-Signature","in":"header","description":"HMAC-SHA256 of METHOD:PATH:sha256(body):TIMESTAMP:NONCE","required":true,"schema":{"type":"string"}},{"name":"X-Nonce","in":"header","description":"Single-use random string per request (max 80 chars)","required":true,"schema":{"type":"string"}},{"name":"X-Timestamp","in":"header","description":"Unix timestamp in seconds (±5 minutes)","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Job status"},"404":{"description":"Job not found or belongs to another agency"}},"security":[{"agency-api-key":[]}],"summary":"Get import job progress and per-item results","tags":["partner-write-api"]}},"/api/v1/public/partner/agents":{"post":{"description":"Creates an agent account WITHOUT a password and e-mails them an invitation to set one. The response never contains credentials. The account starts unverified: e-mail ownership is proven only when the invitation link is used. If the e-mail already belongs to an İlancık account, 409 is returned — moving an existing agent between agencies is not possible through the API.","operationId":"PartnerAgentsController_createAgent_v1","parameters":[{"name":"Idempotency-Key","in":"header","description":"Recommended for POST — prevents duplicate accounts on retry","required":false,"schema":{"type":"string"}},{"name":"X-Signature","in":"header","description":"HMAC-SHA256 of METHOD:PATH:sha256(body):TIMESTAMP:NONCE","required":true,"schema":{"type":"string"}},{"name":"X-Nonce","in":"header","description":"Single-use random string per request (max 80 chars)","required":true,"schema":{"type":"string"}},{"name":"X-Timestamp","in":"header","description":"Unix timestamp in seconds (±5 minutes)","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerCreateAgentDto"}}}},"responses":{"201":{"description":"Agent created and invited"},"409":{"description":"E-mail cannot be onboarded through the API"}},"security":[{"agency-api-key":[]}],"summary":"Invite a new agent to your agency","tags":["partner-write-api"]}},"/api/v1/public/partner/agents/{id}":{"patch":{"description":"Updates contact details, job title, avatar and spoken languages. E-mail, role and password CANNOT be changed through the API: e-mail is the login identity, and role changes would be a privilege escalation. The public profile slug is intentionally preserved so existing links keep working.","operationId":"PartnerAgentsController_updateAgent_v1","parameters":[{"name":"Idempotency-Key","in":"header","description":"Recommended for POST — prevents duplicate accounts on retry","required":false,"schema":{"type":"string"}},{"name":"X-Signature","in":"header","description":"HMAC-SHA256 of METHOD:PATH:sha256(body):TIMESTAMP:NONCE","required":true,"schema":{"type":"string"}},{"name":"X-Nonce","in":"header","description":"Single-use random string per request (max 80 chars)","required":true,"schema":{"type":"string"}},{"name":"X-Timestamp","in":"header","description":"Unix timestamp in seconds (±5 minutes)","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerUpdateAgentDto"}}}},"responses":{"200":{"description":"Agent updated"},"404":{"description":"Agent not found or belongs to another agency"}},"security":[{"agency-api-key":[]}],"summary":"Update an agent profile","tags":["partner-write-api"]},"delete":{"description":"Removes the agency membership. The user record is NOT deleted — favourites, contact statistics and listing history depend on it. If the agent still has active listings, 409 is returned; pass reassignToAgentId to transfer them to another agent of your agency. When the person belongs to no other agency, their account is deactivated (login disabled) rather than removed.","operationId":"PartnerAgentsController_offboardAgent_v1","parameters":[{"name":"Idempotency-Key","in":"header","description":"Recommended for POST — prevents duplicate accounts on retry","required":false,"schema":{"type":"string"}},{"name":"X-Signature","in":"header","description":"HMAC-SHA256 of METHOD:PATH:sha256(body):TIMESTAMP:NONCE","required":true,"schema":{"type":"string"}},{"name":"X-Nonce","in":"header","description":"Single-use random string per request (max 80 chars)","required":true,"schema":{"type":"string"}},{"name":"X-Timestamp","in":"header","description":"Unix timestamp in seconds (±5 minutes)","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerOffboardAgentDto"}}}},"responses":{"200":{"description":"Agent offboarded"},"409":{"description":"Agent still has active listings — reassignToAgentId required"}},"security":[{"agency-api-key":[]}],"summary":"Remove an agent from your agency (offboard, not delete)","tags":["partner-write-api"]}},"/api/v1/public/partner/agents/{id}/invite":{"post":{"description":"Use when the invitation expired (7 days) or never arrived. Only works while the agent has not set a password yet — otherwise 400. This restriction is deliberate: without it, the endpoint would be a way to mint a valid password reset token for a working colleague’s account.","operationId":"PartnerAgentsController_resendInvite_v1","parameters":[{"name":"Idempotency-Key","in":"header","description":"Recommended for POST — prevents duplicate accounts on retry","required":false,"schema":{"type":"string"}},{"name":"X-Signature","in":"header","description":"HMAC-SHA256 of METHOD:PATH:sha256(body):TIMESTAMP:NONCE","required":true,"schema":{"type":"string"}},{"name":"X-Nonce","in":"header","description":"Single-use random string per request (max 80 chars)","required":true,"schema":{"type":"string"}},{"name":"X-Timestamp","in":"header","description":"Unix timestamp in seconds (±5 minutes)","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Invitation re-sent"},"400":{"description":"Agent already set a password"}},"security":[{"agency-api-key":[]}],"summary":"Resend the password-setup invitation","tags":["partner-write-api"]}},"/api/v1/public/partner/agency":{"patch":{"description":"Updates descriptive and contact fields. The following are NOT writable and are rejected with 400: slug (public URL + SEO identity), email (unique and also the owner login address), isVerified (İlancık’s own badge), licenseNumber (a legal claim), isActive (would lock you out of your own API key), rating/reviewCount (derived from user reviews) and the agent/property counters.","operationId":"PartnerAgentsController_updateAgency_v1","parameters":[{"name":"Idempotency-Key","in":"header","description":"Recommended for POST — prevents duplicate accounts on retry","required":false,"schema":{"type":"string"}},{"name":"X-Signature","in":"header","description":"HMAC-SHA256 of METHOD:PATH:sha256(body):TIMESTAMP:NONCE","required":true,"schema":{"type":"string"}},{"name":"X-Nonce","in":"header","description":"Single-use random string per request (max 80 chars)","required":true,"schema":{"type":"string"}},{"name":"X-Timestamp","in":"header","description":"Unix timestamp in seconds (±5 minutes)","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerUpdateAgencyDto"}}}},"responses":{"200":{"description":"Agency profile updated"},"400":{"description":"Validation error or a non-writable field was sent"}},"security":[{"agency-api-key":[]}],"summary":"Update your agency profile","tags":["partner-write-api"]}},"/api/v1/public/partner/uploads/signature":{"post":{"description":"Returns short-lived signed parameters so you can upload the image FILE directly to Cloudinary — the binary never passes through the İlancık API. Then attach the returned secure_url to a listing via PUT /properties/:id/images. The target folder is fixed to your agency and covered by the signature, so you cannot write anywhere else. Signature validity: 1 hour. NOTE: this endpoint is optional — if your images already have public HTTPS URLs, send those in the `images` field instead.","operationId":"PartnerUploadsController_createSignature_v1","parameters":[{"name":"X-Signature","in":"header","description":"HMAC-SHA256 of METHOD:PATH:sha256(body):TIMESTAMP:NONCE","required":true,"schema":{"type":"string"}},{"name":"X-Nonce","in":"header","description":"Single-use random string per request (max 80 chars)","required":true,"schema":{"type":"string"}},{"name":"X-Timestamp","in":"header","description":"Unix timestamp in seconds (±5 minutes)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Signed upload parameters"},"403":{"description":"Missing uploads:write scope"},"503":{"description":"Image hosting is not configured on the server"}},"security":[{"agency-api-key":[]}],"summary":"Get signed parameters for a direct Cloudinary upload","tags":["partner-write-api"]}},"/api/v1/xml-feeds":{"get":{"operationId":"XmlFeedController_list_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["XmlFeed"]},"post":{"operationId":"XmlFeedController_create_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateXmlFeedDto"}}}},"responses":{"201":{"description":""}},"tags":["XmlFeed"]}},"/api/v1/xml-feeds/mappings/unmapped":{"get":{"operationId":"XmlFeedController_listUnmapped_v1","parameters":[{"name":"feedId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["XmlFeed"]}},"/api/v1/xml-feeds/mappings":{"post":{"operationId":"XmlFeedController_upsertMapping_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertMappingDto"}}}},"responses":{"201":{"description":""}},"tags":["XmlFeed"]}},"/api/v1/xml-feeds/mappings/{mappingId}":{"delete":{"operationId":"XmlFeedController_deleteMapping_v1","parameters":[{"name":"mappingId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["XmlFeed"]}},"/api/v1/xml-feeds/{id}":{"get":{"operationId":"XmlFeedController_detail_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["XmlFeed"]},"patch":{"operationId":"XmlFeedController_update_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateXmlFeedDto"}}}},"responses":{"200":{"description":""}},"tags":["XmlFeed"]},"delete":{"operationId":"XmlFeedController_remove_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["XmlFeed"]}},"/api/v1/xml-feeds/{id}/dry-run":{"post":{"operationId":"XmlFeedController_dryRun_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["XmlFeed"]}},"/api/v1/xml-feeds/{id}/sync":{"post":{"operationId":"XmlFeedController_syncNow_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["XmlFeed"]}},"/api/v1/xml-feeds/{id}/runs":{"get":{"operationId":"XmlFeedController_runs_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["XmlFeed"]}},"/api/v1/xml-feeds/{id}/items":{"get":{"operationId":"XmlFeedController_items_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["XmlFeed"]}},"/api/v1/roommate/profile":{"post":{"operationId":"ProfileController_createProfile_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRoommateProfileDto"}}}},"responses":{"201":{"description":"Profil başarıyla oluşturuldu"},"409":{"description":"Profil zaten mevcut"}},"security":[{"bearer":[]}],"summary":"Ev arkadaşı profili oluştur","tags":["Roommate - Profile"]},"delete":{"operationId":"ProfileController_deleteProfile_v1","parameters":[],"responses":{"200":{"description":"Profil silindi"}},"security":[{"bearer":[]}],"summary":"Ev arkadaşı profilini sil","tags":["Roommate - Profile"]}},"/api/v1/roommate/profile/me":{"get":{"operationId":"ProfileController_getMyProfile_v1","parameters":[],"responses":{"200":{"description":"Profil detayları"}},"security":[{"bearer":[]}],"summary":"Kendi ev arkadaşı profilimi getir","tags":["Roommate - Profile"]}},"/api/v1/roommate/profile/stats/public":{"get":{"operationId":"ProfileController_getPublicStats_v1","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Aktif ev arkadaşı profil sayısı (public)","tags":["Roommate - Profile"]}},"/api/v1/roommate/profile/basic-info":{"patch":{"operationId":"ProfileController_updateBasicInfo_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBasicInfoDto"}}}},"responses":{"200":{"description":"Güncellenen profil"}},"security":[{"bearer":[]}],"summary":"Temel bilgileri güncelle (Aşama 1)","tags":["Roommate - Profile"]}},"/api/v1/roommate/profile/{profileId}":{"get":{"operationId":"ProfileController_getPublicProfile_v1","parameters":[{"name":"profileId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Profil bilgileri (filtrelenmiş)"},"404":{"description":"Profil bulunamadı"}},"security":[{"bearer":[]}],"summary":"Başka bir profili görüntüle","tags":["Roommate - Profile"]}},"/api/v1/roommate/profile/lifestyle":{"patch":{"operationId":"ProfileController_updateLifestyle_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateLifestyleDto"}}}},"responses":{"200":{"description":"Güncellenen profil"}},"security":[{"bearer":[]}],"summary":"Yaşam tarzı bilgilerini güncelle (Aşama 2)","tags":["Roommate - Profile"]}},"/api/v1/roommate/profile/housing":{"patch":{"operationId":"ProfileController_updateHousing_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateHousingPreferencesDto"}}}},"responses":{"200":{"description":"Güncellenen profil"}},"security":[{"bearer":[]}],"summary":"Ev tercihlerini güncelle (Aşama 3)","tags":["Roommate - Profile"]}},"/api/v1/roommate/profile/roommate-preferences":{"patch":{"operationId":"ProfileController_updateRoommatePreferences_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRoommatePreferencesDto"}}}},"responses":{"200":{"description":"Güncellenen profil"}},"security":[{"bearer":[]}],"summary":"Ev arkadaşı tercihlerini güncelle (Aşama 4)","tags":["Roommate - Profile"]}},"/api/v1/roommate/profile/status":{"patch":{"operationId":"ProfileController_toggleStatus_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProfileStatusDto"}}}},"responses":{"200":{"description":"Güncellenen profil"}},"security":[{"bearer":[]}],"summary":"Profil durumunu güncelle (is_looking, is_active)","tags":["Roommate - Profile"]}},"/api/v1/roommate/profile/photos":{"post":{"operationId":"PhotoController_uploadPhoto_v1","parameters":[],"responses":{"201":{"description":"Fotoğraf başarıyla yüklendi"},"400":{"description":"Geçersiz dosya veya limit aşıldı"}},"security":[{"bearer":[]}],"summary":"Profil fotoğrafı yükle (max 5)","tags":["Roommate - Photos"]}},"/api/v1/roommate/profile/photos/{photoId}":{"delete":{"operationId":"PhotoController_deletePhoto_v1","parameters":[{"name":"photoId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Fotoğraf silindi"},"404":{"description":"Fotoğraf bulunamadı"}},"security":[{"bearer":[]}],"summary":"Profil fotoğrafını sil","tags":["Roommate - Photos"]}},"/api/v1/roommate/profile/photos/{photoId}/primary":{"patch":{"operationId":"PhotoController_setPrimary_v1","parameters":[{"name":"photoId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Fotoğraf primary olarak ayarlandı"},"404":{"description":"Fotoğraf bulunamadı"}},"security":[{"bearer":[]}],"summary":"Fotoğrafı ana fotoğraf yap","tags":["Roommate - Photos"]}},"/api/v1/roommate/profile/photos/reorder":{"patch":{"operationId":"PhotoController_reorderPhotos_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReorderPhotosDto"}}}},"responses":{"200":{"description":"Sıralama güncellendi"}},"security":[{"bearer":[]}],"summary":"Fotoğraf sıralamasını değiştir","tags":["Roommate - Photos"]}},"/api/v1/roommate/moderation/report":{"post":{"operationId":"ModerationController_createReport_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateReportDto"}}}},"responses":{"201":{"description":"Rapor başarıyla oluşturuldu"},"400":{"description":"Geçersiz rapor"},"409":{"description":"Son 24 saatte zaten raporlanmış"}},"security":[{"bearer":[]}],"summary":"Bir profili raporla","tags":["Roommate - Moderation"]}},"/api/v1/roommate/moderation/block/{profileId}":{"post":{"operationId":"ModerationController_blockUser_v1","parameters":[{"name":"profileId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"201":{"description":"Kullanıcı engellendi"},"400":{"description":"Kendinizi engelleyemezsiniz"},"409":{"description":"Zaten engellenmiş"}},"security":[{"bearer":[]}],"summary":"Bir kullanıcıyı engelle","tags":["Roommate - Moderation"]},"delete":{"operationId":"ModerationController_unblockUser_v1","parameters":[{"name":"profileId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Engel kaldırıldı"},"404":{"description":"Bu kullanıcı engelinizde değil"}},"security":[{"bearer":[]}],"summary":"Engeli kaldır","tags":["Roommate - Moderation"]}},"/api/v1/roommate/moderation/blocks":{"get":{"operationId":"ModerationController_getBlockedProfiles_v1","parameters":[],"responses":{"200":{"description":"Engel listesi"}},"security":[{"bearer":[]}],"summary":"Engellediğim kullanıcılar listesi","tags":["Roommate - Moderation"]}},"/api/v1/roommate/moderation/feedback":{"post":{"operationId":"ModerationController_createFeedback_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFeedbackDto"}}}},"responses":{"201":{"description":"Geri bildirim başarıyla gönderildi"}},"security":[{"bearer":[]}],"summary":"Geri bildirim gönder (öneri, şikayet, teknik sorun)","tags":["Roommate - Moderation"]}},"/api/v1/roommate/reviews":{"post":{"operationId":"ReviewController_createReview_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateReviewDto"}}}},"responses":{"201":{"description":"Değerlendirme kaydedildi"},"400":{"description":"Geçersiz değerlendirme"},"409":{"description":"Zaten değerlendirme yazılmış"}},"security":[{"bearer":[]}],"summary":"Bir eşleşme için değerlendirme yaz","tags":["Roommate - Reviews"]}},"/api/v1/roommate/reviews/received":{"get":{"operationId":"ReviewController_getReceivedReviews_v1","parameters":[{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"Değerlendirme listesi"}},"security":[{"bearer":[]}],"summary":"Aldığım değerlendirmeler","tags":["Roommate - Reviews"]}},"/api/v1/roommate/reviews/profile/{profileId}":{"get":{"operationId":"ReviewController_getProfileReviews_v1","parameters":[{"name":"profileId","required":true,"in":"path","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"Değerlendirme listesi ve ortalama puan"}},"security":[{"bearer":[]}],"summary":"Bir profilin değerlendirmeleri","tags":["Roommate - Reviews"]}},"/api/v1/roommate/notifications":{"get":{"operationId":"NotificationController_getNotifications_v1","parameters":[{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"Bildirim listesi"}},"security":[{"bearer":[]}],"summary":"Bildirim listesi (en yeniden eskiye)","tags":["Roommate - Notifications"]}},"/api/v1/roommate/notifications/{id}/read":{"patch":{"operationId":"NotificationController_markAsRead_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Bildirim okundu"},"404":{"description":"Bildirim bulunamadı"}},"security":[{"bearer":[]}],"summary":"Bildirimi okundu olarak işaretle","tags":["Roommate - Notifications"]}},"/api/v1/roommate/notifications/read-all":{"patch":{"operationId":"NotificationController_markAllAsRead_v1","parameters":[],"responses":{"200":{"description":"Tüm bildirimler okundu"}},"security":[{"bearer":[]}],"summary":"Tüm bildirimleri okundu olarak işaretle","tags":["Roommate - Notifications"]}},"/api/v1/roommate/notifications/unread-count":{"get":{"operationId":"NotificationController_getUnreadCount_v1","parameters":[],"responses":{"200":{"description":"Okunmamış sayısı"}},"security":[{"bearer":[]}],"summary":"Okunmamış bildirim sayısı","tags":["Roommate - Notifications"]}},"/api/v1/roommate/discover/feed":{"get":{"description":"Kullanicinin tercihlerine gore uyumlu profilleri skorlar ve siralar. Daha once swipe edilenler ve blocklananlar haric tutulur. Opsiyonel filtreler: sehir, butce, yas, cinsiyet, meslek.","operationId":"MatchingController_getDiscoverFeed_v1","parameters":[{"name":"city","required":false,"in":"query","description":"Filter by city","schema":{"example":"girne","type":"string"}},{"name":"budgetMin","required":false,"in":"query","description":"Minimum budget","schema":{"example":100,"type":"number"}},{"name":"budgetMax","required":false,"in":"query","description":"Maximum budget","schema":{"example":500,"type":"number"}},{"name":"ageMin","required":false,"in":"query","description":"Minimum age","schema":{"example":20,"type":"number"}},{"name":"ageMax","required":false,"in":"query","description":"Maximum age","schema":{"example":30,"type":"number"}},{"name":"gender","required":false,"in":"query","description":"Filter by gender","schema":{"type":"string","enum":["male","female","unspecified"]}},{"name":"occupation","required":false,"in":"query","description":"Filter by occupation","schema":{"example":"student","type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number","schema":{"default":1,"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Results per page","schema":{"minimum":1,"maximum":50,"default":20,"example":20,"type":"number"}}],"responses":{"200":{"description":"Feed başarıyla oluşturuldu","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"profile":{"type":"object","description":"Profil bilgileri"},"compatibilityScore":{"type":"number","example":85.3},"matchLevel":{"type":"string","enum":["perfect","high","good","moderate","low"],"example":"high"},"commonPoints":{"type":"array","items":{"type":"string"},"example":["Ortak şehir: Girne","Bütçeler uyumlu"]},"isHighlighted":{"type":"boolean","example":true},"isPerfectMatch":{"type":"boolean","example":false}}}},"total":{"type":"number","example":42},"page":{"type":"number","example":1},"limit":{"type":"number","example":20},"hasMore":{"type":"boolean","example":true}}}}}},"401":{"description":"Kimlik doğrulama gerekli"},"404":{"description":"Profil bulunamadı"}},"security":[{"bearer":[]}],"summary":"Kesifet feed - uyumlu ev arkadasi adaylari","tags":["Roommate - Discover"]}},"/api/v1/roommate/discover/compatibility/{targetProfileId}":{"get":{"description":"İki profil arasındaki uyumluluk skorunu 6 kategoride (konum, bütçe, yaşam tarzı, kültürel uyum, ev tercihi, kişilik) detaylı olarak hesaplar. Ortak noktalar ve uyarılar listesi de döndürülür.","operationId":"MatchingController_getCompatibilityDetail_v1","parameters":[{"name":"targetProfileId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Uyumluluk raporu","content":{"application/json":{"schema":{"type":"object","properties":{"totalScore":{"type":"number","example":85.3},"matchLevel":{"type":"string","enum":["perfect","high","good","moderate","low"],"example":"high"},"breakdown":{"type":"object","properties":{"location":{"type":"object","properties":{"score":{"type":"number","example":0.8},"weight":{"type":"number","example":0.25},"weightedScore":{"type":"number","example":0.2},"details":{"type":"string","example":"2 ortak şehir: Girne, Lefkoşa"}}},"budget":{"type":"object"},"lifestyle":{"type":"object"},"cultural":{"type":"object"},"housing":{"type":"object"},"personality":{"type":"object"}}},"commonPoints":{"type":"array","items":{"type":"string"},"example":["Ortak şehir: Girne","Bütçeler uyumlu","Sigara alışkanlığı uyumlu"]},"warnings":{"type":"array","items":{"type":"string"},"example":["Uyku düzeni çok farklı"]}}}}}},"401":{"description":"Kimlik doğrulama gerekli"},"403":{"description":"Kendi profilinizle uyumluluk kontrolü yapılamaz"},"404":{"description":"Hedef profil bulunamadı"}},"security":[{"bearer":[]}],"summary":"İki profil arası uyumluluk detayı","tags":["Roommate - Discover"]}},"/api/v1/roommate/discover/swipe":{"post":{"description":"Bir profili beğen (like), geç (pass) veya süper beğen (super_like). Karşılıklı like tespit edilirse otomatik match ve sohbet oluşturulur.","operationId":"MatchingController_createSwipe_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["swipedProfileId","direction"],"properties":{"swipedProfileId":{"type":"number","example":42},"direction":{"type":"string","enum":["like","pass","super_like"],"example":"like"}}}}}},"responses":{"201":{"description":"Swipe kaydedildi","content":{"application/json":{"schema":{"type":"object","properties":{"swiped":{"type":"boolean","example":true},"direction":{"type":"string","example":"like"},"isMatch":{"type":"boolean","example":true},"match":{"type":"object","properties":{"id":{"type":"number"},"compatibilityScore":{"type":"number"},"conversationId":{"type":"number"}}}}}}}},"400":{"description":"Kendinize swipe yapamazsınız"},"404":{"description":"Hedef profil bulunamadı"}},"security":[{"bearer":[]}],"summary":"Swipe at (like / pass / super_like)","tags":["Roommate - Discover"]}},"/api/v1/roommate/matches":{"get":{"operationId":"MatchesController_getMatches_v1","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Eşleşme listesi","tags":["Roommate - Matches"]}},"/api/v1/roommate/matches/{matchId}":{"get":{"operationId":"MatchesController_getMatchDetail_v1","parameters":[{"name":"matchId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Eşleşme detayı","tags":["Roommate - Matches"]}},"/api/v1/roommate/matches/{matchId}/status":{"patch":{"operationId":"MatchesController_updateMatchStatus_v1","parameters":[{"name":"matchId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Eşleşme durumu güncelle","tags":["Roommate - Matches"]}},"/api/v1/roommate/chat/conversations":{"get":{"description":"Kullanıcının tüm aktif sohbetlerini, son mesaj önizlemesi, okunmamış sayacı ve karşı tarafın online durumu ile döndürür.","operationId":"ChatController_getConversations_v1","parameters":[{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":20,"type":"number"}}],"responses":{"200":{"description":"Sohbet listesi başarıyla alındı","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"}},"total":{"type":"number"},"page":{"type":"number"},"limit":{"type":"number"}}}}}}},"security":[{"JWT-auth":[]}],"summary":"Sohbet listesi","tags":["Roommate - Chat"]}},"/api/v1/roommate/chat/conversations/{id}/messages":{"get":{"description":"Belirtilen sohbetin mesaj geçmişini en yeniden eskiye sıralı döndürür. Cursor parametresi bir önceki sayfanın son mesajının createdAt değeridir.","operationId":"ChatController_getMessages_v1","parameters":[{"name":"id","required":true,"in":"path","description":"Conversation ID","schema":{"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"ISO date string — önceki sayfanın son mesaj tarihi","schema":{"example":"2026-01-15T10:30:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"example":50,"type":"number"}}],"responses":{"200":{"description":"Mesaj geçmişi başarıyla alındı","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"}},"nextCursor":{"type":"string","nullable":true},"hasMore":{"type":"boolean"},"limit":{"type":"number"}}}}}},"403":{"description":"Bu konuşmaya erişim yetkiniz yok"},"404":{"description":"Konuşma bulunamadı"}},"security":[{"JWT-auth":[]}],"summary":"Mesaj geçmişi (cursor-based pagination)","tags":["Roommate - Chat"]},"post":{"description":"WebSocket bağlantısı olmaksızın mesaj gönderir. Mesaj DB'ye kaydedilir ve WebSocket room'una emit edilir, böylece online kullanıcılar anlık olarak alır.","operationId":"ChatController_sendMessageRest_v1","parameters":[{"name":"id","required":true,"in":"path","description":"Conversation ID","schema":{"type":"number"}}],"responses":{"201":{"description":"Mesaj başarıyla gönderildi"},"400":{"description":"Geçersiz mesaj içeriği"},"403":{"description":"Bu konuşmaya mesaj gönderme yetkiniz yok"},"404":{"description":"Konuşma bulunamadı"}},"security":[{"JWT-auth":[]}],"summary":"Mesaj gönder (REST fallback)","tags":["Roommate - Chat"]}},"/api/v1/roommate/chat/conversations/{id}/read":{"patch":{"description":"Belirtilen sohbetteki tüm okunmamış mesajları okundu olarak işaretler.","operationId":"ChatController_markConversationRead_v1","parameters":[{"name":"id","required":true,"in":"path","description":"Conversation ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Mesajlar okundu olarak işaretlendi"},"403":{"description":"Bu konuşmaya erişim yetkiniz yok"}},"security":[{"JWT-auth":[]}],"summary":"Sohbeti okundu işaretle","tags":["Roommate - Chat"]}},"/api/v1/roommate/chat/unread-count":{"get":{"description":"Kullanıcının tüm sohbetlerindeki toplam okunmamış mesaj sayısını döndürür. Redis cache kullanılır (DB fallback var).","operationId":"ChatController_getUnreadCount_v1","parameters":[],"responses":{"200":{"description":"Okunmamış mesaj sayısı","content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"number","example":3}}}}}}},"security":[{"JWT-auth":[]}],"summary":"Toplam okunmamış mesaj sayısı","tags":["Roommate - Chat"]}},"/api/v1/roommate/matches/{matchId}/ai-recommendations":{"get":{"operationId":"AiRecommendationController_getRecommendations_v1","parameters":[{"name":"matchId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["AiRecommendation"]}},"/api/v1/roommate/matches/{matchId}/icebreakers":{"get":{"operationId":"AiIcebreakerController_getIcebreakers_v1","parameters":[{"name":"matchId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["AiIcebreaker"]}},"/api/v1/admin/roommate/stats":{"get":{"operationId":"RoommateAdminController_getStats_v1","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get roommate module statistics","tags":["Admin — Ev Arkadaşım"]}},"/api/v1/admin/roommate/pending-reports-count":{"get":{"operationId":"RoommateAdminController_getPendingReportCount_v1","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get pending reports count (for sidebar badge)","tags":["Admin — Ev Arkadaşım"]}},"/api/v1/admin/roommate/profiles":{"get":{"operationId":"RoommateAdminController_getProfiles_v1","parameters":[{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["active","inactive","suspended","all"]}},{"name":"occupation","required":false,"in":"query","schema":{"type":"string","enum":["student","casino_worker","professional","freelance","tourist","digital_nomad","other"]}},{"name":"city","required":false,"in":"query","schema":{"type":"string"}},{"name":"isPremium","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"isVerified","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"sortBy","required":false,"in":"query","schema":{"default":"created_at","type":"string"}},{"name":"sortOrder","required":false,"in":"query","schema":{"default":"DESC","type":"string","enum":["ASC","DESC"]}},{"name":"page","required":false,"in":"query","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"default":20,"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List profiles with filters and pagination","tags":["Admin — Ev Arkadaşım"]}},"/api/v1/admin/roommate/profiles/{id}":{"get":{"operationId":"RoommateAdminController_getProfileDetail_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get profile detail (admin view)","tags":["Admin — Ev Arkadaşım"]},"delete":{"operationId":"RoommateAdminController_deleteProfile_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Profile deleted successfully"}},"security":[{"bearer":[]}],"summary":"Permanently delete a profile","tags":["Admin — Ev Arkadaşım"]}},"/api/v1/admin/roommate/profiles/{id}/status":{"patch":{"operationId":"RoommateAdminController_updateProfileStatus_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUpdateProfileStatusDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Update profile status (active/suspended/banned)","tags":["Admin — Ev Arkadaşım"]}},"/api/v1/admin/roommate/reports":{"get":{"operationId":"RoommateAdminController_getReports_v1","parameters":[{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["pending","reviewing","action_taken","dismissed"]}},{"name":"page","required":false,"in":"query","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"default":20,"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List reports with optional status filter","tags":["Admin — Ev Arkadaşım"]}},"/api/v1/admin/roommate/reports/{id}":{"get":{"operationId":"RoommateAdminController_getReportDetail_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get report detail","tags":["Admin — Ev Arkadaşım"]},"patch":{"operationId":"RoommateAdminController_reviewReport_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminReviewReportDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Review a report (action_taken or dismissed)","tags":["Admin — Ev Arkadaşım"]}},"/api/v1/admin/roommate/matches":{"get":{"operationId":"RoommateAdminController_getMatches_v1","parameters":[{"name":"status","required":false,"in":"query","schema":{"type":"string"}},{"name":"startDate","required":false,"in":"query","schema":{"type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"default":20,"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List matches (statistics purposes)","tags":["Admin — Ev Arkadaşım"]}},"/api/v1/admin/roommate/ai-usage":{"get":{"operationId":"RoommateAdminController_getAiUsage_v1","parameters":[{"name":"startDate","required":true,"in":"query","schema":{"type":"string"}},{"name":"endDate","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get AI usage statistics","tags":["Admin — Ev Arkadaşım"]}},"/api/v1/admin/roommate/ai-usage/costs":{"get":{"operationId":"RoommateAdminController_getAiCosts_v1","parameters":[{"name":"startDate","required":true,"in":"query","schema":{"type":"string"}},{"name":"endDate","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get AI cost report (date range filtered)","tags":["Admin — Ev Arkadaşım"]}},"/api/v1/admin/roommate/feedbacks":{"get":{"operationId":"RoommateAdminController_getFeedbacks_v1","parameters":[{"name":"page","required":true,"in":"query","schema":{"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"type":"number"}},{"name":"isRead","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List user feedbacks (suggestions, complaints, bugs)","tags":["Admin — Ev Arkadaşım"]}},"/api/v1/admin/roommate/feedbacks/{id}/read":{"patch":{"operationId":"RoommateAdminController_markFeedbackRead_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Mark a feedback as read","tags":["Admin — Ev Arkadaşım"]}},"/api/v1/admin/roommate/feedbacks/unread-count":{"get":{"operationId":"RoommateAdminController_getUnreadFeedbackCount_v1","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get unread feedback count (for badge)","tags":["Admin — Ev Arkadaşım"]}},"/api/v1/search":{"get":{"operationId":"SearchController_search_v1","parameters":[{"name":"q","required":true,"in":"query","description":"Search term (min 2 chars)","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Max results per category (default 5, max 20)","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"summary":"Global quick search across properties, agents, and agencies","tags":["search"]}},"/api/v1/blog-agent/overview":{"get":{"operationId":"BlogAgentController_overview_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["BlogAgent"]}},"/api/v1/blog-agent/runs":{"get":{"operationId":"BlogAgentController_listRuns_v1","parameters":[{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"status","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["BlogAgent"]}},"/api/v1/blog-agent/runs/{id}":{"get":{"operationId":"BlogAgentController_getRun_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["BlogAgent"]}},"/api/v1/blog-agent/trigger":{"post":{"operationId":"BlogAgentController_trigger_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerAgentDto"}}}},"responses":{"201":{"description":""}},"tags":["BlogAgent"]}},"/api/v1/blog-agent/settings":{"get":{"operationId":"BlogAgentController_getSettings_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["BlogAgent"]},"patch":{"operationId":"BlogAgentController_updateSettings_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["BlogAgent"]}},"/api/v1/blog-agent/topics":{"get":{"operationId":"BlogAgentController_listTopics_v1","parameters":[{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["BlogAgent"]},"post":{"operationId":"BlogAgentController_createTopic_v1","parameters":[],"responses":{"201":{"description":""}},"tags":["BlogAgent"]}},"/api/v1/blog-agent/topics/{id}":{"patch":{"operationId":"BlogAgentController_updateTopic_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["BlogAgent"]},"delete":{"operationId":"BlogAgentController_removeTopic_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["BlogAgent"]}},"/api/v1/blog-agent/personas":{"get":{"operationId":"BlogAgentController_listPersonas_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["BlogAgent"]}},"/api/v1/blog-agent/personas/{id}/toggle":{"patch":{"operationId":"BlogAgentController_togglePersona_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["BlogAgent"]}},"/api/v1/detective/pricing":{"get":{"operationId":"DetectivePublicController_getPricing_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["DetectivePublic"]}},"/api/v1/detective/profiles":{"get":{"operationId":"DetectivePublicController_listDetectives_v1","parameters":[{"name":"city","required":true,"in":"query","schema":{"type":"string"}},{"name":"specialty","required":true,"in":"query","schema":{"type":"string"}},{"name":"language","required":true,"in":"query","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"offset","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["DetectivePublic"]}},"/api/v1/detective/profiles/{slug}":{"get":{"operationId":"DetectivePublicController_getDetectiveBySlug_v1","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["DetectivePublic"]}},"/api/v1/detective/profiles/{slug}/reviews":{"get":{"operationId":"DetectivePublicController_getDetectiveReviews_v1","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"offset","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["DetectivePublic"]}},"/api/v1/detective/requests":{"post":{"operationId":"DetectiveController_createRequest_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDetectiveRequestDto"}}}},"responses":{"201":{"description":""}},"tags":["Detective"]}},"/api/v1/detective/me/requests":{"get":{"operationId":"DetectiveController_getMyRequests_v1","parameters":[{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"offset","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Detective"]}},"/api/v1/detective/me/requests/{id}":{"get":{"operationId":"DetectiveController_getMyRequest_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Detective"]},"delete":{"operationId":"DetectiveController_cancelMyRequest_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Detective"]}},"/api/v1/detective/me/requests/{id}/complete":{"post":{"operationId":"DetectiveController_markMyRequestCompleted_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"201":{"description":""}},"tags":["Detective"]}},"/api/v1/detective/me/requests/{id}/review":{"post":{"operationId":"DetectiveController_reviewRequest_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDetectiveReviewDto"}}}},"responses":{"201":{"description":""}},"tags":["Detective"]}},"/api/v1/detective/me/leads/{leadId}/react":{"post":{"operationId":"DetectiveController_reactToLead_v1","parameters":[{"name":"leadId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"201":{"description":""}},"tags":["Detective"]}},"/api/v1/detective/apply":{"post":{"operationId":"DetectiveController_applyDetective_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplyDetectiveDto"}}}},"responses":{"201":{"description":""}},"tags":["Detective"]}},"/api/v1/detective/me/profile":{"get":{"operationId":"DetectiveController_getMyDetectiveProfile_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Detective"]},"patch":{"operationId":"DetectiveController_updateMyDetectiveProfile_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDetectiveProfileDto"}}}},"responses":{"200":{"description":""}},"tags":["Detective"]}},"/api/v1/detective/pool":{"get":{"operationId":"DetectiveController_getOpenPool_v1","parameters":[{"name":"city","required":true,"in":"query","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"offset","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Detective"]}},"/api/v1/detective/jobs":{"get":{"operationId":"DetectiveController_getMyJobs_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Detective"]}},"/api/v1/detective/jobs/{id}":{"get":{"operationId":"DetectiveController_getMyJob_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Detective"]}},"/api/v1/detective/jobs/{id}/start":{"post":{"operationId":"DetectiveController_startJob_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"201":{"description":""}},"tags":["Detective"]}},"/api/v1/detective/jobs/{id}/report":{"post":{"operationId":"DetectiveController_submitReport_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitReportDto"}}}},"responses":{"201":{"description":""}},"tags":["Detective"]}},"/api/v1/detective/jobs/{id}/leads":{"post":{"operationId":"DetectiveController_submitLead_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitLeadDto"}}}},"responses":{"201":{"description":""}},"tags":["Detective"]}},"/api/v1/detective/requests/{id}/messages":{"get":{"operationId":"DetectiveController_getMessages_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Detective"]},"post":{"operationId":"DetectiveController_sendMessage_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendDetectiveMessageDto"}}}},"responses":{"201":{"description":""}},"tags":["Detective"]}},"/api/v1/admin/detective/profiles":{"get":{"operationId":"DetectiveAdminController_listProfiles_v1","parameters":[{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"offset","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["DetectiveAdmin"]}},"/api/v1/admin/detective/profiles/{id}/approve":{"post":{"operationId":"DetectiveAdminController_approveProfile_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"201":{"description":""}},"tags":["DetectiveAdmin"]}},"/api/v1/admin/detective/profiles/{id}/suspend":{"post":{"operationId":"DetectiveAdminController_suspendProfile_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"201":{"description":""}},"tags":["DetectiveAdmin"]}},"/api/v1/admin/detective/requests":{"get":{"operationId":"DetectiveAdminController_listRequests_v1","parameters":[{"name":"detectiveId","required":true,"in":"query","schema":{"type":"string"}},{"name":"userId","required":true,"in":"query","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"offset","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["DetectiveAdmin"]}},"/api/v1/admin/detective/requests/{id}":{"get":{"operationId":"DetectiveAdminController_getRequest_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["DetectiveAdmin"]}},"/api/v1/admin/detective/requests/{id}/mark-paid":{"post":{"operationId":"DetectiveAdminController_markPaid_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"201":{"description":""}},"tags":["DetectiveAdmin"]}},"/api/v1/admin/detective/requests/{id}/assign":{"post":{"operationId":"DetectiveAdminController_assignDetective_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignDetectiveDto"}}}},"responses":{"201":{"description":""}},"tags":["DetectiveAdmin"]}},"/api/v1/admin/detective/requests/{id}/approve-report":{"post":{"operationId":"DetectiveAdminController_approveReport_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"201":{"description":""}},"tags":["DetectiveAdmin"]}},"/api/v1/admin/detective/requests/{id}/reject-report":{"post":{"operationId":"DetectiveAdminController_rejectReport_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminRejectionDto"}}}},"responses":{"201":{"description":""}},"tags":["DetectiveAdmin"]}},"/api/v1/admin/detective/leads/{leadId}/approve":{"post":{"operationId":"DetectiveAdminController_approveLead_v1","parameters":[{"name":"leadId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"201":{"description":""}},"tags":["DetectiveAdmin"]}},"/api/v1/admin/detective/leads/{leadId}/reject":{"post":{"operationId":"DetectiveAdminController_rejectLead_v1","parameters":[{"name":"leadId","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminRejectionDto"}}}},"responses":{"201":{"description":""}},"tags":["DetectiveAdmin"]}},"/api/v1/admin/detective/requests/{id}/cancel":{"post":{"operationId":"DetectiveAdminController_adminCancelRequest_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminRejectionDto"}}}},"responses":{"201":{"description":""}},"tags":["DetectiveAdmin"]}},"/api/v1/drone/config":{"get":{"operationId":"DronePublicController_getConfig_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["DronePublic"]}},"/api/v1/drone/leads":{"post":{"operationId":"DronePublicController_createLead_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDroneLeadDto"}}}},"responses":{"201":{"description":""}},"tags":["DronePublic"]}},"/api/v1/admin/drone/config":{"get":{"operationId":"DroneAdminController_getConfig_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["DroneAdmin"]},"put":{"operationId":"DroneAdminController_updateConfig_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["DroneAdmin"]}},"/api/v1/admin/drone/leads/stats":{"get":{"operationId":"DroneAdminController_stats_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["DroneAdmin"]}},"/api/v1/admin/drone/leads":{"get":{"operationId":"DroneAdminController_list_v1","parameters":[{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"offset","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["DroneAdmin"]}},"/api/v1/admin/drone/leads/{id}":{"get":{"operationId":"DroneAdminController_detail_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["DroneAdmin"]},"delete":{"operationId":"DroneAdminController_remove_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["DroneAdmin"]}},"/api/v1/admin/drone/leads/{id}/status":{"patch":{"operationId":"DroneAdminController_updateStatus_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDroneLeadStatusDto"}}}},"responses":{"200":{"description":""}},"tags":["DroneAdmin"]}},"/api/v1/property-requests":{"post":{"operationId":"PropertyRequestsPublicController_create_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePropertyRequestDto"}}}},"responses":{"201":{"description":""}},"tags":["Property Requests"]}},"/api/v1/property-requests/match-count":{"get":{"operationId":"PropertyRequestsPublicController_matchCount_v1","parameters":[{"name":"listingType","required":true,"in":"query","schema":{"type":"string"}},{"name":"categoryId","required":true,"in":"query","schema":{"type":"string"}},{"name":"subCategoryId","required":true,"in":"query","schema":{"type":"string"}},{"name":"city","required":true,"in":"query","schema":{"type":"string"}},{"name":"district","required":true,"in":"query","schema":{"type":"string"}},{"name":"bedroomsMin","required":true,"in":"query","schema":{"type":"string"}},{"name":"bedroomsMax","required":true,"in":"query","schema":{"type":"string"}},{"name":"bathroomsMin","required":true,"in":"query","schema":{"type":"string"}},{"name":"areaMin","required":true,"in":"query","schema":{"type":"string"}},{"name":"areaMax","required":true,"in":"query","schema":{"type":"string"}},{"name":"budgetMin","required":true,"in":"query","schema":{"type":"string"}},{"name":"budgetMax","required":true,"in":"query","schema":{"type":"string"}},{"name":"currency","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Property Requests"]}},"/api/v1/admin/property-requests/stats":{"get":{"operationId":"PropertyRequestsAdminController_stats_v1","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Admin - Property Requests"]}},"/api/v1/admin/property-requests/heatmap":{"get":{"operationId":"PropertyRequestsAdminController_heatmap_v1","parameters":[{"name":"limit","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Admin - Property Requests"]}},"/api/v1/admin/property-requests/export":{"get":{"operationId":"PropertyRequestsAdminController_exportCsv_v1","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Admin - Property Requests"]}},"/api/v1/admin/property-requests/run-matching":{"post":{"operationId":"PropertyRequestsAdminController_runMatching_v1","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["Admin - Property Requests"]}},"/api/v1/admin/property-requests":{"get":{"operationId":"PropertyRequestsAdminController_list_v1","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Admin - Property Requests"]}},"/api/v1/admin/property-requests/{id}":{"get":{"operationId":"PropertyRequestsAdminController_detail_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Admin - Property Requests"]},"delete":{"operationId":"PropertyRequestsAdminController_remove_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Admin - Property Requests"]}},"/api/v1/admin/property-requests/{id}/refresh-matches":{"post":{"operationId":"PropertyRequestsAdminController_refreshMatches_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["Admin - Property Requests"]}},"/api/v1/admin/property-requests/{id}/status":{"patch":{"operationId":"PropertyRequestsAdminController_updateStatus_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePropertyRequestStatusDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["Admin - Property Requests"]}},"/api/v1/admin/analytics/overview":{"get":{"operationId":"AnalyticsAdminController_getOverview_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Özet kartlar: ziyaretçi, oturum, dönüşüm + değişim","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/timeseries":{"get":{"operationId":"AnalyticsAdminController_getTimeseries_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Zaman serisi (gün/hafta/ay kırılımı)","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/realtime":{"get":{"operationId":"AnalyticsAdminController_getRealtime_v1","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Şu anda sitede olanlar (son 5 dakika)","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/summary":{"get":{"operationId":"AnalyticsAdminController_getSummary_v1","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Tüm zamanlar toplamları (admin ana sayfa kartı)","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/pages":{"get":{"operationId":"AnalyticsAdminController_getTopPages_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"En çok görüntülenen sayfalar","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/page-types":{"get":{"operationId":"AnalyticsAdminController_getPageTypes_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Sayfa tipi kırılımı (ilan/liste/blog...)","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/sources":{"get":{"operationId":"AnalyticsAdminController_getSources_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Trafik kanalları (son tıklama)","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/sources/details":{"get":{"operationId":"AnalyticsAdminController_getSourceDetails_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Kaynak bazlı detay (google, facebook...)","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/sources/first-touch":{"get":{"operationId":"AnalyticsAdminController_getFirstTouch_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"İlk temas kanalları — ziyaretçiyi kim getirdi","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/campaigns":{"get":{"operationId":"AnalyticsAdminController_getCampaigns_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"UTM kampanya performansı","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/geo":{"get":{"operationId":"AnalyticsAdminController_getGeo_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Ülke bazlı ziyaretçi dağılımı","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/geo/cities":{"get":{"operationId":"AnalyticsAdminController_getCities_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Ziyaretçinin fiziksel şehri (GeoIP)","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/devices":{"get":{"operationId":"AnalyticsAdminController_getDevices_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Cihaz, tarayıcı ve işletim sistemi dağılımı","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/locales":{"get":{"operationId":"AnalyticsAdminController_getLocales_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Dil tercihi dağılımı","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/heatmap":{"get":{"operationId":"AnalyticsAdminController_getHeatmap_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Saat × haftanın günü ısı haritası","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/funnel":{"get":{"operationId":"AnalyticsAdminController_getFunnel_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Dönüşüm hunisi: ziyaret → ilan → iletişim","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/retention":{"get":{"operationId":"AnalyticsAdminController_getRetention_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Geri dönen ziyaretçi kohortları","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/demand/map":{"get":{"operationId":"AnalyticsAdminController_getDemandMap_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Bölge bazlı talep ısı haritası + fırsat seviyesi","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/demand/categories":{"get":{"operationId":"AnalyticsAdminController_getDemandByCategory_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Kategori ve ilan tipi bazlı talep","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/demand/supply-gaps":{"get":{"operationId":"AnalyticsAdminController_getSupplyGaps_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Arz açıkları — nerede ilan eksik?","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/demand/trending":{"get":{"operationId":"AnalyticsAdminController_getTrendingRegions_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Yükselen bölgeler (momentum sıralı)","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/demand/price-gaps":{"get":{"operationId":"AnalyticsAdminController_getPriceGaps_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Fiyat makası: ilan fiyatı vs alıcı bütçesi","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/demand/geo-matrix":{"get":{"operationId":"AnalyticsAdminController_getGeoDemandMatrix_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Hangi ülke hangi bölgeyi arıyor?","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/demand/buyer-profiles":{"get":{"operationId":"AnalyticsAdminController_getBuyerProfiles_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Ülke bazlı alıcı profilleri (persona kartları)","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/search/terms":{"get":{"operationId":"AnalyticsAdminController_getSearchTerms_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"En çok aranan terimler + CTR","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/search/zero-results":{"get":{"operationId":"AnalyticsAdminController_getZeroResults_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Sonuç dönmeyen aramalar — karşılanmamış talep","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/performance/properties":{"get":{"operationId":"AnalyticsAdminController_getPropertyPerformance_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"İlan performans sıralaması","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/performance/underperforming":{"get":{"operationId":"AnalyticsAdminController_getUnderperforming_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Görüntülenip dönüşmeyen ilanlar + teşhis","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/performance/agents":{"get":{"operationId":"AnalyticsAdminController_getAgentPerformance_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Danışman sıralaması","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/performance/agencies":{"get":{"operationId":"AnalyticsAdminController_getAgencyPerformance_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Ofis sıralaması","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/alerts":{"get":{"operationId":"AnalyticsAdminController_listAlerts_v1","parameters":[{"name":"unread","required":true,"in":"query","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Otomatik üretilen anomali uyarıları","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/alerts/unread-count":{"get":{"operationId":"AnalyticsAdminController_getUnreadCount_v1","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Okunmamış uyarı sayısı (menü rozeti)","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/alerts/{id}/read":{"patch":{"operationId":"AnalyticsAdminController_markRead_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Uyarıyı okundu işaretle","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/alerts/read-all":{"patch":{"operationId":"AnalyticsAdminController_markAllRead_v1","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Tüm uyarıları okundu işaretle","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/rebuild":{"post":{"operationId":"AnalyticsAdminController_rebuild_v1","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Belirtilen tarih aralığı için rollup yeniden üret","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/rollup/run":{"post":{"operationId":"AnalyticsAdminController_runRollup_v1","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Bir günün rollup'ını hemen hesapla (senkron)","tags":["Admin - Analytics"]}},"/api/v1/admin/analytics/alerts/scan":{"post":{"operationId":"AnalyticsAdminController_scanAlerts_v1","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Anomali taramasını manuel çalıştır","tags":["Admin - Analytics"]}},"/api/v1/agent/analytics/dashboard":{"get":{"operationId":"AnalyticsAgentController_getDashboard_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Danışmanın kendi performans panosu","tags":["Agent - Analytics"]}},"/api/v1/agent/analytics/properties":{"get":{"operationId":"AnalyticsAgentController_getProperties_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Kendi ilanlarımın performansı","tags":["Agent - Analytics"]}},"/api/v1/agent/analytics/properties/underperforming":{"get":{"operationId":"AnalyticsAgentController_getUnderperforming_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Dönüşmeyen ilanlarım ve olası nedenleri","tags":["Agent - Analytics"]}},"/api/v1/agent/analytics/demand/map":{"get":{"operationId":"AnalyticsAgentController_getDemandMap_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Bölgesel talep haritası","tags":["Agent - Analytics"]}},"/api/v1/agent/analytics/demand/supply-gaps":{"get":{"operationId":"AnalyticsAgentController_getSupplyGaps_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Arz açığı olan bölgeler","tags":["Agent - Analytics"]}},"/api/v1/agent/analytics/demand/trending":{"get":{"operationId":"AnalyticsAgentController_getTrending_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Yükselen bölgeler","tags":["Agent - Analytics"]}},"/api/v1/agent/analytics/search/zero-results":{"get":{"operationId":"AnalyticsAgentController_getZeroResults_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Sonuç dönmeyen aramalar","tags":["Agent - Analytics"]}},"/api/v1/agent/analytics/demand/buyer-profiles":{"get":{"operationId":"AnalyticsAgentController_getBuyerProfiles_v1","parameters":[{"name":"preset","required":false,"in":"query","description":"Tarih aralığı kısayolu. Verilmezse 30d kabul edilir.","schema":{"default":"30d","type":"string","enum":["today","yesterday","7d","30d","90d","12m","mtd","lm","ytd","all","custom"]}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (YYYY-MM-DD). preset='custom' ile kullanılır.","schema":{"example":"2025-01-01","type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (YYYY-MM-DD), dahil.","schema":{"example":"2025-01-31","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Satır sayısı (1-500)","schema":{"default":20,"type":"number"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (1 tabanlı)","schema":{"default":1,"type":"number"}},{"name":"channel","required":false,"in":"query","description":"Trafik kanalı","schema":{"type":"string","enum":["direct","organic_search","paid_search","paid_social","organic_social","referral","email","sms","affiliate","ai_assistant","internal","unknown"]}},{"name":"country","required":false,"in":"query","description":"Ülke kodu (ISO 3166-1 alpha-2)","schema":{"example":"TR","type":"string"}},{"name":"device","required":false,"in":"query","description":"Cihaz tipi","schema":{"type":"string","enum":["desktop","mobile","tablet","bot","other"]}},{"name":"locale","required":false,"in":"query","description":"Dil kodu","schema":{"example":"tr","type":"string"}},{"name":"city","required":false,"in":"query","description":"İlgilenilen şehir slug (emlak hedefi)","schema":{"example":"girne","type":"string"}},{"name":"district","required":false,"in":"query","description":"İlgilenilen bölge/ilçe slug","schema":{"example":"alsancak","type":"string"}},{"name":"listingType","required":false,"in":"query","description":"İlan tipi (satilik/kiralik ...)","schema":{"example":"satilik","type":"string"}},{"name":"categoryId","required":false,"in":"query","description":"Kategori ID","schema":{"type":"number"}},{"name":"agentId","required":false,"in":"query","description":"Emlak danışmanı (agent) ID","schema":{"type":"number"}},{"name":"agencyId","required":false,"in":"query","description":"Emlak ofisi (agency) ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Ülke bazlı alıcı profilleri","tags":["Agent - Analytics"]}},"/api/v1/health":{"get":{"operationId":"HealthController_check_v1","parameters":[],"responses":{"200":{"description":""}},"summary":"Service health check","tags":["health"]}}},"info":{"title":"İlancik.com API","description":"KKTC (Northern Cyprus) real-estate platform — RESTful API.\n\nRead endpoints under `/properties`, `/locations` and `/property-categories` are public. Prices and availability are live data and change daily.\n\nAI agents: see https://ilancik.com/llms.txt for a platform overview and https://ilancik.com/mcp for an MCP server with ready-made search tools.","version":"1.0","contact":{"name":"İlancik.com","url":"https://ilancik.com","email":"info@ilancik.com"}},"tags":[{"name":"properties","description":"Property listings endpoints"},{"name":"locations","description":"Cities and districts"},{"name":"agents","description":"Agent profile endpoints"},{"name":"health","description":"Service health"},{"name":"auth","description":"Authentication endpoints"},{"name":"users","description":"User management endpoints"},{"name":"favorites","description":"User favorites endpoints"},{"name":"messages","description":"Messaging system endpoints"},{"name":"admin","description":"Admin panel endpoints"},{"name":"agencies","description":"Real-estate agency endpoints"},{"name":"public-agency-api","description":"Partner API — agency data & listing reads (X-API-Key)"},{"name":"partner-write-api","description":"Partner API — writes: listings (properties:write), bulk imports, agents (agents:write), agency profile (agency:write) and upload signatures (uploads:write). All require an HMAC signature + single-use nonce. See PARTNER_API_DOCUMENTATION.md for signature generation, quota rules and the async import job flow."},{"name":"api-keys","description":"Partner API key management (admin only)"}],"servers":[{"url":"https://ilancik.com/api/v1","description":"Production"}],"components":{"securitySchemes":{"JWT-auth":{"scheme":"bearer","bearerFormat":"JWT","type":"http","name":"JWT","description":"Enter JWT token","in":"header"},"agency-api-key":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Agency Public API key (see /public/agency endpoints)"}},"schemas":{"RegisterDto":{"type":"object","properties":{"email":{"type":"string","example":"john@example.com"},"password":{"type":"string","example":"password123","minLength":6},"firstName":{"type":"string","example":"John"},"lastName":{"type":"string","example":"Doe"},"phone":{"type":"string","example":"+905338765432"},"whatsapp":{"type":"string","example":"+905338765432"},"terms":{"type":"boolean","example":true},"role":{"type":"string","example":"user","enum":["user","agent"]}},"required":["email","password","firstName","lastName","terms"]},"LoginDto":{"type":"object","properties":{"email":{"type":"string","example":"john@example.com"},"password":{"type":"string","example":"password123","minLength":6}},"required":["email","password"]},"CreateTemplateDto":{"type":"object","properties":{}},"UpdateTemplateDto":{"type":"object","properties":{}},"UpdateSettingDto":{"type":"object","properties":{}},"CreatePropertyDto":{"type":"object","properties":{"title":{"type":"string","description":"Property title"},"description":{"type":"string","description":"Property description"},"keywords":{"description":"SEO keywords (max 5)","type":"array","items":{"type":"string"}},"price":{"type":"number","description":"Property price"},"currency":{"type":"string","description":"Currency code","default":"TRY"},"categoryId":{"type":"number","description":"Category ID"},"subCategoryId":{"type":"number","description":"Sub-Category ID"},"listingType":{"type":"string","description":"Listing type","enum":["sale","rent","daily_rent","project"]},"bedrooms":{"type":"number","description":"Number of bedrooms"},"bathrooms":{"type":"number","description":"Number of bathrooms"},"area":{"type":"number","description":"Area in square meters"},"location":{"type":"string","description":"Full address"},"city":{"type":"string","description":"City"},"district":{"type":"string","description":"District"},"locationId":{"type":"number","description":"Location ID"},"latitude":{"type":"number","description":"Latitude"},"longitude":{"type":"number","description":"Longitude"},"images":{"description":"Property images URLs","type":"array","items":{"type":"string"}},"featuredImageIndex":{"type":"number","description":"Index of the featured/main image in images array","default":0},"videoUrl":{"type":"string","description":"Video URL (Google Drive, YouTube, or Cloudinary)"},"videoType":{"type":"string","description":"Video type","enum":["google_drive","youtube","cloudinary"]},"videoFileId":{"type":"string","description":"Video file ID (extracted from URL for embed)"},"features":{"description":"Property features","type":"array","items":{"type":"string"}},"floor":{"type":"number","description":"Floor number"},"totalFloors":{"type":"number","description":"Total floors in building"},"buildYear":{"type":"number","description":"Build year"},"seoScore":{"type":"number","description":"SEO Score (0-100)"},"secondaryAgentId":{"type":"number","description":"Secondary agent ID"}},"required":["title","description","price","listingType","bedrooms","bathrooms","area"]},"UpdatePropertyDto":{"type":"object","properties":{"title":{"type":"string","description":"Property title"},"description":{"type":"string","description":"Property description"},"keywords":{"description":"SEO keywords (max 5)","type":"array","items":{"type":"string"}},"price":{"type":"number","description":"Property price"},"currency":{"type":"string","description":"Currency code","default":"TRY"},"categoryId":{"type":"number","description":"Category ID"},"subCategoryId":{"type":"number","description":"Sub-Category ID"},"listingType":{"type":"string","description":"Listing type","enum":["sale","rent","daily_rent","project"]},"bedrooms":{"type":"number","description":"Number of bedrooms"},"bathrooms":{"type":"number","description":"Number of bathrooms"},"area":{"type":"number","description":"Area in square meters"},"location":{"type":"string","description":"Full address"},"city":{"type":"string","description":"City"},"district":{"type":"string","description":"District"},"locationId":{"type":"number","description":"Location ID"},"latitude":{"type":"number","description":"Latitude"},"longitude":{"type":"number","description":"Longitude"},"images":{"description":"Property images URLs","type":"array","items":{"type":"string"}},"featuredImageIndex":{"type":"number","description":"Index of the featured/main image in images array","default":0},"videoUrl":{"type":"string","description":"Video URL (Google Drive, YouTube, or Cloudinary)"},"videoType":{"type":"string","description":"Video type","enum":["google_drive","youtube","cloudinary"]},"videoFileId":{"type":"string","description":"Video file ID (extracted from URL for embed)"},"features":{"description":"Property features","type":"array","items":{"type":"string"}},"floor":{"type":"number","description":"Floor number"},"totalFloors":{"type":"number","description":"Total floors in building"},"buildYear":{"type":"number","description":"Build year"},"seoScore":{"type":"number","description":"SEO Score (0-100)"},"secondaryAgentId":{"type":"number","description":"Secondary agent ID"}}},"ReviewContentDto":{"type":"object","properties":{"status":{"type":"string","description":"Moderation decision","enum":["approved","rejected"]},"notes":{"type":"string","description":"Moderator notes"}},"required":["status"]},"ReportContentDto":{"type":"object","properties":{"contentType":{"type":"string","description":"Type of content being reported","example":"property"},"contentId":{"type":"number","description":"ID of the content being reported","example":123},"reason":{"type":"string","description":"Reason for report","enum":["inappropriate","spam","fraud","misleading","other"]},"description":{"type":"string","description":"Additional description"}},"required":["contentType","contentId","reason"]},"GenerateDescriptionDto":{"type":"object","properties":{"propertyType":{"type":"string","description":"Property type"},"listingType":{"type":"string","description":"Listing type","enum":["sale","rent","daily_rent","project"]},"bedrooms":{"type":"number","description":"Number of bedrooms"},"bathrooms":{"type":"number","description":"Number of bathrooms"},"area":{"type":"number","description":"Area in square meters"},"price":{"type":"number","description":"Price"},"currency":{"type":"string","description":"Currency"},"city":{"type":"string","description":"City"},"district":{"type":"string","description":"District"},"floor":{"type":"number","description":"Floor number"},"buildYear":{"type":"number","description":"Build year"},"features":{"description":"Additional features","type":"array","items":{"type":"string"}},"language":{"type":"string","description":"Language","default":"tr"}},"required":["propertyType","listingType","bedrooms","bathrooms","area","price","currency","city","district"]},"GenerateTitleDto":{"type":"object","properties":{"propertyType":{"type":"string","description":"Property type"},"listingType":{"type":"string","description":"Listing type","enum":["sale","rent","daily_rent","project"]},"city":{"type":"string","description":"City"},"district":{"type":"string","description":"District"},"bedrooms":{"type":"number","description":"Number of bedrooms"},"area":{"type":"number","description":"Area in square meters"},"features":{"description":"Key features","type":"array","items":{"type":"string"}},"language":{"type":"string","description":"Language","default":"tr"}},"required":["propertyType","listingType","city","district"]},"EstimatePriceDto":{"type":"object","properties":{"propertyType":{"type":"string","description":"Property type"},"listingType":{"type":"string","description":"Listing type","enum":["sale","rent","daily_rent","project"]},"area":{"type":"number","description":"Area in square meters"},"city":{"type":"string","description":"City"},"district":{"type":"string","description":"District"},"bedrooms":{"type":"number","description":"Number of bedrooms"},"bathrooms":{"type":"number","description":"Number of bathrooms"},"floor":{"type":"number","description":"Floor number"},"buildYear":{"type":"number","description":"Build year"},"features":{"description":"Additional features","type":"array","items":{"type":"string"}},"currency":{"type":"string","description":"Currency preference","default":"TRY"}},"required":["propertyType","listingType","area","city","district","bedrooms","bathrooms"]},"TranslateTextDto":{"type":"object","properties":{}},"GenerateInstagramCaptionDto":{"type":"object","properties":{"title":{"type":"string","description":"Property title"},"description":{"type":"string","description":"Property description"},"price":{"type":"number","description":"Property price"},"currency":{"type":"string","description":"Property currency (e.g., TRY, USD, EUR)"},"propertyType":{"type":"string","description":"Property type (e.g., Villa, Apartment)"},"location":{"type":"string","description":"Property location (city, district)"},"bedrooms":{"type":"number","description":"Number of bedrooms"},"bathrooms":{"type":"number","description":"Number of bathrooms"},"area":{"type":"number","description":"Property area in square meters"},"listingType":{"type":"string","description":"Listing type (sale, rent, daily_rent)"},"language":{"type":"string","description":"Target language for caption","enum":["tr","en","ru","de","pl"]},"features":{"description":"Additional features","type":"array","items":{"type":"string"}}},"required":["title","description","price","currency","propertyType","location","bedrooms","bathrooms","area","listingType","language"]},"CreateLocationDto":{"type":"object","properties":{"name":{"type":"string","example":"Lefkoşa","description":"Location name"},"nameTr":{"type":"string","example":"Lefkoşa","description":"Location name in Turkish"},"nameEn":{"type":"string","example":"Nicosia","description":"Location name in English"},"slug":{"type":"string","example":"LFK","description":"Location slug"},"parentId":{"type":"number","example":1,"description":"Parent location ID"},"order":{"type":"number","example":1,"description":"Display order"},"isActive":{"type":"boolean","example":true,"description":"Is location active"}},"required":["name","nameTr","nameEn"]},"UpdateLocationDto":{"type":"object","properties":{"name":{"type":"string","example":"Lefkoşa","description":"Location name"},"nameTr":{"type":"string","example":"Lefkoşa","description":"Location name in Turkish"},"nameEn":{"type":"string","example":"Nicosia","description":"Location name in English"},"slug":{"type":"string","example":"LFK","description":"Location slug"},"parentId":{"type":"number","example":1,"description":"Parent location ID"},"order":{"type":"number","example":1,"description":"Display order"},"isActive":{"type":"boolean","example":true,"description":"Is location active"}}},"CreatePropertyCategoryDto":{"type":"object","properties":{"name":{"type":"string","example":"Konut","description":"Category name"},"nameTr":{"type":"string","example":"Konut","description":"Category name in Turkish"},"nameEn":{"type":"string","example":"Residential","description":"Category name in English"},"slug":{"type":"string","example":"konut","description":"Category slug"},"description":{"type":"string","example":"Evler, daireler ve rezidanslar","description":"Category description"},"icon":{"type":"string","example":"home","description":"Category icon"},"parentId":{"type":"number","example":1,"description":"Parent category ID"},"order":{"type":"number","example":1,"description":"Display order"},"isActive":{"type":"boolean","example":true,"description":"Is category active"}},"required":["name","nameTr","nameEn"]},"UpdatePropertyCategoryDto":{"type":"object","properties":{"name":{"type":"string","example":"Konut","description":"Category name"},"nameTr":{"type":"string","example":"Konut","description":"Category name in Turkish"},"nameEn":{"type":"string","example":"Residential","description":"Category name in English"},"slug":{"type":"string","example":"konut","description":"Category slug"},"description":{"type":"string","example":"Evler, daireler ve rezidanslar","description":"Category description"},"icon":{"type":"string","example":"home","description":"Category icon"},"parentId":{"type":"number","example":1,"description":"Parent category ID"},"order":{"type":"number","example":1,"description":"Display order"},"isActive":{"type":"boolean","example":true,"description":"Is category active"}}},"CreateAgencyDto":{"type":"object","properties":{"name":{"type":"string","example":"Premium Emlak","description":"Agency name"},"slug":{"type":"string","example":"premium-emlak","description":"Agency slug"},"description":{"type":"string","example":"Kıbrıs'ın en güvenilir emlak ofisi","description":"Agency description"},"email":{"type":"string","example":"info@premiumemlak.com","description":"Agency email"},"phone":{"type":"string","example":"+90 533 123 4567","description":"Agency phone"},"mobile":{"type":"string","example":"+90 533 765 4321","description":"Agency mobile phone"},"whatsapp":{"type":"string","example":"+90 533 765 4321","description":"Agency WhatsApp number"},"address":{"type":"string","example":"Lefkoşa, Kıbrıs","description":"Agency address"},"city":{"type":"string","example":"Lefkoşa","description":"City"},"district":{"type":"string","example":"Alsancak","description":"District"},"licenseNumber":{"type":"string","example":"LIC-12345","description":"License number"},"aboutUs":{"type":"string","example":"Hakkımızda detaylı bilgi...","description":"About us"},"website":{"type":"string","example":"https://premiumemlak.com","description":"Agency website"},"logo":{"type":"string","example":"https://logo.png","description":"Agency logo URL"},"coverImage":{"type":"string","example":"https://cover.png","description":"Agency cover image URL"},"isVerified":{"type":"boolean","example":true,"description":"Is agency verified"},"isActive":{"type":"boolean","example":true,"description":"Is agency active"},"canBoostListings":{"type":"boolean","example":true,"description":"Can agency boost listings"},"ownerPassword":{"type":"string","example":"SecurePass123!","description":"Agency owner password (min 6 characters)"}},"required":["name","slug","email","phone","ownerPassword"]},"CreateAgentDto":{"type":"object","properties":{}},"UpdateAgencyDto":{"type":"object","properties":{"name":{"type":"string","example":"Premium Emlak","description":"Agency name"},"slug":{"type":"string","example":"premium-emlak","description":"Agency slug"},"description":{"type":"string","example":"Kıbrıs'ın en güvenilir emlak ofisi","description":"Agency description"},"email":{"type":"string","example":"info@premiumemlak.com","description":"Agency email"},"phone":{"type":"string","example":"+90 533 123 4567","description":"Agency phone"},"mobile":{"type":"string","example":"+90 533 765 4321","description":"Agency mobile phone"},"whatsapp":{"type":"string","example":"+90 533 765 4321","description":"Agency WhatsApp number"},"address":{"type":"string","example":"Lefkoşa, Kıbrıs","description":"Agency address"},"city":{"type":"string","example":"Lefkoşa","description":"City"},"district":{"type":"string","example":"Alsancak","description":"District"},"licenseNumber":{"type":"string","example":"LIC-12345","description":"License number"},"aboutUs":{"type":"string","example":"Hakkımızda detaylı bilgi...","description":"About us"},"website":{"type":"string","example":"https://premiumemlak.com","description":"Agency website"},"logo":{"type":"string","example":"https://logo.png","description":"Agency logo URL"},"coverImage":{"type":"string","example":"https://cover.png","description":"Agency cover image URL"},"isVerified":{"type":"boolean","example":true,"description":"Is agency verified"},"isActive":{"type":"boolean","example":true,"description":"Is agency active"},"canBoostListings":{"type":"boolean","example":true,"description":"Can agency boost listings"},"ownerPassword":{"type":"string","example":"SecurePass123!","description":"Agency owner password (min 6 characters)"}}},"CreateProjectDto":{"type":"object","properties":{}},"UpdateProjectDto":{"type":"object","properties":{}},"CreateUserDto":{"type":"object","properties":{}},"SafeUpdateProfileDto":{"type":"object","properties":{}},"ChangePasswordDto":{"type":"object","properties":{"currentPassword":{"type":"string","description":"Current password (not required for Google users creating first password)"},"newPassword":{"type":"string","description":"New password (minimum 8 characters)"},"confirmNewPassword":{"type":"string","description":"Confirm new password"}},"required":["newPassword","confirmNewPassword"]},"UpdateUserDto":{"type":"object","properties":{}},"UpdateUserAdminDto":{"type":"object","properties":{"firstName":{"type":"string","description":"First name"},"lastName":{"type":"string","description":"Last name"},"email":{"type":"string","description":"Email address"},"password":{"type":"string","description":"Password"},"phone":{"type":"string","description":"Phone number"},"whatsapp":{"type":"string","description":"WhatsApp number"},"role":{"type":"string","enum":["user","agent","agency_owner","admin"],"description":"User role"},"isActive":{"type":"boolean","description":"Active status"},"isVerified":{"type":"boolean","description":"Verified status"},"agencyId":{"type":"number","description":"Agency ID"},"adminNotes":{"type":"string","description":"Admin notes"}}},"ChangeUserRoleDto":{"type":"object","properties":{"role":{"type":"string","enum":["user","agent","agency_owner","admin"],"description":"New user role"},"reason":{"type":"string","description":"Reason for role change"}}},"ResetPasswordAdminDto":{"type":"object","properties":{"newPassword":{"type":"string","description":"New temporary password"},"sendEmail":{"type":"boolean","description":"Send password reset email","default":true}}},"BulkActionDto":{"type":"object","properties":{"ids":{"description":"Array of IDs to perform action on","type":"array","items":{"type":"number"}},"action":{"type":"string","enum":["delete","activate","deactivate","verify","change_role","approve","reject","feature","unfeature"],"description":"Type of bulk action to perform"},"data":{"type":"string","description":"Additional data for the action (e.g., new role)"},"note":{"type":"string","description":"Optional note/reason for the action"}},"required":["ids","action"]},"UpdatePropertyAdminDto":{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","rejected","draft"],"description":"Property status"},"isFeatured":{"type":"boolean","description":"Featured status"},"featuredOrder":{"type":"number","description":"Featured order (lower = higher priority)"},"adminNotes":{"type":"string","description":"Admin notes"},"rejectionReason":{"type":"string","description":"Rejection reason"}}},"ChangePropertyStatusDto":{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","rejected","draft"],"description":"New property status"},"reason":{"type":"string","description":"Reason for status change"}}},"FeaturePropertyDto":{"type":"object","properties":{"isFeatured":{"type":"boolean","description":"Featured status","default":true},"featuredOrder":{"type":"number","description":"Featured order (lower = higher priority)"}}},"StartScrapeDto":{"type":"object","properties":{}},"ConfirmImportDto":{"type":"object","properties":{}},"CreatePageDto":{"type":"object","properties":{}},"UpdatePageDto":{"type":"object","properties":{}},"CreateReviewDto":{"type":"object","properties":{"matchId":{"type":"number","description":"Match ID for the review","example":15},"rating":{"type":"number","description":"Rating (1-5)","example":4,"minimum":1,"maximum":5},"comment":{"type":"string","description":"Review comment","example":"Great roommate, very clean and respectful","maxLength":1000},"livedTogether":{"type":"boolean","description":"Whether you actually lived together","example":true}},"required":["matchId","rating","livedTogether"]},"CreateBlogPostDto":{"type":"object","properties":{}},"UpdateBlogPostDto":{"type":"object","properties":{}},"GenerateBlogTitleDto":{"type":"object","properties":{}},"GenerateBlogContentDto":{"type":"object","properties":{}},"GenerateBulkTitlesDto":{"type":"object","properties":{}},"GenerateBulkPostsDto":{"type":"object","properties":{}},"TrackContactDto":{"type":"object","properties":{}},"CreateInquiryDto":{"type":"object","properties":{}},"PartnerCreatePropertyDto":{"type":"object","properties":{"title":{"type":"string","description":"Listing title","maxLength":255},"description":{"type":"string","description":"Listing description"},"externalId":{"type":"string","description":"Your CRM record ID — enables idempotent upsert","maxLength":100},"price":{"type":"number","description":"Price (numeric, no thousand separators)"},"currency":{"type":"string","description":"Currency code","default":"TRY"},"listingType":{"type":"string","description":"Listing type","enum":["sale","rent","daily_rent","project"]},"categoryId":{"type":"number","description":"Category ID (see GET /categories)"},"subCategoryId":{"type":"number","description":"Sub-category ID"},"bedrooms":{"type":"number","description":"Number of bedrooms"},"bathrooms":{"type":"number","description":"Number of bathrooms"},"area":{"type":"number","description":"Area in square meters"},"location":{"type":"string","description":"Full address / location text"},"city":{"type":"string","description":"City"},"district":{"type":"string","description":"District"},"latitude":{"type":"number","description":"Latitude"},"longitude":{"type":"number","description":"Longitude"},"images":{"description":"Image URLs (max 40)","type":"array","items":{"type":"string"}},"featuredImageIndex":{"type":"number","description":"Index of the cover image within images[]"},"features":{"description":"Feature tags","type":"array","items":{"type":"string"}},"exteriorFeatures":{"description":"Exterior feature tags","type":"array","items":{"type":"string"}},"interiorFeatures":{"description":"Interior feature tags","type":"array","items":{"type":"string"}},"locationFeatures":{"description":"Location feature tags","type":"array","items":{"type":"string"}},"floor":{"type":"number","description":"Floor number"},"totalFloors":{"type":"number","description":"Total floors in building"},"buildYear":{"type":"number","description":"Construction year"},"isActive":{"type":"boolean","description":"Publish flag (false = hidden)","default":true},"keywords":{"description":"SEO keywords (max 10)","type":"array","items":{"type":"string"}},"assignedAgentId":{"type":"number","description":"Assign to one of your agents (must be a member of your agency)"}},"required":["title","description","price","listingType","bedrooms","bathrooms","area","location","city","district"]},"PartnerUpdatePropertyDto":{"type":"object","properties":{"title":{"type":"string","maxLength":255},"description":{"type":"string"},"price":{"type":"number"},"currency":{"type":"string"},"listingType":{"type":"string","enum":["sale","rent","daily_rent","project"]},"categoryId":{"type":"number"},"subCategoryId":{"type":"number"},"bedrooms":{"type":"number"},"bathrooms":{"type":"number"},"area":{"type":"number"},"location":{"type":"string"},"city":{"type":"string"},"district":{"type":"string"},"latitude":{"type":"number"},"longitude":{"type":"number"},"images":{"type":"array","items":{"type":"string"}},"featuredImageIndex":{"type":"number"},"features":{"type":"array","items":{"type":"string"}},"exteriorFeatures":{"type":"array","items":{"type":"string"}},"interiorFeatures":{"type":"array","items":{"type":"string"}},"locationFeatures":{"type":"array","items":{"type":"string"}},"floor":{"type":"number"},"totalFloors":{"type":"number"},"buildYear":{"type":"number"},"isActive":{"type":"boolean"},"keywords":{"type":"array","items":{"type":"string"}},"assignedAgentId":{"type":"number"}}},"PartnerUpsertPropertyDto":{"type":"object","properties":{"title":{"type":"string","description":"Listing title","maxLength":255},"description":{"type":"string","description":"Listing description"},"externalId":{"type":"string","description":"Your CRM record ID — enables idempotent upsert","maxLength":100},"price":{"type":"number","description":"Price (numeric, no thousand separators)"},"currency":{"type":"string","description":"Currency code","default":"TRY"},"listingType":{"type":"string","description":"Listing type","enum":["sale","rent","daily_rent","project"]},"categoryId":{"type":"number","description":"Category ID (see GET /categories)"},"subCategoryId":{"type":"number","description":"Sub-category ID"},"bedrooms":{"type":"number","description":"Number of bedrooms"},"bathrooms":{"type":"number","description":"Number of bathrooms"},"area":{"type":"number","description":"Area in square meters"},"location":{"type":"string","description":"Full address / location text"},"city":{"type":"string","description":"City"},"district":{"type":"string","description":"District"},"latitude":{"type":"number","description":"Latitude"},"longitude":{"type":"number","description":"Longitude"},"images":{"description":"Image URLs (max 40)","type":"array","items":{"type":"string"}},"featuredImageIndex":{"type":"number","description":"Index of the cover image within images[]"},"features":{"description":"Feature tags","type":"array","items":{"type":"string"}},"exteriorFeatures":{"description":"Exterior feature tags","type":"array","items":{"type":"string"}},"interiorFeatures":{"description":"Interior feature tags","type":"array","items":{"type":"string"}},"locationFeatures":{"description":"Location feature tags","type":"array","items":{"type":"string"}},"floor":{"type":"number","description":"Floor number"},"totalFloors":{"type":"number","description":"Total floors in building"},"buildYear":{"type":"number","description":"Construction year"},"isActive":{"type":"boolean","description":"Publish flag (false = hidden)","default":true},"keywords":{"description":"SEO keywords (max 10)","type":"array","items":{"type":"string"}},"assignedAgentId":{"type":"number","description":"Assign to one of your agents (must be a member of your agency)"}},"required":["title","description","price","listingType","bedrooms","bathrooms","area","location","city","district"]},"PartnerPropertyStatusDto":{"type":"object","properties":{"isActive":{"type":"boolean","description":"true = published, false = hidden"}},"required":["isActive"]},"PartnerPropertyImagesDto":{"type":"object","properties":{"images":{"description":"Full replacement image list (max 40)","type":"array","items":{"type":"string"}},"featuredImageIndex":{"type":"number","description":"Cover image index"}},"required":["images"]},"PartnerImportItemDto":{"type":"object","properties":{"title":{"type":"string","description":"Listing title","maxLength":255},"description":{"type":"string","description":"Listing description"},"price":{"type":"number","description":"Price (numeric, no thousand separators)"},"currency":{"type":"string","description":"Currency code","default":"TRY"},"listingType":{"type":"string","description":"Listing type","enum":["sale","rent","daily_rent","project"]},"categoryId":{"type":"number","description":"Category ID (see GET /categories)"},"subCategoryId":{"type":"number","description":"Sub-category ID"},"bedrooms":{"type":"number","description":"Number of bedrooms"},"bathrooms":{"type":"number","description":"Number of bathrooms"},"area":{"type":"number","description":"Area in square meters"},"location":{"type":"string","description":"Full address / location text"},"city":{"type":"string","description":"City"},"district":{"type":"string","description":"District"},"latitude":{"type":"number","description":"Latitude"},"longitude":{"type":"number","description":"Longitude"},"images":{"description":"Image URLs (max 40)","type":"array","items":{"type":"string"}},"featuredImageIndex":{"type":"number","description":"Index of the cover image within images[]"},"features":{"description":"Feature tags","type":"array","items":{"type":"string"}},"exteriorFeatures":{"description":"Exterior feature tags","type":"array","items":{"type":"string"}},"interiorFeatures":{"description":"Interior feature tags","type":"array","items":{"type":"string"}},"locationFeatures":{"description":"Location feature tags","type":"array","items":{"type":"string"}},"floor":{"type":"number","description":"Floor number"},"totalFloors":{"type":"number","description":"Total floors in building"},"buildYear":{"type":"number","description":"Construction year"},"isActive":{"type":"boolean","description":"Publish flag (false = hidden)","default":true},"keywords":{"description":"SEO keywords (max 10)","type":"array","items":{"type":"string"}},"assignedAgentId":{"type":"number","description":"Assign to one of your agents (must be a member of your agency)"},"externalId":{"type":"string","description":"Your CRM record ID — REQUIRED in bulk import (upsert key)","maxLength":100}},"required":["title","description","price","listingType","bedrooms","bathrooms","area","location","city","district","externalId"]},"PartnerImportRequestDto":{"type":"object","properties":{"items":{"description":"Listings to import (upsert semantics, keyed by externalId)","maxItems":200,"type":"array","items":{"$ref":"#/components/schemas/PartnerImportItemDto"}},"reference":{"type":"string","description":"Your own label for this batch (diagnostics only)","maxLength":100}},"required":["items"]},"PartnerCreateAgentDto":{"type":"object","properties":{"firstName":{"type":"string","description":"First name","maxLength":100},"lastName":{"type":"string","description":"Last name","maxLength":100},"email":{"type":"string","description":"E-mail — the invitation is sent here"},"phone":{"type":"string","description":"Phone number","maxLength":20},"whatsapp":{"type":"string","description":"WhatsApp number","maxLength":20},"jobTitle":{"type":"string","description":"Job title","maxLength":100},"avatar":{"type":"string","description":"Avatar image URL","maxLength":500},"spokenLanguages":{"description":"Spoken language codes, e.g. [\"tr\",\"en\"]","type":"array","items":{"type":"string"}}},"required":["firstName","lastName","email"]},"PartnerUpdateAgentDto":{"type":"object","properties":{"firstName":{"type":"string","maxLength":100},"lastName":{"type":"string","maxLength":100},"phone":{"type":"string","maxLength":20},"whatsapp":{"type":"string","maxLength":20},"jobTitle":{"type":"string","maxLength":100},"avatar":{"type":"string","maxLength":500},"spokenLanguages":{"type":"array","items":{"type":"string"}}}},"PartnerOffboardAgentDto":{"type":"object","properties":{"reassignToAgentId":{"type":"number","description":"Reassign the agent’s active listings to this agent (must be a member of your agency)"}}},"PartnerUpdateAgencyDto":{"type":"object","properties":{"name":{"type":"string","maxLength":100},"description":{"type":"string","maxLength":1000},"aboutUs":{"type":"string","description":"Long \"about us\" text"},"phone":{"type":"string","maxLength":20},"mobile":{"type":"string","maxLength":20},"whatsapp":{"type":"string","maxLength":20},"website":{"type":"string","maxLength":255},"address":{"type":"string","maxLength":500},"city":{"type":"string","maxLength":100},"district":{"type":"string","maxLength":100},"logo":{"type":"string","maxLength":255},"coverImage":{"type":"string","maxLength":255},"socialMedia":{"description":"Social media links (no commas — stored as a comma-joined list)","type":"array","items":{"type":"string"}}}},"UpsertMappingDto":{"type":"object","properties":{}},"CreateXmlFeedDto":{"type":"object","properties":{}},"UpdateXmlFeedDto":{"type":"object","properties":{}},"CreateRoommateProfileDto":{"type":"object","properties":{"displayName":{"type":"string","description":"Display name","example":"Ahmet K.","minLength":2,"maxLength":100},"birthDate":{"type":"string","description":"Birth date (must be 18+)","example":"2000-01-15"},"gender":{"type":"string","description":"Gender","enum":["male","female","unspecified"],"example":"male"},"nationality":{"type":"string","description":"Nationality","example":"Turkish","maxLength":100},"primaryLanguage":{"type":"string","description":"Primary spoken language","example":"Turkish","maxLength":50},"secondaryLanguages":{"description":"Secondary languages","example":["English","German"],"maxItems":5,"type":"array","items":{"type":"string"}},"occupation":{"type":"string","description":"Occupation","enum":["student","casino_worker","professional","freelance","tourist","digital_nomad","other"],"example":"student"},"university":{"type":"string","description":"University name","example":"Eastern Mediterranean University"},"bio":{"type":"string","description":"Short bio","example":"Friendly student looking for a clean roommate","maxLength":500},"agreementAccepted":{"type":"boolean","description":"Kullanıcı sözleşmesi + KVKK onayı. Profil oluşturmak için zorunludur.","example":true},"agreementVersion":{"type":"string","description":"Sözleşme versiyonu","example":"1.0"}},"required":["displayName","birthDate","gender","occupation","agreementAccepted"]},"UpdateBasicInfoDto":{"type":"object","properties":{"displayName":{"type":"string","description":"Display name","example":"Ahmet K.","minLength":2,"maxLength":100},"birthDate":{"type":"string","description":"Birth date (must be 18+)","example":"2000-01-15"},"gender":{"type":"string","description":"Gender","enum":["male","female","unspecified"]},"occupation":{"type":"string","description":"Occupation","enum":["student","casino_worker","professional","freelance","tourist","digital_nomad","other"]},"nationality":{"type":"string","description":"Nationality","example":"Turkish","maxLength":100},"bio":{"type":"string","description":"Short bio","maxLength":500}}},"UpdateLifestyleDto":{"type":"object","properties":{"smoking":{"type":"string","description":"Smoking habit","enum":["indoor","outdoor","never","rarely"]},"alcohol":{"type":"string","description":"Alcohol consumption","enum":["regular","social","never"]},"petStatus":{"type":"string","description":"Pet status","enum":["cat","dog","other","none_ok","no_pets"]},"cleanliness":{"type":"number","description":"Cleanliness level (1-5)","minimum":1,"maximum":5},"noiseTolerance":{"type":"number","description":"Noise tolerance level (1-5)","minimum":1,"maximum":5},"sleepSchedule":{"type":"string","description":"Sleep schedule","enum":["early","late","shift","flexible"]},"guestPolicy":{"type":"string","description":"Guest policy","enum":["frequent","sometimes","rarely","never"]},"cooking":{"type":"string","description":"Cooking habit","enum":["daily","sometimes","eat_out","shared"]},"diet":{"description":"Dietary preferences","example":["halal","vegetarian"],"type":"array","items":{"type":"string"}},"religion":{"type":"string","description":"Religion","enum":["muslim","christian","other","none","unspecified"]},"religiousPractice":{"type":"string","description":"Religious practice level","enum":["regular","sometimes","none","unspecified"]},"zodiacSign":{"type":"string","description":"Zodiac sign","enum":["aries","taurus","gemini","cancer","leo","virgo","libra","scorpio","sagittarius","capricorn","aquarius","pisces","unspecified"]},"workFromHome":{"type":"string","description":"Work from home status","enum":["yes","no","hybrid"]},"sharedSpaces":{"description":"Shared spaces preferences","type":"array","items":{"type":"string"}},"personalityType":{"type":"string","description":"Personality type","enum":["introvert","extrovert","ambivert","unknown"]},"hobbies":{"description":"Hobbies","maxItems":15,"type":"array","items":{"type":"string"}}}},"UpdateHousingPreferencesDto":{"type":"object","properties":{"preferredCities":{"description":"Preferred cities (1-6)","example":["girne","lefkosa"],"minItems":1,"maxItems":6,"type":"array","items":{"type":"string"}},"preferredDistricts":{"description":"Preferred districts","example":["center","karakum"],"type":"array","items":{"type":"string"}},"propertyTypes":{"description":"Property types","example":["apartment","studio"],"type":"array","items":{"type":"string"}},"roomCount":{"type":"string","description":"Room count","enum":["1+1","2+1","3+1","4+1","any"],"example":"2+1"},"budgetMin":{"type":"number","description":"Minimum budget per person (STG)","example":100,"minimum":0,"maximum":50000},"budgetMax":{"type":"number","description":"Maximum budget per person (STG)","example":300,"minimum":0,"maximum":50000},"rentalDuration":{"type":"string","description":"Rental duration","enum":["short","semester","academic","long","flexible"]},"moveInDate":{"type":"string","description":"Desired move-in date (must be today or future)","example":"2026-04-01"},"furnished":{"type":"string","description":"Furnished preference","enum":["required","preferred","any","no"]},"hasVehicle":{"type":"boolean","description":"Has vehicle","example":false}}},"UpdateRoommatePreferencesDto":{"type":"object","properties":{"prefGender":{"type":"string","description":"Preferred roommate gender","enum":["same","any","male","female"],"example":"any"},"prefAgeMin":{"type":"number","description":"Minimum age preference","example":18,"minimum":18,"maximum":99},"prefAgeMax":{"type":"number","description":"Maximum age preference","example":35,"minimum":18,"maximum":99},"prefSmoking":{"type":"string","description":"Smoking tolerance","enum":["ok","outdoor_only","never","any"],"example":"any"},"prefCultural":{"type":"string","description":"Cultural preference","enum":["same","any","diverse"],"example":"any"},"prefSleepMatch":{"type":"boolean","description":"Sleep schedule match important","example":false},"prefPet":{"type":"string","description":"Pet tolerance","enum":["no_pets","ok","cats_ok","any"],"example":"any"},"prefRoommateCount":{"type":"number","description":"Preferred number of roommates","example":1,"minimum":1,"maximum":5},"prefTopCriteria":{"description":"Top 1-3 criteria (ordered)","example":["cleanliness","budget","location"],"minItems":1,"maxItems":3,"type":"array","items":{"type":"string"}}}},"UpdateProfileStatusDto":{"type":"object","properties":{"isActive":{"type":"boolean","description":"Whether the profile is active","example":true},"isLooking":{"type":"boolean","description":"Whether the user is currently looking for a roommate","example":true}}},"ReorderPhotosDto":{"type":"object","properties":{"photoIds":{"description":"Ordered array of photo IDs. The position in the array determines sort_order.","example":[3,1,5,2],"type":"array","items":{"type":"number"}}},"required":["photoIds"]},"CreateReportDto":{"type":"object","properties":{"reportedProfileId":{"type":"number","description":"Profile ID to report","example":42},"reason":{"type":"string","description":"Reason for reporting","enum":["fake_profile","harassment","spam","scam","inappropriate_content","dating_misuse","other"],"example":"harassment"},"description":{"type":"string","description":"Additional description","example":"Sending threatening messages","maxLength":1000},"evidenceUrls":{"description":"Evidence URLs (screenshots, etc.)","example":["https://res.cloudinary.com/.../evidence1.jpg"],"type":"array","items":{"type":"string"}}},"required":["reportedProfileId","reason"]},"CreateFeedbackDto":{"type":"object","properties":{"topic":{"type":"string","description":"Feedback topic","enum":["suggestion","complaint","bug","other"],"example":"suggestion"},"message":{"type":"string","description":"Feedback message","example":"Güzel ama geliştirilebilir","maxLength":2000}},"required":["topic","message"]},"AdminUpdateProfileStatusDto":{"type":"object","properties":{"status":{"type":"string","enum":["active","suspended","banned"]},"reason":{"type":"string"}},"required":["status"]},"AdminReviewReportDto":{"type":"object","properties":{"status":{"type":"string","enum":["action_taken","dismissed"]},"adminNote":{"type":"string"},"suspendProfile":{"type":"boolean"}},"required":["status","adminNote"]},"TriggerAgentDto":{"type":"object","properties":{}},"CreateDetectiveRequestDto":{"type":"object","properties":{}},"CreateDetectiveReviewDto":{"type":"object","properties":{}},"ApplyDetectiveDto":{"type":"object","properties":{}},"UpdateDetectiveProfileDto":{"type":"object","properties":{}},"SubmitReportDto":{"type":"object","properties":{}},"SubmitLeadDto":{"type":"object","properties":{}},"SendDetectiveMessageDto":{"type":"object","properties":{}},"AssignDetectiveDto":{"type":"object","properties":{}},"AdminRejectionDto":{"type":"object","properties":{}},"CreateDroneLeadDto":{"type":"object","properties":{}},"UpdateDroneLeadStatusDto":{"type":"object","properties":{}},"CreatePropertyRequestDto":{"type":"object","properties":{}},"UpdatePropertyRequestStatusDto":{"type":"object","properties":{}}}},"externalDocs":{"description":"Platform overview for AI agents","url":"https://ilancik.com/llms.txt"}}