{"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/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/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/profile":{"get":{"operationId":"PublicApiController_getProfile_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["PublicApi"]}},"/api/v1/public/agency/contact":{"get":{"operationId":"PublicApiController_getContact_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["PublicApi"]}},"/api/v1/public/agency/agents":{"get":{"operationId":"PublicApiController_getAgents_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["PublicApi"]}},"/api/v1/public/agency/agents/{slug}":{"get":{"operationId":"PublicApiController_getAgentDetail_v1","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["PublicApi"]}},"/api/v1/public/agency/properties":{"get":{"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"}}],"responses":{"200":{"description":""}},"tags":["PublicApi"]}},"/api/v1/public/agency/properties/featured":{"get":{"operationId":"PublicApiController_getFeaturedProperties_v1","parameters":[{"name":"limit","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["PublicApi"]}},"/api/v1/public/agency/properties/{slug}":{"get":{"operationId":"PublicApiController_getPropertyBySlug_v1","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["PublicApi"]}},"/api/v1/public/agency/stats":{"get":{"operationId":"PublicApiController_getStats_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["PublicApi"]}},"/api/v1/public/agency/locations":{"get":{"operationId":"PublicApiController_getLocations_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["PublicApi"]}},"/api/v1/public/agency/categories":{"get":{"operationId":"PublicApiController_getCategories_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["PublicApi"]}},"/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":""}},"tags":["PublicApi"]}},"/api/v1/api-keys":{"post":{"operationId":"ApiKeyManagementController_createApiKey_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApiKeyDto"}}}},"responses":{"201":{"description":""}},"tags":["ApiKeyManagement"]},"get":{"operationId":"ApiKeyManagementController_getAllApiKeys_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["ApiKeyManagement"]}},"/api/v1/api-keys/agency/{agencyId}":{"get":{"operationId":"ApiKeyManagementController_getAgencyApiKeys_v1","parameters":[{"name":"agencyId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["ApiKeyManagement"]}},"/api/v1/api-keys/{id}":{"patch":{"operationId":"ApiKeyManagementController_updateApiKey_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateApiKeyDto"}}}},"responses":{"200":{"description":""}},"tags":["ApiKeyManagement"]},"delete":{"operationId":"ApiKeyManagementController_deleteApiKey_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["ApiKeyManagement"]}},"/api/v1/api-keys/{id}/regenerate-secret":{"post":{"operationId":"ApiKeyManagementController_regenerateSecretKey_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"tags":["ApiKeyManagement"]}},"/api/v1/api-keys/{id}/logs":{"get":{"operationId":"ApiKeyManagementController_getApiKeyLogs_v1","parameters":[{"name":"id","required":true,"in":"path","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":["ApiKeyManagement"]}},"/api/v1/api-keys/agency/{agencyId}/logs":{"get":{"operationId":"ApiKeyManagementController_getAgencyLogs_v1","parameters":[{"name":"agencyId","required":true,"in":"path","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":["ApiKeyManagement"]}},"/api/v1/api-keys/agency/{agencyId}/usage-stats":{"get":{"operationId":"ApiKeyManagementController_getUsageStats_v1","parameters":[{"name":"agencyId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["ApiKeyManagement"]}},"/api/v1/api-keys/agency/{agencyId}/inquiries":{"get":{"operationId":"ApiKeyManagementController_getInquiries_v1","parameters":[{"name":"agencyId","required":true,"in":"path","schema":{"type":"string"}},{"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":""}},"tags":["ApiKeyManagement"]}},"/api/v1/api-keys/inquiries/{id}/read":{"patch":{"operationId":"ApiKeyManagementController_markInquiryAsRead_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["ApiKeyManagement"]}},"/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"}],"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":{}},"CreateApiKeyDto":{"type":"object","properties":{}},"UpdateApiKeyDto":{"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"}}