{"openapi":"3.0.0","paths":{"/api/auth/login":{"post":{"operationId":"AuthController_login","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsDto"}}}},"responses":{"200":{"description":"User login"}},"summary":"User login","tags":["Auth"]}},"/api/auth/register":{"post":{"operationId":"AuthController_register","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterDto"}}}},"responses":{"201":{"description":"User registration"}},"summary":"User registration","tags":["Auth"]}},"/api/auth/login/oauth/google":{"post":{"operationId":"AuthController_googleLogin","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleLoginDto"}}}},"responses":{"200":{"description":"Google login"}},"summary":"Google login","tags":["Auth"]}},"/api/auth/login/oauth/facebook":{"post":{"operationId":"AuthController_facebookLogin","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"access_token":{"type":"string","description":"Facebook access token"}}}}}},"responses":{"200":{"description":"Facebook login successful"},"401":{"description":"Unauthorized"}},"summary":"Facebook login","tags":["Auth"]}},"/api/auth/login/oauth/apple":{"post":{"operationId":"AuthController_appleLogin","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppleLoginDto"}}}},"responses":{"200":{"description":"Apple login successful"}},"summary":"Apple login","tags":["Auth"]}},"/api/auth/forgot-password":{"post":{"operationId":"AuthController_forgotPassword","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForgotPasswordDto"}}}},"responses":{"200":{"description":"Forgot password"}},"summary":"Forgot password?","tags":["Auth"]}},"/api/auth/verify-otp":{"post":{"operationId":"AuthController_verifyOtp","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyOtpDto"}}}},"responses":{"200":{"description":"Verify OTP"}},"summary":"Verify OTP","tags":["Auth"]}},"/api/auth/set-password":{"post":{"operationId":"AuthController_setPassword","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetPasswordDto"}}}},"responses":{"200":{"description":"Set new password"},"400":{"description":"New password must be different from the current password."},"401":{"description":"Invalid token or OTP not verified."}},"summary":"Set new password","tags":["Auth"]}},"/api/auth/refresh":{"post":{"operationId":"AuthController_refresh","parameters":[],"responses":{"200":{"description":"Refresh JWT"}},"security":[{"bearer":[]}],"summary":"Refresh JWT (Testing required!)","tags":["Auth"]}},"/api/auth/logout":{"post":{"operationId":"AuthController_logout","parameters":[],"responses":{"200":{"description":"Logout user."}},"security":[{"bearer":[]}],"summary":"Logout user","tags":["Auth"]}},"/api/my/profile":{"get":{"operationId":"MyController_profile","parameters":[],"responses":{"200":{"description":"Retrieved my profile"}},"security":[{"bearer":[]}],"summary":"Get my profile","tags":["My"]}},"/api/my/profile/update":{"post":{"operationId":"MyController_update","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProfileDto"}}}},"responses":{"200":{"description":"My profile updated successfully."}},"security":[{"bearer":[]}],"summary":"Update my profile","tags":["My"]}},"/api/my/username":{"post":{"operationId":"MyController_checkUsernameAvailability","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckUsernameDto"}}}},"responses":{"200":{"description":"Found username."}},"security":[{"bearer":[]}],"summary":"Check username availability","tags":["My"]}},"/api/my/is-phone-verified":{"get":{"operationId":"MyController_isPhoneVerified","parameters":[],"responses":{"200":{"description":"Phone verification status"}},"security":[{"bearer":[]}],"summary":"Check if phone number is verified","tags":["My"]}},"/api/my/is-email-verified":{"get":{"operationId":"MyController_isEmailVerified","parameters":[],"responses":{"200":{"description":"Email verification status"}},"security":[{"bearer":[]}],"summary":"Check if email is verified","tags":["My"]}},"/api/my/request-verification":{"post":{"operationId":"MyController_requestVerification","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestVerificationDto"}}}},"responses":{"200":{"description":"Initiate verification process"}},"security":[{"bearer":[]},{"bearer":[]}],"summary":"Send verification code to user","tags":["My"]}},"/api/my/confirm-verification":{"post":{"operationId":"MyController_confirmVerification","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmVerificationDto"}}}},"responses":{"200":{"description":"Validate the submitted verification code"}},"security":[{"bearer":[]},{"bearer":[]}],"summary":"Confirm verification code","tags":["My"]}},"/api/my/profile/uploads":{"post":{"operationId":"MyController_uploadProfileImage","parameters":[],"requestBody":{"required":true,"description":"Upload a profile image","content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}},"$ref":"#/components/schemas/"}}}},"responses":{"200":{"description":"The image has been uploaded successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadResponseDto"}}}}},"security":[{"bearer":[]}],"tags":["My"]}},"/api/my/request-update-details":{"post":{"operationId":"MyController_requestUpdateDetails","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestUpdateDetailDto"}}}},"responses":{"200":{"description":"Initiate verification process"}},"security":[{"bearer":[]},{"bearer":[]}],"summary":"Send verification code to user (*Review required)","tags":["My"]}},"/api/my/verify-update-details":{"post":{"operationId":"MyController_verifyUpdateDetails","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmUpdateDetailDto"}}}},"responses":{"200":{"description":"Validate the submitted verification code"}},"security":[{"bearer":[]},{"bearer":[]}],"summary":"Confirm verification code (*Review required)","tags":["My"]}},"/api/my/interested-countries":{"get":{"operationId":"MyController_interestedCountries","parameters":[],"responses":{"200":{"description":"List of interested countries"}},"security":[{"bearer":[]}],"summary":"Get all interested countries","tags":["My"]},"post":{"operationId":"MyController_updateInterestedCountries","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"responses":{"200":{"description":"List of interested countries"}},"security":[{"bearer":[]}],"summary":"Update interested countries","tags":["My"]}},"/api/my/interested-categories":{"get":{"operationId":"MyController_interestedCategories","parameters":[],"responses":{"200":{"description":"List of interested categories"}},"security":[{"bearer":[]}],"summary":"Get all interested categories","tags":["My"]},"post":{"operationId":"MyController_updateInterestedCategories","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"responses":{"200":{"description":"List of interested categories"}},"security":[{"bearer":[]}],"summary":"Update interested categories","tags":["My"]}},"/api/my/interested-tags":{"get":{"operationId":"MyController_interestedTags","parameters":[],"responses":{"200":{"description":"List of interested tags"}},"security":[{"bearer":[]}],"summary":"Get all interested tags","tags":["My"]},"post":{"operationId":"MyController_updateInterestedTags","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"responses":{"200":{"description":"List of interested tags"}},"security":[{"bearer":[]}],"summary":"Update Interested Tags","tags":["My"]}},"/api/my/buckited-goals-categories":{"get":{"operationId":"MyController_buckitedGoalsCategories","parameters":[],"responses":{"200":{"description":"List of My Goals Categories"}},"security":[{"bearer":[]}],"summary":"Get My Goals Categories","tags":["My"]}},"/api/my/buckits":{"post":{"operationId":"MyController_buckits","parameters":[{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}},{"name":"sort","required":false,"in":"query","schema":{"enum":["count:asc","count:desc","createdAt:asc","createdAt:desc","alphabetical:asc","alphabetical:desc","status:asc","status:desc"],"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuckitsFilterDto"}}}},"responses":{"200":{"description":"List of My Buckits"}},"security":[{"bearer":[]}],"summary":"Get My Buckits","tags":["My"]}},"/api/my/reviews":{"post":{"operationId":"MyController_reviews","parameters":[{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}},{"name":"sort","required":false,"in":"query","schema":{"enum":["reviewedAt:desc","reviewedAt:asc","alphabetical:asc","alphabetical:desc"],"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MyReviewsFilterDto"}}}},"responses":{"200":{"description":"List of My Reviews"}},"security":[{"bearer":[]}],"summary":"My Reviews","tags":["My"]}},"/api/my/goals":{"post":{"operationId":"MyController_goals","parameters":[{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}},{"name":"sortBy","required":false,"in":"query","schema":{"enum":["most-popular","recommended","best-reviewed","recently-added","nearest"],"type":"string"}},{"name":"liked","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"buckited","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"completed","required":false,"in":"query","schema":{"type":"boolean"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExploreGoalFilterDto"}}}},"responses":{"200":{"description":"List of My Goals"}},"security":[{"bearer":[]}],"summary":"Get My Goals","tags":["My"]}},"/api/my/bookings":{"get":{"operationId":"MyController_bookings","parameters":[{"name":"search","required":false,"in":"query","description":"Search in productName or bookingId","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Filter mode: \"cancelled\", \"upcoming\", or \"past\"","schema":{"enum":["cancelled","upcoming","past"],"type":"string"}}],"responses":{"200":{"description":"List of My Bookings"}},"security":[{"bearer":[]}],"summary":"Get My Bookings","tags":["My"]}},"/api/my/bookings/{bookingId}":{"get":{"operationId":"MyController_bookingsDetails","parameters":[{"name":"bookingId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Booking Details"}},"security":[{"bearer":[]}],"summary":"Get My Bookings Details by Product Code","tags":["My"]}},"/api/my/create-sample-bookings":{"post":{"operationId":"MyController_createSampleBookings","parameters":[],"responses":{"200":{"description":"Loaded sample data for the current user"}},"security":[{"bearer":[]}],"summary":"Create Sample Bookings (*For testing only)","tags":["My"]}},"/api/users/send-welcome-email/{id}":{"post":{"operationId":"UsersController_sendWelcomeEmail","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Sent a welcome email to user."}},"security":[{"bearer":[]}],"summary":"Send welcome email by user id","tags":["Users"]}},"/api/users/find-all":{"post":{"operationId":"UsersController_findAll","parameters":[{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryDto"}}}},"responses":{"200":{"description":"All users retrieved"}},"security":[{"bearer":[]}],"summary":"Find all users","tags":["Users"]}},"/api/users/find-by-id/{id}":{"get":{"operationId":"UsersController_find","parameters":[{"name":"id","required":true,"in":"path","description":"User ID","schema":{"type":"string"}}],"responses":{"200":{"description":"Found an user by id."}},"security":[{"bearer":[]}],"summary":"Find an user by id","tags":["Users"]}},"/api/users/find-by-email/{email}":{"get":{"operationId":"UsersController_findByEmail","parameters":[{"name":"email","required":true,"in":"path","description":"User email","schema":{"type":"string"}}],"responses":{"200":{"description":"Found a user by email!"}},"security":[{"bearer":[]}],"summary":"Find a user by email","tags":["Users"]}},"/api/users/find-by-phone/{phone}":{"get":{"operationId":"UsersController_findByPhone","parameters":[{"name":"phone","required":true,"in":"path","description":"User phone","schema":{"type":"string"}}],"responses":{"200":{"description":"Found a user by phone."}},"security":[{"bearer":[]}],"summary":"Find a user by phone","tags":["Users"]}},"/api/users/create":{"post":{"operationId":"UsersController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserDto"}}}},"responses":{"201":{"description":"User created."}},"security":[{"bearer":[]}],"summary":"Create a new user","tags":["Users"]}},"/api/users/update/{id}":{"put":{"operationId":"UsersController_update","parameters":[{"name":"id","required":true,"in":"path","description":"User ID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserDto"}}}},"responses":{"200":{"description":"User updated."}},"security":[{"bearer":[]}],"summary":"Update an existing user","tags":["Users"]}},"/api/users/delete/{id}":{"delete":{"operationId":"UsersController_delete","parameters":[{"name":"id","required":true,"in":"path","description":"User ID","schema":{"type":"string"}}],"responses":{"200":{"description":"User deleted. If user is not found, returns 404"}},"security":[{"bearer":[]}],"summary":"Delete an existing user","tags":["Users"]}},"/api/my-trips/find-all":{"post":{"operationId":"MyTripsController_findAll","parameters":[{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryDto"}}}},"responses":{"200":{"description":"Trips retrieved successfully."}},"security":[{"bearer":[]}],"summary":"Retrieve all trips for the authenticated user","tags":["My Trips"]}},"/api/my-trips/find-by-id/{id}":{"get":{"operationId":"MyTripsController_findById","parameters":[{"name":"id","required":true,"in":"path","description":"Trip ID","schema":{"type":"string"}}],"responses":{"200":{"description":"Trip retrieved successfully."}},"security":[{"bearer":[]}],"summary":"Find a trip by ID for the authenticated user","tags":["My Trips"]}},"/api/my-trips/create":{"post":{"operationId":"MyTripsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTripDto"}}}},"responses":{"201":{"description":"Trip created successfully."}},"security":[{"bearer":[]}],"summary":"Create a new trip for the authenticated user","tags":["My Trips"]}},"/api/my-trips/update/{id}":{"put":{"operationId":"MyTripsController_update","parameters":[{"name":"id","required":true,"in":"path","description":"Trip ID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTripDto"}}}},"responses":{"200":{"description":"Trip updated successfully."}},"security":[{"bearer":[]}],"summary":"Update an existing trip for the authenticated user","tags":["My Trips"]}},"/api/my-trips/delete/{id}":{"delete":{"operationId":"MyTripsController_delete","parameters":[{"name":"id","required":true,"in":"path","description":"Trip ID","schema":{"type":"string"}}],"responses":{"200":{"description":"Trip deleted successfully. If the trip is not found, returns 404."}},"security":[{"bearer":[]}],"summary":"Delete an existing trip for the authenticated user","tags":["My Trips"]}},"/api/my-trips/{tripId}/itinerary":{"post":{"operationId":"MyTripsController_addItinerary","parameters":[{"name":"tripId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateItineraryDto"}}}},"responses":{"201":{"description":"Itinerary added successfully"}},"security":[{"bearer":[]}],"summary":"Add an itinerary to a trip","tags":["My Trips"]}},"/api/my-trips/{tripId}/itineraries":{"get":{"operationId":"MyTripsController_getItineraries","parameters":[{"name":"tripId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Itineraries retrieved successfully"}},"security":[{"bearer":[]}],"summary":"Get all itineraries for a trip","tags":["My Trips"]}},"/api/my-trips/itinerary/{itineraryId}":{"put":{"operationId":"MyTripsController_updateItinerary","parameters":[{"name":"itineraryId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateItineraryDto"}}}},"responses":{"200":{"description":"Itinerary updated successfully"}},"security":[{"bearer":[]}],"summary":"Update an itinerary","tags":["My Trips"]},"delete":{"operationId":"MyTripsController_deleteItinerary","parameters":[{"name":"itineraryId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Itinerary deleted successfully"}},"security":[{"bearer":[]}],"summary":"Delete an itinerary","tags":["My Trips"]}},"/api/my-trips/{tripId}/itineraries/reorder":{"post":{"operationId":"MyTripsController_reorderItineraries","parameters":[{"name":"tripId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"orderedIds":{"type":"array","items":{"type":"string"},"example":["itineraryId_1","itineraryId_2","itineraryId_3"]}},"required":["orderedIds"]}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Reorder itineraries for a trip","tags":["My Trips"]}},"/api/my-trips/{tripId}/notes":{"post":{"operationId":"MyTripsController_createNote","parameters":[{"name":"tripId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTripNoteDto"}}}},"responses":{"201":{"description":"Trip note created successfully."}},"security":[{"bearer":[]}],"summary":"Create a note for a trip on a specific date","tags":["My Trips"]},"get":{"operationId":"MyTripsController_getNotes","parameters":[{"name":"tripId","required":true,"in":"path","schema":{"type":"string"}},{"name":"date","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Trip notes retrieved successfully."}},"security":[{"bearer":[]}],"summary":"Retrieve all notes for a trip, optionally filtered by date","tags":["My Trips"]}},"/api/my-trips/notes/{noteId}":{"put":{"operationId":"MyTripsController_updateNote","parameters":[{"name":"noteId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTripNoteDto"}}}},"responses":{"200":{"description":"Trip note updated successfully."}},"security":[{"bearer":[]}],"summary":"Update a trip note","tags":["My Trips"]},"delete":{"operationId":"MyTripsController_deleteNote","parameters":[{"name":"noteId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Trip note deleted successfully."}},"security":[{"bearer":[]}],"summary":"Delete a trip note","tags":["My Trips"]}},"/api/roles/find-all":{"post":{"operationId":"RolesController_findAll","parameters":[{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryDto"}}}},"responses":{"200":{"description":"All roles retrieved"}},"security":[{"bearer":[]}],"summary":"Find all roles","tags":["Roles"]}},"/api/roles/find/{id}":{"get":{"operationId":"RolesController_find","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Role retrieved by ID"}},"security":[{"bearer":[]}],"summary":"Find role by id","tags":["Roles"]}},"/api/roles/find-by-name/{name}":{"get":{"operationId":"RolesController_findByName","parameters":[{"name":"name","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Role retrieved by name"}},"security":[{"bearer":[]}],"summary":"Find role by name","tags":["Roles"]}},"/api/roles/create":{"post":{"operationId":"RolesController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRoleDto"}}}},"responses":{"200":{"description":"Role created"}},"security":[{"bearer":[]}],"summary":"Create role","tags":["Roles"]}},"/api/roles/update/{id}":{"put":{"operationId":"RolesController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRoleDto"}}}},"responses":{"200":{"description":"Role updated"}},"security":[{"bearer":[]}],"summary":"Update role","tags":["Roles"]}},"/api/roles/delete/{id}":{"delete":{"operationId":"RolesController_delete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Role deleted"}},"security":[{"bearer":[]}],"summary":"Delete role","tags":["Roles"]}},"/api/countries/interested-users/{countryId}":{"get":{"operationId":"CountriesController_getInterestedUsers","parameters":[{"name":"countryId","required":true,"in":"path","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}},{"name":"countryCode","required":true,"in":"path","description":"International code of the country","schema":{}}],"responses":{"200":{"description":"Interested users retrieved successfully."}},"security":[{"bearer":[]}],"summary":"Retrieve interested users by country","tags":["Countries"]}},"/api/countries/find-all":{"post":{"operationId":"CountriesController_findAllCountries","parameters":[{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}}],"responses":{"200":{"description":"Countries retrieved successfully."}},"summary":"Retrieve all countries","tags":["Countries"]}},"/api/countries/find-by-code/{code}":{"get":{"operationId":"CountriesController_findCountryById","parameters":[{"name":"code","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Country retrieved successfully."},"404":{"description":"Country not found."}},"summary":"Retrieve country by code","tags":["Countries"]}},"/api/countries/find-by-name/{name}":{"get":{"operationId":"CountriesController_findCountryByName","parameters":[{"name":"name","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Country retrieved successfully."},"404":{"description":"Country not found."}},"summary":"Retrieve country by name","tags":["Countries"]}},"/api/countries/create":{"post":{"operationId":"CountriesController_createCountry","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCountryDto"}}}},"responses":{"201":{"description":"Country created successfully."},"409":{"description":"Country already exists."}},"security":[{"bearer":[]}],"summary":"Create a new country","tags":["Countries"]}},"/api/countries/update/{id}":{"put":{"operationId":"CountriesController_updateCountry","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCountryDto"}}}},"responses":{"200":{"description":"Country updated successfully."},"404":{"description":"Country not found."}},"security":[{"bearer":[]}],"summary":"Update an existing country","tags":["Countries"]}},"/api/countries/delete/{id}":{"delete":{"operationId":"CountriesController_deleteCountry","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Country deleted successfully."},"404":{"description":"Country not found."}},"security":[{"bearer":[]}],"summary":"Delete a country","tags":["Countries"]}},"/api/categories/add-tag/{categoryId}/{tagName}":{"post":{"operationId":"CategoriesController_addTag","parameters":[{"name":"categoryId","required":true,"in":"path","schema":{"type":"number"}},{"name":"tagName","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Tag added to category"}},"security":[{"bearer":[]}],"summary":"Add tag to category","tags":["Categories"]}},"/api/categories/remove-tag/{categoryId}/{tagName}":{"delete":{"operationId":"CategoriesController_removeTag","parameters":[{"name":"categoryId","required":true,"in":"path","schema":{"type":"number"}},{"name":"tagName","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Tag removed from category"}},"security":[{"bearer":[]}],"summary":"Remove tag from category","tags":["Categories"]}},"/api/categories/interested-users/{categoryId}":{"get":{"operationId":"CategoriesController_interestedUsers","parameters":[{"name":"categoryId","required":true,"in":"path","description":"Category Id","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}}],"responses":{"200":{"description":"Found interested users by category."}},"security":[{"bearer":[]}],"summary":"Find all interested users by category","tags":["Categories"]}},"/api/categories/find-all":{"post":{"operationId":"CategoriesController_findAll","parameters":[{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryDto"}}}},"responses":{"200":{"description":"Found categories by query."}},"summary":"Find all categories","tags":["Categories"]}},"/api/categories/find/{id}":{"get":{"operationId":"CategoriesController_find","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Found category by id."}},"summary":"Find category by id","tags":["Categories"]}},"/api/categories/find-by-name/{name}":{"get":{"operationId":"CategoriesController_findByName","parameters":[{"name":"name","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Category retrieved by name"}},"summary":"Find category by name","tags":["Categories"]}},"/api/categories/find-sub-categories/{id}":{"get":{"operationId":"CategoriesController_findSubCategories","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Sub-categories retrieved"}},"summary":"Find sub-categories","tags":["Categories"]}},"/api/categories/create":{"post":{"operationId":"CategoriesController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCategoryDto"}}}},"responses":{"200":{"description":"Category created"}},"security":[{"bearer":[]}],"summary":"Create category","tags":["Categories"]}},"/api/categories/update/{id}":{"put":{"operationId":"CategoriesController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCategoryDto"}}}},"responses":{"200":{"description":"Category updated"}},"security":[{"bearer":[]}],"summary":"Update category","tags":["Categories"]}},"/api/categories/delete/{id}":{"delete":{"operationId":"CategoriesController_delete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Category deleted"}},"security":[{"bearer":[]}],"summary":"Delete category","tags":["Categories"]}},"/api/tags/add-to-category/{tagName}/{categoryId}":{"post":{"operationId":"TagsController_addToCategory","parameters":[{"name":"tagName","required":true,"in":"path","schema":{"type":"string"}},{"name":"categoryId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Tag added to category"},"404":{"description":"Tag or category not found"}},"security":[{"bearer":[]}],"summary":"Add tag to category","tags":["Tags"]}},"/api/tags/interested-users/{tagName}":{"get":{"operationId":"TagsController_interestedUsers","parameters":[{"name":"tagName","required":true,"in":"path","description":"Tag name","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}}],"responses":{"200":{"description":"Found interested users by tag"},"404":{"description":"Tag not found"}},"security":[{"bearer":[]}],"summary":"Find all interested users by tag","tags":["Tags"]}},"/api/tags/find-all":{"post":{"operationId":"TagsController_findAll","parameters":[{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}},{"name":"sort","required":false,"in":"query","schema":{"enum":["most-popular","recently-created"],"type":"string"}}],"responses":{"200":{"description":"All tags retrieved"},"400":{"description":"Invalid query parameters"}},"summary":"Find all tags","tags":["Tags"]}},"/api/tags/find/{name}":{"get":{"operationId":"TagsController_find","parameters":[{"name":"name","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Tag retrieved by name"},"404":{"description":"Tag not found"}},"summary":"Find tag by name","tags":["Tags"]}},"/api/tags/create":{"post":{"operationId":"TagsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTagDto"}}}},"responses":{"201":{"description":"Tag created"},"400":{"description":"Invalid tag data"}},"security":[{"bearer":[]}],"summary":"Create tag","tags":["Tags"]}},"/api/tags/delete/{name}":{"delete":{"operationId":"TagsController_delete","parameters":[{"name":"name","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Tag deleted"},"404":{"description":"Tag not found"}},"security":[{"bearer":[]}],"summary":"Delete tag","tags":["Tags"]}},"/api/buckits/change-default/{buckitId}":{"post":{"operationId":"BuckitsController_changeDefault","parameters":[{"name":"buckitId","required":true,"in":"path","schema":{"type":"string"}},{"name":"default","required":true,"in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Buckit default state updated"}},"security":[{"bearer":[]}],"summary":"Change Default State","tags":["Buckits"]}},"/api/buckits/remove-goal/{buckitId}/{goalId}":{"delete":{"operationId":"BuckitsController_removeGoal","parameters":[{"name":"buckitId","required":true,"in":"path","schema":{"type":"string"}},{"name":"goalId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Goal removed from buckit"},"500":{"description":"Failed to remove goal from buckit"}},"security":[{"bearer":[]}],"summary":"Remove goal from buckit","tags":["Buckits"]}},"/api/buckits/find-all":{"post":{"operationId":"BuckitsController_findAll","parameters":[{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}},{"name":"sort","required":false,"in":"query","schema":{"enum":["createdAt:desc","createdAt:asc","alphabetical:asc","alphabetical:desc"],"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuckitsFilterDto"}}}},"responses":{"200":{"description":"All buckits retrieved"}},"security":[{"bearer":[]}],"summary":"Find all buckits (For admin only)","tags":["Buckits"]}},"/api/buckits/find/{id}":{"get":{"operationId":"BuckitsController_find","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Buckit retrieved by id"},"404":{"description":"Buckit not found"}},"security":[{"bearer":[]}],"summary":"Find buckit by id","tags":["Buckits"]}},"/api/buckits/create":{"post":{"operationId":"BuckitsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBuckitDto"}}}},"responses":{"201":{"description":"Buckit created"},"502":{"description":"Failed to create buckit"}},"security":[{"bearer":[]}],"summary":"Create buckit","tags":["Buckits"]}},"/api/buckits/update":{"put":{"operationId":"BuckitsController_update","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBuckitDto"}}}},"responses":{"200":{"description":"Buckit updated"},"404":{"description":"Buckit not found"},"500":{"description":"Failed to update buckit"}},"security":[{"bearer":[]}],"summary":"Update buckit","tags":["Buckits"]}},"/api/buckits/delete/{id}":{"delete":{"operationId":"BuckitsController_delete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Buckit deleted"},"404":{"description":"Buckit not found"},"500":{"description":"Failed to delete buckit"}},"security":[{"bearer":[]}],"summary":"Delete buckit","tags":["Buckits"]}},"/api/goals/explore":{"post":{"operationId":"GoalsController_explore","parameters":[{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}},{"name":"sortBy","required":false,"in":"query","schema":{"enum":["most-popular","recommended","best-reviewed","recently-added","nearest"],"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExploreGoalFilterDto"}}}},"responses":{"200":{"description":"All goals successfully retrieved"}},"security":[{"bearer":[]}],"summary":"Explore Goals","tags":["Goals"]}},"/api/goals/find-suggestions":{"get":{"operationId":"GoalsController_findSuggestions","parameters":[{"name":"goalId","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}}],"responses":{"200":{"description":"Goal suggestions by goal id successfully retrieved"}},"security":[{"bearer":[]}],"summary":"Get goal suggestions by goal id","tags":["Goals"]}},"/api/goals/add-to-buckits/{goalId}":{"post":{"operationId":"GoalsController_addToBuckits","parameters":[{"name":"goalId","required":true,"in":"path","description":"ID of the goal","schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Array of buckit IDs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddGoalToBuckitsDto"}}}},"responses":{"200":{"description":"Goal successfully added or updated to buckits"}},"security":[{"bearer":[]}],"summary":"Add or update goal to buckits","tags":["Goals"]}},"/api/goals/mark-complete/{goalId}":{"post":{"operationId":"GoalsController_markComplete","parameters":[{"name":"goalId","required":true,"in":"path","schema":{"type":"string"}},{"name":"completed","required":false,"in":"query","schema":{"example":true,"type":"boolean"}}],"responses":{"200":{"description":"Goal marked as complete"}},"security":[{"bearer":[]}],"summary":"Mark a goal completed","tags":["Goals"]}},"/api/goals/like/{goalId}":{"post":{"operationId":"GoalsController_like","parameters":[{"name":"goalId","required":true,"in":"path","description":"ID of the goal to add","schema":{"type":"string"}}],"responses":{"200":{"description":"Goal liked or disliked successfully added"},"404":{"description":"GoalId or userId not found"}},"security":[{"bearer":[]}],"summary":"Like or Dislike a Goal","tags":["Goals"]}},"/api/goals/liked-users/{goalId}":{"get":{"operationId":"GoalsController_likedUsers","parameters":[{"name":"goalId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get Liked Users of a Goal","tags":["Goals"]}},"/api/goals/review-photos/{goalId}":{"get":{"operationId":"GoalsController_reviewPhotos","parameters":[{"name":"goalId","required":true,"in":"path","description":"ID of the goal to retrieve","schema":{"type":"string"}}],"responses":{"200":{"description":"Review photos successfully retrieved"}},"summary":"Review photos by goal id","tags":["Goals"]}},"/api/goals/find-all":{"post":{"operationId":"GoalsController_findAll","parameters":[{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}},{"name":"sortBy","required":false,"in":"query","schema":{"enum":["most-popular","recommended","best-reviewed","recently-added","nearest"],"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExploreGoalFilterDto"}}}},"responses":{"200":{"description":"All goals successfully retrieved"}},"security":[{"bearer":[]}],"summary":"Retrieve all goals (for admin only)","tags":["Goals"]}},"/api/goals/find/{id}":{"get":{"operationId":"GoalsController_find","parameters":[{"name":"id","required":true,"in":"path","description":"ID of the goal to retrieve","schema":{"type":"string"}}],"responses":{"200":{"description":"Goal successfully retrieved by ID"},"404":{"description":"Goal not found"}},"security":[{"bearer":[]}],"summary":"Retrieve a goal by ID","tags":["Goals"]}},"/api/goals/create":{"post":{"operationId":"GoalsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGoalDto"}}}},"responses":{"201":{"description":"Goal successfully created"},"400":{"description":"Invalid data"},"409":{"description":"Goal already exists"}},"security":[{"bearer":[]}],"summary":"Create a new goal","tags":["Goals"]}},"/api/goals/update":{"put":{"operationId":"GoalsController_update","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateGoalDto"}}}},"responses":{"200":{"description":"Goal successfully updated"},"404":{"description":"Goal not found"}},"security":[{"bearer":[]}],"summary":"Update an existing goal","tags":["Goals"]}},"/api/goals/delete/{id}":{"delete":{"operationId":"GoalsController_delete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Goal successfully deleted"},"404":{"description":"Goal not found"}},"security":[{"bearer":[]}],"summary":"Delete a goal","tags":["Goals"]}},"/api/private-goals/find-all":{"post":{"operationId":"PrivateGoalsController_findAll","parameters":[{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}},{"name":"sortBy","required":false,"in":"query","schema":{"enum":["recently-added","nearest"],"type":"string"}}],"requestBody":{"required":true,"description":"Filter options","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivateGoalFilterDto"}}}},"responses":{"200":{"description":"List of private goals"}},"security":[{"bearer":[]}],"summary":"Find all private goals","tags":["Private Goals"]}},"/api/private-goals/find/{id}":{"get":{"operationId":"PrivateGoalsController_find","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Private goal found"},"404":{"description":"Goal not found"}},"security":[{"bearer":[]}],"summary":"Find a private goal by ID","tags":["Private Goals"]}},"/api/private-goals/create":{"post":{"operationId":"PrivateGoalsController_create","parameters":[],"requestBody":{"required":true,"description":"Private goal details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivateGoalDto"}}}},"responses":{"201":{"description":"Private goal successfully created"}},"security":[{"bearer":[]}],"summary":"Create a private goal","tags":["Private Goals"]}},"/api/private-goals/update/{id}":{"put":{"operationId":"PrivateGoalsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Private goal details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivateGoalDto"}}}},"responses":{"200":{"description":"Goal successfully updated"},"404":{"description":"Goal not found"}},"security":[{"bearer":[]}],"summary":"Update a private goal","tags":["Private Goals"]}},"/api/private-goals/delete/{id}":{"delete":{"operationId":"PrivateGoalsController_delete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Goal successfully deleted"},"404":{"description":"Goal not found"}},"security":[{"bearer":[]}],"summary":"Delete a private goal","tags":["Private Goals"]}},"/api/collections/find-all":{"post":{"operationId":"CollectionsController_findAll","parameters":[{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryDto"}}}},"responses":{"200":{"description":"All collections retrieved"}},"summary":"Find all collections","tags":["Collections"]}},"/api/collections/find/{id}":{"get":{"operationId":"CollectionsController_find","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Collection retrieved by ID"}},"summary":"Find collection by id","tags":["Collections"]}},"/api/collections/create":{"post":{"operationId":"CollectionsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCollectionDto"}}}},"responses":{"201":{"description":"Collection created successfully."},"409":{"description":"Collection already exists."}},"security":[{"bearer":[]}],"summary":"Create a new collection","tags":["Collections"]}},"/api/collections/update/{id}":{"put":{"operationId":"CollectionsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCollectionDto"}}}},"responses":{"200":{"description":"Collection updated successfully."},"404":{"description":"Collection not found."}},"security":[{"bearer":[]}],"summary":"Update a collection","tags":["Collections"]}},"/api/collections/delete/{id}":{"delete":{"operationId":"CollectionsController_delete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Collection deleted successfully."},"404":{"description":"Collection not found."}},"security":[{"bearer":[]}],"summary":"Delete a collection","tags":["Collections"]}},"/api/reviews/find-all":{"post":{"operationId":"ReviewsController_findAll","parameters":[{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}},{"name":"sort","required":false,"in":"query","schema":{"enum":["reviewedAt:desc","reviewedAt:asc","alphabetical:asc","alphabetical:desc"],"type":"string"}},{"name":"flag","required":false,"in":"query","schema":{"example":"true","type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewFilterDto"}}}},"responses":{"200":{"description":"All reviews retrieved"}},"security":[{"bearer":[]}],"summary":"Find all reviews","tags":["Reviews"]}},"/api/reviews/find/{id}":{"get":{"operationId":"ReviewsController_find","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Review retrieved by ID"}},"security":[{"bearer":[]}],"summary":"Find review by id","tags":["Reviews"]}},"/api/reviews/like/{reviewId}":{"post":{"operationId":"ReviewsController_like","parameters":[{"name":"reviewId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Review liked/disliked"}},"security":[{"bearer":[]}],"summary":"Like/Dislike review","tags":["Reviews"]}},"/api/reviews/create":{"post":{"operationId":"ReviewsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Create_reviewDto"}}}},"responses":{"201":{"description":"Review created"}},"security":[{"bearer":[]}],"summary":"Create review","tags":["Reviews"]}},"/api/reviews/update/{id}":{"put":{"operationId":"ReviewsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Update_reviewDto"}}}},"responses":{"200":{"description":"Review updated"}},"security":[{"bearer":[]}],"summary":"Update review (admin only)","tags":["Reviews"]}},"/api/reviews/delete/{id}":{"delete":{"operationId":"ReviewsController_delete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Review deleted"}},"security":[{"bearer":[]}],"summary":"Delete review","tags":["Reviews"]}},"/api/suggestions/find-all":{"post":{"operationId":"SuggestionsController_findAll","parameters":[{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryDto"}}}},"responses":{"200":{"description":"All suggestions retrieved"}},"security":[{"bearer":[]}],"summary":"Find all suggestions","tags":["Suggestions"]}},"/api/suggestions/find/{id}":{"get":{"operationId":"SuggestionsController_find","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Suggestion retrieved by ID"}},"security":[{"bearer":[]}],"summary":"Find suggestion by id","tags":["Suggestions"]}},"/api/suggestions/create":{"post":{"operationId":"SuggestionsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSuggestionDto"}}}},"responses":{"200":{"description":"Suggestion created"}},"security":[{"bearer":[]}],"summary":"Create suggestion","tags":["Suggestions"]}},"/api/suggestions/update/{id}":{"put":{"operationId":"SuggestionsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSuggestionDto"}}}},"responses":{"200":{"description":"Suggestion updated"}},"security":[{"bearer":[]}],"summary":"Update suggestion","tags":["Suggestions"]}},"/api/suggestions/delete/{id}":{"delete":{"operationId":"SuggestionsController_delete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Suggestion deleted"}},"security":[{"bearer":[]}],"summary":"Delete suggestion","tags":["Suggestions"]}},"/api/bookit/explore":{"post":{"operationId":"BookitController_explore","parameters":[{"name":"sort","required":false,"in":"query","schema":{"enum":["price:asc","price:desc","traveler-rating:asc","traveler-rating:desc","itinerary-duration:asc","itinerary-duration:desc","date-added:asc","date-added:desc"],"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExploreBookitFilterDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get a list of filtered, ordered and sorted product summaries for products.","tags":["Bookit"]}},"/api/bookit/freetext":{"post":{"operationId":"BookitController_freeTextSearch","parameters":[{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}},{"name":"sort","required":false,"in":"query","description":"Sorting method.\n\"DEFAULT\": the default sort order.\n\"PRICE:asc\" or \"PRICE:desc\": sort by price (ascending or descending, default is ascending if omitted).\n\"TRAVELER_RATING:desc\": sort by traveler rating (only descending supported).\n\"ITINERARY_DURATION\": sort by duration (in minutes).\n\"DATE_ADDED\": sort by when the product was added.","schema":{"example":"DEFAULT","type":"string"}}],"requestBody":{"required":true,"description":"Free text search request payload (pagination is set via query params)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreetextSearchRequest"}}}},"responses":{"200":{"description":"Free text search results returned with enriched tag and destination details"}},"summary":"Perform free text search across products, attractions, and destinations","tags":["Bookit"]}},"/api/bookit/explore/{productCode}":{"get":{"operationId":"BookitController_exploreProduct","parameters":[{"name":"productCode","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Get full product details for a single product.","tags":["Bookit"]}},"/api/bookit/availability/check":{"post":{"operationId":"BookitController_availabilityCheck","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductAvailabilityDto"}}}},"responses":{"200":{"description":"Product availability retrieved"}},"summary":"Check real-time availability and pricing for a product depending on the date, travellers, start time and/or product option.","tags":["Bookit"]}},"/api/bookit/product/booking-questions":{"get":{"operationId":"BookitController_bookingQuestions","parameters":[],"responses":{"200":{"description":"Products booking questions retrieved successfully"}},"summary":"Get products booking questions","tags":["Bookit"]}},"/api/bookit/booking/cancel-reasons":{"get":{"operationId":"BookitController_Cancelreasons","parameters":[],"responses":{"200":{"description":"Cancel reasons reterive successfully"}},"summary":"Cancel reasons","tags":["Bookit"]}},"/api/bookit/availability/schedules/{productCode}":{"get":{"operationId":"BookitController_availabilitySchedules","parameters":[{"name":"productCode","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Product availability schedules retrieved"}},"summary":"Get availability and pricing details for all product options of the requested product.","tags":["Bookit"]}},"/api/bookit/availability/schedules/bulk":{"post":{"operationId":"BookitController_availabilitySchedulesBulk","parameters":[],"requestBody":{"required":true,"description":"Product codes to retrieve availability schedules for","content":{"application/json":{"schema":{"type":"object","properties":{"productCodes":{"type":"array","items":{"type":"string"},"example":["P12345","P67890"]}}}}}},"responses":{"200":{"description":"Product availability schedules retrieved"}},"summary":"Get availability and pricing details for all product options of all requested products. The pricing is returned in the supplier's currency.","tags":["Bookit"]}},"/api/bookit/bookings/cart/hold":{"post":{"operationId":"BookitController_bookingsCartHold","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingsCartHoldRequestDto"}}}},"responses":{"200":{"description":"Cart hold created successfully"}},"security":[{"bearer":[]}],"summary":"Cart hold","tags":["Bookit"]}},"/api/bookit/bookings/cart/book":{"post":{"operationId":"BookitController_bookingsCartBook","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingsCartBookRequestDto"}}}},"responses":{"200":{"description":"Cart booked successfully"}},"security":[{"bearer":[]}],"summary":"Cart book","tags":["Bookit"]}},"/api/bookit/{sessionToken}/paymentaccounts":{"post":{"operationId":"BookitController_addPaymentAccount","parameters":[{"name":"sessionToken","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddPaymentAccountsDto"}}}},"responses":{"200":{"description":"Payment account added"}},"security":[{"bearer":[]}],"summary":"Add payment account to checkout session","tags":["Bookit"]}},"/api/bookit/bookings/hold":{"post":{"operationId":"BookitController_bookingsHold","parameters":[],"responses":{"200":{"description":"Booking hold created"}},"summary":"(**BUG) Requests the creation of a booking-hold - a guarantee that either the price or availability (or both) of the product will be retained until a booking request is made.","tags":["Bookit"]}},"/api/bookit/bookings/status":{"post":{"operationId":"BookitController_bookingsStatus","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingStatusRequestDto"}}}},"responses":{"200":{"description":"Current status of the booking"}},"summary":"Retrieve booking status for a given reference","tags":["Bookit"]}},"/api/bookit/bookings/{bookingReference}/cancel":{"post":{"operationId":"BookitController_bookingsCancel","parameters":[{"name":"bookingReference","required":true,"in":"path","description":"The Viator bookingRef to cancel","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancellationRequestDto"}}}},"responses":{"200":{"description":"Cancellation successful"}},"security":[{"bearer":[]}],"summary":"Cancel a booking both on Viator and locally","tags":["Bookit"]}},"/api/bookit/reviews/{productCode}":{"get":{"operationId":"BookitController_reviews","parameters":[{"name":"productCode","required":true,"in":"path","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}},{"name":"sortBy","required":false,"in":"query","schema":{"enum":["HIGHEST_RATING_PER_LOCALE","MOST_RECENT_PER_LOCALE","MOST_HELPFUL_PER_LOCALE","HIGHEST_RATING","MOST_RECENT","MOST_HELPFUL"],"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Retrieves and filters reviews for a single product Reviews.","tags":["Bookit"]}},"/api/bookit/flags":{"get":{"operationId":"BookitController_flags","parameters":[],"responses":{"200":{"description":""}},"summary":"Explore product flags","tags":["Bookit"]}},"/api/bookit/attractions":{"get":{"operationId":"BookitController_attractions","parameters":[{"name":"destinationId","required":true,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}},{"name":"sort","required":false,"in":"query","schema":{"enum":["DEFAULT","ALPHABETICAL","REVIEW_AVG_RATING"],"type":"string"}}],"responses":{"200":{"description":"Attractions retrieved"}},"summary":"Get attractions","tags":["Bookit"]}},"/api/bookit/attractions/{attractionId}":{"get":{"operationId":"BookitController_attractionByAttractionId","parameters":[{"name":"attractionId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"summary":"Get attraction by attractionId","tags":["Bookit"]}},"/api/bookit/destinations":{"get":{"operationId":"BookitController_destinations","parameters":[{"name":"type","required":false,"in":"query","schema":{"enum":["NEIGHBORHOOD","PROVINCE","AREA","TOWN","NATIONAL_PARK","PENINSULA","COUNTY","CITY","VILLAGE","COUNTRY","UNION_TERRITORY","STATE","DISTRICT","ISLAND","WARD","REGION"],"type":"string"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"lat","required":false,"in":"query","schema":{"type":"number"}},{"name":"lng","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}}],"responses":{"200":{"description":""}},"summary":"Get destinations","tags":["Bookit"]}},"/api/bookit/destinations/types":{"get":{"operationId":"BookitController_destinationTypes","parameters":[],"responses":{"200":{"description":""}},"summary":"Get destination types","tags":["Bookit"]}},"/api/bookit/destinations/{destinationId}":{"get":{"operationId":"BookitController_destinationByDestinationId","parameters":[{"name":"destinationId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"summary":"Get destination by destinationId","tags":["Bookit"]}},"/api/bookit/destinations/migrate":{"post":{"operationId":"BookitController_migrateDestinations","parameters":[{"name":"force","required":false,"in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Destinations migrated successfully"},"502":{"description":"Failed to migrate destinations"}},"security":[{"bearer":[]}],"summary":"Migrate destinations from Viator (Admin)","tags":["Bookit"]}},"/api/bookit/tags":{"get":{"operationId":"BookitController_tags","parameters":[{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}}],"responses":{"200":{"description":""}},"summary":"Get tags","tags":["Bookit"]}},"/api/bookit/tags/find-by-tagId/{tagId}":{"get":{"operationId":"BookitController_tagByTagId","parameters":[{"name":"tagId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"summary":"Get tag by tagId","tags":["Bookit"]}},"/api/bookit/tags/locales":{"get":{"operationId":"BookitController_tagLocales","parameters":[],"responses":{"200":{"description":""}},"summary":"Get locale options","tags":["Bookit"]}},"/api/bookit/tags/migrate":{"post":{"operationId":"BookitController_migrateTags","parameters":[{"name":"force","required":false,"in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Tags migrated successfully"},"502":{"description":"Failed to migrate tags"}},"security":[{"bearer":[]}],"summary":"Migrate tags from Viator (Admin)","tags":["Bookit"]}},"/api/faqs/find-all":{"post":{"operationId":"FaqsController_findAll","parameters":[{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryDto"}}}},"responses":{"200":{"description":"All faqs retrieved"}},"summary":"Find all faqs","tags":["Faqs"]}},"/api/faqs/find/{id}":{"get":{"operationId":"FaqsController_find","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Faq retrieved by ID"}},"summary":"Find faq by id","tags":["Faqs"]}},"/api/faqs/create":{"post":{"operationId":"FaqsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFaqDto"}}}},"responses":{"201":{"description":"Faq created"}},"security":[{"bearer":[]}],"summary":"Create faq","tags":["Faqs"]}},"/api/faqs/update/{id}":{"put":{"operationId":"FaqsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateFaqDto"}}}},"responses":{"200":{"description":"Faq updated"}},"security":[{"bearer":[]}],"summary":"Update faq","tags":["Faqs"]}},"/api/faqs/delete":{"delete":{"operationId":"FaqsController_delete","parameters":[{"name":"id","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Delete faq","tags":["Faqs"]}},"/api/audits/email":{"post":{"operationId":"AuditsController_findAllEmailAudits","parameters":[{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryDto"}}}},"responses":{"200":{"description":"All email audits retrieved"}},"security":[{"bearer":[]}],"summary":"Find all email audits","tags":["Audits"]}},"/api/audits/sms":{"post":{"operationId":"AuditsController_findAllSmsAudits","parameters":[{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryDto"}}}},"responses":{"200":{"description":"All sms audits retrieved"}},"security":[{"bearer":[]}],"summary":"Find all sms audits","tags":["Audits"]}},"/api/audits/email/{id}":{"get":{"operationId":"AuditsController_findEmailAudit","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Email audit retrieved by ID"}},"security":[{"bearer":[]}],"summary":"Find email audit by id","tags":["Audits"]}},"/api/audits/sms/{id}":{"get":{"operationId":"AuditsController_findSmsAudit","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Sms audit retrieved by ID"}},"security":[{"bearer":[]}],"summary":"Find sms audit by id","tags":["Audits"]}},"/api/audits/email/delete/{id}":{"delete":{"operationId":"AuditsController_deleteEmailAudit","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Email audit deleted by ID"}},"security":[{"bearer":[]}],"summary":"Delete email audit by id","tags":["Audits"]}},"/api/audits/sms/delete/{id}":{"delete":{"operationId":"AuditsController_deleteSmsAudit","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Sms audit deleted by ID"}},"security":[{"bearer":[]}],"summary":"Delete sms audit by id","tags":["Audits"]}},"/api/unsplash/{search}":{"get":{"operationId":"UnsplashController_getUnsplashPhoto","parameters":[{"name":"search","required":true,"in":"path","description":"Search query for photos","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of photos per page","schema":{"example":10,"type":"number"}},{"name":"orderBy","required":false,"in":"query","description":"Order by","examples":{"relevant":{"value":"relevant"},"latest":{"value":"latest"},"oldest":{"value":"oldest"}},"schema":{"type":"string"}},{"name":"orientation","required":false,"in":"query","description":"Photo orientation","examples":{"landscape":{"value":"landscape"},"portrait":{"value":"portrait"},"squarish":{"value":"squarish"}},"schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Get a random photo from Unsplash","tags":["Unsplash"]}},"/api/unsplash/bulk-search":{"post":{"operationId":"UnsplashController_getBulkUnsplashPhotos","parameters":[],"requestBody":{"required":true,"description":"Array of place names to search for","content":{"application/json":{"schema":{"type":"object","properties":{"places":{"type":"array","items":{"type":"string"},"example":["Paris","Tokyo","New York","London"]},"imagesPerPlace":{"type":"number","minimum":1,"maximum":5,"default":2,"example":2},"orientation":{"type":"string","enum":["landscape","portrait","squarish"],"default":"landscape","example":"landscape"}},"required":["places"]}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Get photos for multiple places/cities from Unsplash","tags":["Unsplash"]}},"/api/uploads/objects":{"get":{"operationId":"UploadsController_getAllObjects","parameters":[{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"path","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"All objects successfully retrieved"}},"security":[{"bearer":[]}],"tags":["Uploads"]}},"/api/uploads/signed/{key}":{"get":{"operationId":"UploadsController_getSignedUrl","parameters":[{"name":"key","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Signed URL successfully retrieved"}},"tags":["Uploads"]}},"/api/uploads/upload":{"post":{"operationId":"UploadsController_upload","parameters":[],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}}}}}},"responses":{"200":{"description":"The file has been uploaded successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadResponseDto"}}}}},"security":[{"bearer":[]}],"tags":["Uploads"]}},"/api/uploads/delete":{"delete":{"operationId":"UploadsController_delete","parameters":[{"name":"key","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"The file has been deleted successfully."}},"security":[{"bearer":[]}],"tags":["Uploads"]}},"/api/misc/currencies":{"get":{"operationId":"MiscController_currencies","parameters":[{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10}}],"responses":{"200":{"description":""}},"summary":"Get currencies","tags":["Misc"]}},"/api/misc/currency/{code}":{"get":{"operationId":"MiscController_currency","parameters":[{"name":"code","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Get currency by code","tags":["Misc"]}},"/api/misc/locations":{"post":{"operationId":"MiscController_locations","parameters":[],"requestBody":{"required":true,"description":"Bulk location references","content":{"application/json":{"schema":{"type":"array","items":{"type":"string","example":"ref"}}}}},"responses":{"201":{"description":""}},"summary":"Get bulk locations by ref","tags":["Misc"]}},"/api/misc/locations/{ref}":{"get":{"operationId":"MiscController_locationsByRef","parameters":[{"name":"ref","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Get location by ref","tags":["Misc"]}},"/api/misc/destinations/bulk":{"post":{"operationId":"MiscController_destinations","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MiscDestinationsFilterDto"}}}},"responses":{"200":{"description":""}},"summary":"Get bulk destinations","tags":["Misc"]}}},"info":{"title":"Buckit","description":"Buckit API Documentation","version":"1.0","contact":{"name":"Home","url":"/","email":""}},"tags":[],"servers":[{"url":"/"}],"components":{"securitySchemes":{"bearer":{"scheme":"Bearer","bearerFormat":"Bearer","description":"[just text field] Please enter token in following format: Bearer <JWT>","name":"Authorization","type":"http","in":"Header"}},"schemas":{"CredentialsDto":{"type":"object","properties":{"email":{"type":"string"},"phone":{"type":"string"},"type":{"type":"string","description":"Options: email | phone"},"password":{"type":"string"}},"required":["type","password"]},"RegisterDto":{"type":"object","properties":{"firstName":{"type":"string","description":"The first name of the users"},"lastName":{"type":"string","description":"The last name of the users"},"email":{"type":"string","description":"The email of the users"},"phone":{"type":"string","description":"The phone of the users"},"password":{"type":"string","description":"The password of the users"},"language":{"type":"string","description":"User preferred language","example":"en-US"},"currency":{"type":"string","description":"User preferred currency","example":"USD"}},"required":["password"]},"GoogleLoginDto":{"type":"object","properties":{"credential":{"type":"string","description":"google credential"},"client_id":{"type":"string","description":"google client_id"}},"required":["credential","client_id"]},"AppleLoginDto":{"type":"object","properties":{"identityToken":{"type":"string","description":"Apple identity token"},"clientId":{"type":"string","description":"Apple client ID"},"name":{"type":"string","description":"Optional user name provided on first login"}},"required":["identityToken","clientId"]},"ForgotPasswordDto":{"type":"object","properties":{"email":{"type":"string","description":"The email of the users"},"phone":{"type":"string","description":"The phone of the users"},"type":{"type":"string","description":"Options: email | phone"}},"required":["type"]},"VerifyOtpDto":{"type":"object","properties":{"token":{"type":"string","description":"The verification token"},"code":{"type":"string","description":"The one-time password"}},"required":["token","code"]},"SetPasswordDto":{"type":"object","properties":{"token":{"type":"string","description":"The verification token"},"password":{"type":"string","description":"The new password"}},"required":["token","password"]},"UpdateProfileDto":{"type":"object","properties":{"firstName":{"type":"string","description":"The first name of the user"},"lastName":{"type":"string","description":"The last name of the user"},"email":{"type":"string","description":"User email address"},"phone":{"type":"string","description":"User phone number"},"dob":{"type":"string","description":"User date of birth in DD-MM-YYYY format"},"gender":{"type":"string","description":"User gender","enum":["male","female","other"]},"countryId":{"type":"number","description":"User country ID"},"location":{"type":"string","description":"User location"},"lat":{"type":"number","description":"User location (Latitude)"},"lng":{"type":"number","description":"User location (Longitude)"},"language":{"type":"string","description":"User preferred language","example":"en-US"},"currency":{"type":"string","description":"User preferred currency","example":"USD"},"username":{"type":"string","description":"Username"}}},"CheckUsernameDto":{"type":"object","properties":{"username":{"type":"string","description":"The username to check availability"}},"required":["username"]},"RequestVerificationDto":{"type":"object","properties":{"email":{"type":"string"},"phone":{"type":"string"},"type":{"type":"string","description":"Options: email | phone"}},"required":["type"]},"ConfirmVerificationDto":{"type":"object","properties":{"token":{"type":"string","description":"The verification token"},"code":{"type":"string","description":"The phone of the users"}},"required":["token","code"]},"UploadResponseDto":{"type":"object","properties":{"url":{"type":"string","description":"URL of the uploaded image","example":"https://example-bucket.s3.amazonaws.com/{userId}/image.jpg"},"key":{"type":"string","description":"S3 key of the uploaded image","example":"{userId}/image.jpg"}},"required":["url","key"]},"RequestUpdateDetailDto":{"type":"object","properties":{"email":{"type":"string","description":"The email of the users"},"phone":{"type":"string","description":"The phone of the users"},"request_type":{"type":"string","description":"It will be phone or email"}},"required":["request_type"]},"ConfirmUpdateDetailDto":{"type":"object","properties":{"token":{"type":"string","description":"The verification token"},"code":{"type":"string","description":"The code of the users"},"email":{"type":"string","description":"The email of the users"},"phone":{"type":"string","description":"The phone of the users"}},"required":["token","code","email","phone"]},"BuckitsFilterDto":{"type":"object","properties":{"tags":{"description":"Tag names to filter by","example":["adventure","nature"],"type":"array","items":{"type":"string"}}}},"MyReviewsFilterDto":{"type":"object","properties":{}},"PositionDto":{"type":"object","properties":{"latitude":{"type":"number","description":"Latitude for the position","example":40.7128},"longitude":{"type":"number","description":"Longitude for the position","example":-74.006}},"required":["latitude","longitude"]},"ExploreGoalFilterDto":{"type":"object","properties":{"categoryIds":{"description":"Category IDs to filter by","example":[1,2,3],"type":"array","items":{"type":"number"}},"tags":{"description":"Tag names to filter by","example":["Adventure","Nature"],"type":"array","items":{"type":"string"}},"rating":{"type":"object","description":"Rating filter with minimum and maximum values","example":{"min":0,"max":5}},"positions":{"description":"Array of geographical positions for filtering or sorting","example":[{"latitude":40.7128,"longitude":-74.006},{"latitude":34.0522,"longitude":-118.2437}],"type":"array","items":{"$ref":"#/components/schemas/PositionDto"}},"radius":{"type":"number","description":"Common radius for filtering by the provided positions","example":1000},"collectionId":{"type":"string","description":"Collection ID to filter by"}}},"QueryDto":{"type":"object","properties":{"where":{"type":"object","description":"Filter conditions for query"},"orderBy":{"type":"object","description":"Sorting order for query"},"select":{"type":"object","description":"Select fields for query"},"include":{"type":"object","description":"Include fields for query"}}},"CreateUserDto":{"type":"object","properties":{"firstName":{"type":"string","description":"The first name of the user"},"lastName":{"type":"string","description":"The last name of the user"},"email":{"type":"string","description":"The email of the user"},"phone":{"type":"string","description":"The phone number of the user"},"password":{"type":"string","description":"The password of the user"},"roleId":{"type":"string","description":"The role id of the user"},"gender":{"type":"string","description":"The gender of the user","enum":["male","female","other"]},"dob":{"type":"string","description":"User date of birth in YYYY-MM-DD format"},"countryId":{"type":"number","description":"Country Id"},"location":{"type":"string","description":"The location of the user"},"lat":{"type":"number","description":"User Location (Latitude)"},"lng":{"type":"number","description":"User Location (Longitude)"},"language":{"type":"string","description":"User preferred language","example":"en-US"},"currency":{"type":"string","description":"User preferred currency","example":"USD"}}},"UpdateUserDto":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the user"},"firstName":{"type":"string","description":"The first name of the user"},"lastName":{"type":"string","description":"The last name of the user"},"email":{"type":"string","description":"The email of the user"},"phone":{"type":"string","description":"The phone number of the user"},"password":{"type":"string","description":"The password of the user"},"roleId":{"type":"string","description":"The role id of the user"},"gender":{"type":"string","description":"The gender of the user","enum":["male","female","other"]},"dob":{"type":"string","description":"User date of birth in YYYY-MM-DD format"},"countryId":{"type":"number","description":"Country Id"},"location":{"type":"string","description":"The location of the user"},"lat":{"type":"number","description":"User Location (Latitude)"},"lng":{"type":"number","description":"User Location (Longitude)"},"language":{"type":"string","description":"User preferred language","example":"en-US"},"currency":{"type":"string","description":"User preferred currency","example":"USD"},"username":{"type":"string","description":"Username"}},"required":["id"]},"CreateTripDto":{"type":"object","properties":{"name":{"type":"string","description":"The name of trip"},"imageUrls":{"description":"The image  url taken from unsplash api","type":"array","items":{"type":"string"}},"startDate":{"type":"string","description":"The start date of the trip in YYYY-MM-DD format"},"endDate":{"type":"string","description":"The end date of the trip in YYYY-MM-DD format"},"travelingWith":{"type":"string","description":"Who is traveling with (solo, couple, family, friends)","enum":["solo","couple","family","friends"]},"budget":{"type":"string","description":"The budget for the trip (budgeted, moderate, luxury)","enum":["budgeted","moderate","luxury"]},"tripTags":{"description":"List of travel interests from tags (e.g., adventure, relaxation, etc.)","type":"array","items":{"type":"string"}},"tripDestinations":{"description":"List of travel interests from destination ","type":"array","items":{"type":"number"}},"tripGoals":{"description":"List of Goals for the trip","type":"array","items":{"type":"string"}},"currentLat":{"type":"number","description":"Current latitude of the trip"},"currentLng":{"type":"number","description":"Current longitude of the trip"}},"required":["name","imageUrls","startDate","endDate","travelingWith","budget"]},"UpdateTripDto":{"type":"object","properties":{"name":{"type":"string","description":"The name of trip"},"imageUrls":{"description":"The image  url taken from unsplash api","type":"array","items":{"type":"string"}},"startDate":{"type":"string","description":"The start date of the trip in YYYY-MM-DD format"},"endDate":{"type":"string","description":"The end date of the trip in YYYY-MM-DD format"},"travelingWith":{"type":"string","description":"Who is traveling with (solo, couple, family, friends)","enum":["solo","couple","family","friends"]},"budget":{"type":"string","description":"The budget for the trip (budgeted, moderate, luxury)","enum":["budgeted","moderate","luxury"]},"tripTags":{"description":"List of travel interests from tags (e.g., adventure, relaxation, etc.)","type":"array","items":{"type":"string"}},"tripDestinations":{"description":"List of travel interests from destination ","type":"array","items":{"type":"number"}},"tripGoals":{"description":"List of Goals for the trip","type":"array","items":{"type":"string"}},"currentLat":{"type":"number","description":"Current latitude of the trip"},"currentLng":{"type":"number","description":"Current longitude of the trip"}},"required":["name","imageUrls"]},"CreateItineraryDto":{"type":"object","properties":{"bookingDate":{"type":"string","description":"Booking date in ISO 8601 format (e.g., 2025-01-16T15:30:00Z)","example":"2025-01-16T15:30:00Z"},"bookingName":{"type":"string","description":"Generic booking name (required if bookingType is “booking”)"},"bookingType":{"type":"string","description":"Type of booking (transportation, hotel, experience, goal)","enum":["transportation","hotel","experience","goal","booking"]},"transportationType":{"type":"string","description":"Type of Transportation (Flight, Train, Boat, Car/Bus)","enum":["Flight","Train","Boat","Car/Bus"]},"transportationName":{"type":"string","description":"Transportation Name (Optional)"},"departureLocation":{"type":"string","description":"Departure Location (Required for transportation)"},"departureDate":{"type":"string","description":"Departure Date (Required for transportation, ISO 8601 format)"},"arrivalLocation":{"type":"string","description":"Arrival Location (Required for transportation)"},"arrivalDate":{"type":"string","description":"Arrival Date (Required for transportation, ISO 8601 format)"},"isBooked":{"type":"boolean","description":"Booked? (Yes/No) (common for transportation and hotel)"},"departureTime":{"type":"string","description":"Departure Time in HH:mm format (Required for transportation)"},"arrivalTime":{"type":"string","description":"Arrival Time in HH:mm format (Required for transportation)"},"transportNumber":{"type":"string","description":"Transportation Number (Flight/Train/Bus/Boat Number, Optional)"},"bookingNumber":{"type":"string","description":"Booking Number (common for transportation and hotel)"},"hotelDestinationCity":{"type":"string","description":"Destination City (Required for hotel bookings)"},"checkInTime":{"type":"string","description":"Check-in Time in HH:mm format (Required for hotel bookings)"},"checkOutTime":{"type":"string","description":"Check-out Time in HH:mm format (Required for hotel bookings)"},"hotelAddress":{"type":"string","description":"Address (Optional for hotel bookings)"},"notes":{"type":"string","description":"Notes (Optional for any booking type)"},"goalIds":{"description":"Array of goal IDs (required if bookingType is goal)","example":["goal-id-1","goal-id-2"],"type":"array","items":{"type":"string"}},"experienceDetails":{"type":"object","description":"Experience details (optional, required if bookingType is experience)"},"bookingTime":{"type":"string","description":"Booking time in HH:mm format (optional, defaults to \"00:00\")","example":"00:00"},"FromDestination":{"type":"string","description":"From destination (legacy for flight bookings)"},"FromLat":{"type":"number","description":"Latitude of the from destination (legacy for flight bookings)"},"FromLng":{"type":"number","description":"Longitude of the from destination (legacy for flight bookings)"},"ToDestination":{"type":"string","description":"To destination (legacy for flight bookings)"},"ToLat":{"type":"number","description":"Latitude of the to destination (legacy for flight bookings)"},"ToLng":{"type":"number","description":"Longitude of the to destination (legacy for flight bookings)"},"FlightNumber":{"type":"string","description":"Flight number (legacy for flight bookings)"},"HotelName":{"type":"string","description":"Hotel name (legacy for hotel bookings)"},"HotelLocation":{"type":"string","description":"Hotel location (legacy for hotel bookings)"},"HotelLat":{"type":"number","description":"Latitude of the hotel (legacy for hotel bookings)"},"HotelLng":{"type":"number","description":"Longitude of the hotel (legacy for hotel bookings)"}},"required":["bookingDate","bookingType","hotelDestinationCity"]},"UpdateItineraryDto":{"type":"object","properties":{"bookingDate":{"type":"string","description":"Booking date in ISO 8601 format (e.g., 2025-01-16T15:30:00Z)","example":"2025-01-16T15:30:00Z"},"bookingName":{"type":"string","description":"Generic booking name (required if bookingType is “booking”)"},"bookingType":{"type":"string","description":"Type of booking (transportation, hotel, experience, goal)","enum":["transportation","hotel","experience","goal","booking"]},"transportationType":{"type":"string","description":"Type of Transportation (Flight, Train, Boat, Car/Bus)","enum":["Flight","Train","Boat","Car/Bus"]},"transportationName":{"type":"string","description":"Transportation Name (Optional)"},"departureLocation":{"type":"string","description":"Departure Location (Required for transportation)"},"departureDate":{"type":"string","description":"Departure Date (Required for transportation, ISO 8601 format)"},"arrivalLocation":{"type":"string","description":"Arrival Location (Required for transportation)"},"arrivalDate":{"type":"string","description":"Arrival Date (Required for transportation, ISO 8601 format)"},"isBooked":{"type":"boolean","description":"Booked? (Yes/No) (common for transportation and hotel)"},"departureTime":{"type":"string","description":"Departure Time in HH:mm format (Required for transportation)"},"arrivalTime":{"type":"string","description":"Arrival Time in HH:mm format (Required for transportation)"},"transportNumber":{"type":"string","description":"Transportation Number (Flight/Train/Bus/Boat Number, Optional)"},"bookingNumber":{"type":"string","description":"Booking Number (common for transportation and hotel)"},"hotelDestinationCity":{"type":"string","description":"Destination City (Required for hotel bookings)"},"checkInTime":{"type":"string","description":"Check-in Time in HH:mm format (Required for hotel bookings)"},"checkOutTime":{"type":"string","description":"Check-out Time in HH:mm format (Required for hotel bookings)"},"hotelAddress":{"type":"string","description":"Address (Optional for hotel bookings)"},"notes":{"type":"string","description":"Notes (Optional for any booking type)"},"goalIds":{"description":"Array of goal IDs (required if bookingType is goal)","example":["goal-id-1","goal-id-2"],"type":"array","items":{"type":"string"}},"experienceDetails":{"type":"object","description":"Experience details (optional, required if bookingType is experience)"},"bookingTime":{"type":"string","description":"Booking time in HH:mm format (optional, defaults to \"00:00\")","example":"00:00"},"FromDestination":{"type":"string","description":"From destination (legacy for flight bookings)"},"FromLat":{"type":"number","description":"Latitude of the from destination (legacy for flight bookings)"},"FromLng":{"type":"number","description":"Longitude of the from destination (legacy for flight bookings)"},"ToDestination":{"type":"string","description":"To destination (legacy for flight bookings)"},"ToLat":{"type":"number","description":"Latitude of the to destination (legacy for flight bookings)"},"ToLng":{"type":"number","description":"Longitude of the to destination (legacy for flight bookings)"},"FlightNumber":{"type":"string","description":"Flight number (legacy for flight bookings)"},"HotelName":{"type":"string","description":"Hotel name (legacy for hotel bookings)"},"HotelLocation":{"type":"string","description":"Hotel location (legacy for hotel bookings)"},"HotelLat":{"type":"number","description":"Latitude of the hotel (legacy for hotel bookings)"},"HotelLng":{"type":"number","description":"Longitude of the hotel (legacy for hotel bookings)"}}},"CreateTripNoteDto":{"type":"object","properties":{}},"UpdateTripNoteDto":{"type":"object","properties":{}},"CreateRoleDto":{"type":"object","properties":{"name":{"type":"string","example":"admin","description":"The name of the roles"},"description":{"type":"string","example":"This is the admin roles","description":"The description of the roles"}},"required":["name"]},"UpdateRoleDto":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the roles"},"name":{"type":"string","example":"admin","description":"The name of the roles"},"description":{"type":"string","example":"This is the admin roles","description":"The description of the roles"}},"required":["id","name"]},"CreateCountryDto":{"type":"object","properties":{"name":{"type":"string","example":"United States","description":"The name of the country"},"code":{"type":"string","example":"US","description":"The description of the roles"}},"required":["name"]},"UpdateCountryDto":{"type":"object","properties":{"id":{"type":"number","example":1,"description":"The id of the country"},"name":{"type":"string","example":"United States","description":"The name of the country"},"code":{"type":"string","example":"US","description":"The description of the roles"}},"required":["id"]},"CreateCategoryDto":{"type":"object","properties":{"name":{"type":"string","description":"The name of the category"},"description":{"type":"string","description":"The description of the category"},"icon":{"type":"string","description":"The icon of the category"},"tags":{"description":"Tags for the category","type":"array","items":{"type":"string"}},"viatorTags":{"description":"Viator tags for the category","type":"array","items":{"type":"number"}},"enabled":{"type":"boolean","description":"The status of the category"}},"required":["name"]},"UpdateCategoryDto":{"type":"object","properties":{"id":{"type":"number","description":"The ID of the categories"},"name":{"type":"string","description":"The name of the category"},"description":{"type":"string","description":"The description of the category"},"icon":{"type":"string","description":"The icon of the category"},"tags":{"description":"Tags for the category","type":"array","items":{"type":"string"}},"viatorTags":{"description":"Viator tags for the category","type":"array","items":{"type":"number"}},"enabled":{"type":"boolean","description":"The status of the category"}},"required":["id","name"]},"CreateTagDto":{"type":"object","properties":{"name":{"type":"string","example":"tag","description":"The name of the tags"}},"required":["name"]},"CreateBuckitDto":{"type":"object","properties":{"name":{"type":"string","description":"The name of the buckit"},"description":{"type":"string","description":"The description of the buckit"},"default":{"type":"boolean","description":"The default state of the buckit"},"categoryIds":{"description":"Category IDs for the buckit","type":"array","items":{"type":"number"}},"tags":{"description":"Tags for the buckit","type":"array","items":{"type":"string"}}},"required":["name"]},"UpdateBuckitDto":{"type":"object","properties":{"id":{"type":"string","description":"The id of the buckit"},"name":{"type":"string","description":"The name of the buckit"},"description":{"type":"string","description":"The description of the buckit"},"default":{"type":"boolean","description":"The default state of the buckit"},"categoryIds":{"description":"Category IDs for the buckit","type":"array","items":{"type":"number"}},"tags":{"description":"Tags for the buckit","type":"array","items":{"type":"string"}}},"required":["id","name"]},"AddGoalToBuckitsDto":{"type":"object","properties":{"buckitIds":{"description":"Buckit Ids","type":"array","items":{"type":"string"}}},"required":["buckitIds"]},"CreateGoalDto":{"type":"object","properties":{"name":{"type":"string","description":"The name of the goal"},"location":{"type":"string","description":"The location of the goal"},"lat":{"type":"number","description":"The location (latitude) of the goal"},"lng":{"type":"number","description":"The location (longitude) of the goal"},"caption":{"type":"string","description":"The caption of the goal"},"content":{"type":"string","description":"The content of the goal"},"images":{"description":"Images of the goal","type":"array","items":{"type":"string"}},"contact":{"type":"object","description":"The contact of the goal"},"tags":{"description":"Tags of the goal","type":"array","items":{"type":"string"}}},"required":["name"]},"UpdateGoalDto":{"type":"object","properties":{"id":{"type":"string","description":"The id of the goal"},"name":{"type":"string","description":"The name of the goal"},"location":{"type":"string","description":"The location of the goal"},"lat":{"type":"number","description":"The location (latitude) of the goal"},"lng":{"type":"number","description":"The location (longitude) of the goal"},"caption":{"type":"string","description":"The caption of the goal"},"content":{"type":"string","description":"The content of the goal"},"images":{"description":"Images of the goal","type":"array","items":{"type":"string"}},"contact":{"type":"object","description":"The contact of the goal"},"tags":{"description":"Tags of the goal","type":"array","items":{"type":"string"}}},"required":["id","name"]},"PrivateGoalFilterDto":{"type":"object","properties":{"tags":{"description":"Tag names to filter by","example":["Adventure","Nature"],"type":"array","items":{"type":"string"}},"position":{"type":"object","description":"Geographical position for filtering or sorting (avoid using radius for sorting)","example":{"latitude":0,"longitude":0,"radius":1000}}}},"PrivateGoalDto":{"type":"object","properties":{"buckitId":{"type":"string","description":"Bucket ID of the private goal"},"name":{"type":"string","description":"Name of the private goal"},"content":{"type":"string","description":"Description of the private goal"},"location":{"type":"string","description":"Location of the private goal"},"lat":{"type":"number","description":"Latitude (co-ordinates) of the private goal"},"lng":{"type":"number","description":"Longitude (co-ordinates) of the private goal"},"tags":{"description":"Tags of the private goal","type":"array","items":{"type":"string"}},"images":{"description":"List of image URLs","type":"array","items":{"type":"string"}}},"required":["buckitId","name"]},"CreateCollectionDto":{"type":"object","properties":{"name":{"type":"string","description":"The title of the collection"},"image":{"type":"string","description":"The image of the collection"},"goalIds":{"description":"The description of the collection","type":"array","items":{"type":"string"}}},"required":["name"]},"UpdateCollectionDto":{"type":"object","properties":{"name":{"type":"string","description":"The title of the collection"},"image":{"type":"string","description":"The image of the collection"},"goalIds":{"description":"The description of the collection","type":"array","items":{"type":"string"}}},"required":["name"]},"ReviewFilterDto":{"type":"object","properties":{"goalId":{"type":"string","description":"The goal id of the review","example":"<goalId>"}},"required":["goalId"]},"Create_reviewDto":{"type":"object","properties":{"goalId":{"type":"string","description":"The goal id of the review"},"rating":{"type":"number","description":"The rating of the review"},"comment":{"type":"string","description":"The content of the review"},"visitedAt":{"format":"date-time","type":"string","description":"Whether the review was visited (ISO-8601)"},"images":{"description":"The images of the review","type":"array","items":{"type":"string"}},"categoryIds":{"description":"The category ids of the review","type":"array","items":{"type":"number"}}},"required":["goalId"]},"Update_reviewDto":{"type":"object","properties":{"id":{"type":"string","description":"The id of the review"},"goalId":{"type":"string","description":"The goal id of the review"},"rating":{"type":"number","description":"The rating of the review"},"comment":{"type":"string","description":"The content of the review"},"visitedAt":{"format":"date-time","type":"string","description":"Whether the review was visited (ISO-8601)"},"images":{"description":"The images of the review","type":"array","items":{"type":"string"}},"categoryIds":{"description":"The category ids of the review","type":"array","items":{"type":"number"}},"flagged":{"type":"boolean","description":"Flag the review"}},"required":["id","goalId"]},"CreateSuggestionDto":{"type":"object","properties":{"goalId":{"type":"string","description":"The id of the goal"},"title":{"type":"string","description":"The title of the suggestion"},"location":{"type":"string","description":"The location of the suggestion"},"remarks":{"type":"string","description":"The remarks of the suggestion"},"images":{"description":"Images of the suggestion","type":"array","items":{"type":"string"}}},"required":["goalId","title"]},"UpdateSuggestionDto":{"type":"object","properties":{"id":{"type":"string","description":"The id of the suggestion"},"goalId":{"type":"string","description":"The title of the goal"},"title":{"type":"string","description":"The name of the suggestion"},"location":{"type":"string","description":"The location of the suggestion"},"remarks":{"type":"string","description":"The remarks of the suggestion"},"images":{"description":"Images of the suggestion","type":"array","items":{"type":"string"}},"userId":{"type":"string","example":"This is a suggestion","description":"The user id of the suggestion"}},"required":["id","goalId","title"]},"ExploreBookitFilterDto":{"type":"object","properties":{"destinationId":{"type":"number","description":"Destination ID to filter by"},"currencyCode":{"type":"string","description":"Currency code to filter by"},"tags":{"description":"Tag IDs to filter by","type":"array","items":{"type":"number"}},"flags":{"type":"array","description":"Flag names to filter by","example":["SPECIAL_OFFER","NEW_ON_VIATOR"],"items":{"type":"string","enum":["SPECIAL_OFFER","NEW_ON_VIATOR","FREE_CANCELLATION","ALL_SALES_FINAL","SKIP_THE_LINE","PRIVATE_TOUR","LIKELY_TO_SELL_OUT"]}},"confirmationType":{"type":"string","description":"Confirmation type to filter by"},"rating":{"type":"object","description":"Rating range to filter by","example":{"from":1,"to":5}},"durationInMinutes":{"type":"object","description":"Duration range to filter by"},"price":{"type":"object","description":"Price range to filter by"},"date":{"type":"object","description":"Date range to filter by","example":{"start":"2025-11-23","end":"2026-02-21"}},"destinationIds":{"description":"List of destination IDs to filter by","type":"array","items":{"type":"number"}},"sortByDistance":{"type":"boolean","description":"Sort destinations by distance"}},"required":["destinationId"]},"DateRange":{"type":"object","properties":{"from":{"type":"string","description":"Start date in YYYY-MM-DD format","example":"2023-01-01"},"to":{"type":"string","description":"End date in YYYY-MM-DD format","example":"2023-01-31"}},"required":["from","to"]},"NumberRange":{"type":"object","properties":{"from":{"type":"number","description":"Lower bound of the range","example":0},"to":{"type":"number","description":"Upper bound of the range","example":1000}},"required":["from","to"]},"FreetextSearchProductFiltering":{"type":"object","properties":{"destination":{"type":"string","description":"Destination ID to filter by","example":"77"},"dateRange":{"description":"Date range for the search","example":{"from":"2023-01-01","to":"2023-01-31"},"allOf":[{"$ref":"#/components/schemas/DateRange"}]},"price":{"description":"Price range for the search","example":{"from":0,"to":1000},"allOf":[{"$ref":"#/components/schemas/NumberRange"}]},"rating":{"description":"Rating range for the search","example":{"from":0,"to":5},"allOf":[{"$ref":"#/components/schemas/NumberRange"}]},"durationInMinutes":{"description":"Duration range in minutes for the search","example":{"from":0,"to":1000},"allOf":[{"$ref":"#/components/schemas/NumberRange"}]},"flags":{"description":"Array of product flags","example":["LIKELY_TO_SELL_OUT"],"type":"array","items":{"type":"string"}},"includeAutomaticTranslations":{"type":"boolean","description":"Whether to include automatic translations","example":true}}},"ProductSearchSorting":{"type":"object","properties":{"sort":{"type":"string","description":"Field to sort by","example":"PRICE"},"order":{"type":"string","description":"Sort order","example":"DESCENDING"}}},"SearchPagination":{"type":"object","properties":{"start":{"type":"number","description":"Starting index for the search results","example":1},"count":{"type":"number","description":"Number of results to return","example":10}},"required":["start","count"]},"SearchTypeRequest":{"type":"object","properties":{"searchType":{"type":"string","description":"Type of search. Allowed values: PRODUCTS, ATTRACTIONS, DESTINATIONS","example":"PRODUCTS"},"pagination":{"description":"Pagination details for the search type","allOf":[{"$ref":"#/components/schemas/SearchPagination"}]}},"required":["searchType","pagination"]},"FreetextSearchRequest":{"type":"object","properties":{"searchTerm":{"type":"string","description":"The search keyword(s)","example":"Delhi"},"productFiltering":{"description":"Filtering options for the product search","allOf":[{"$ref":"#/components/schemas/FreetextSearchProductFiltering"}]},"productSorting":{"description":"Sorting preferences for the search results","allOf":[{"$ref":"#/components/schemas/ProductSearchSorting"}]},"searchTypes":{"description":"Array of search type objects with pagination","type":"array","items":{"$ref":"#/components/schemas/SearchTypeRequest"}},"currency":{"type":"string","description":"Currency code for the search results","example":"USD"},"pagination":{"description":"Pagination details for the free text search","allOf":[{"$ref":"#/components/schemas/SearchPagination"}]}},"required":["searchTerm","searchTypes","currency"]},"ProductAvailabilityDto":{"type":"object","properties":{"productCode":{"type":"string","description":"Retrieve availability details for the product identified by this product code","example":"P12345"},"productOptionCode":{"type":"string","description":"Retrieve availability details for the product option (tour grade) identified by this product option code","example":"48HOUR"},"travelDate":{"type":"string","description":"Travel date for the availability","example":"2025-11-23"},"startTime":{"type":"string","description":"Start time for the availability","example":"09:00"},"currencyCode":{"type":"string","description":"Currency code to filter by","example":"USD"},"travellers":{"description":"Travellers to filter by","example":[{"ageBand":"ADULT","numberOfTravelers":3},{"ageBand":"CHILD","numberOfTravelers":2},{"ageBand":"INFANT","numberOfTravelers":1}],"type":"array","items":{"type":"object"}}},"required":["productCode","travelDate"]},"PaxMixItemDto":{"type":"object","properties":{"ageBand":{"type":"string","example":"ADULT"},"numberOfTravelers":{"type":"number","example":2}},"required":["ageBand","numberOfTravelers"]},"BookingsCartHoldItemDto":{"type":"object","properties":{"partnerBookingRef":{"type":"string","example":"booking-20250411-008"},"productCode":{"type":"string","example":"7667P2"},"productOptionCode":{"type":"string","example":"TG50"},"startTime":{"type":"string","example":"08:00"},"travelDate":{"type":"string","example":"2025-04-12"},"paxMix":{"type":"array","items":{"$ref":"#/components/schemas/PaxMixItemDto"}}},"required":["partnerBookingRef","productCode","productOptionCode","startTime","travelDate","paxMix"]},"BookingsCartHoldRequestDto":{"type":"object","properties":{"currency":{"type":"string","example":"USD"},"partnerCartRef":{"type":"string","example":"cart-20250411-000"},"items":{"type":"array","items":{"$ref":"#/components/schemas/BookingsCartHoldItemDto"}},"paymentDataSubmissionMode":{"type":"string","example":"PARTNER_FORM"}},"required":["currency","partnerCartRef","items","paymentDataSubmissionMode"]},"BookerInfoDto":{"type":"object","properties":{"firstName":{"type":"string","example":"Jane"},"lastName":{"type":"string","example":"Doe"}},"required":["firstName","lastName"]},"CommunicationDto":{"type":"object","properties":{"email":{"type":"string","example":"jane.doe@example.com"},"phone":{"type":"string","example":"+61 444444444"}},"required":["email","phone"]},"BookingQuestionAnswerDto":{"type":"object","properties":{"question":{"type":"string","example":"SPECIAL_REQUIREMENTS"},"answer":{"type":"string","example":"No blue M&Ms"}},"required":["question","answer"]},"LanguageGuideDto":{"type":"object","properties":{"type":{"type":"string","example":"GUIDE"},"language":{"type":"string","example":"cmn"},"legacyGuide":{"type":"string","example":"cmn/SERVICE_GUIDE"}},"required":["type","language","legacyGuide"]},"BookingsCartBookItemDto":{"type":"object","properties":{"bookingRef":{"type":"string","example":"BR-597553617"},"partnerBookingRef":{"type":"string","example":"ref-20250416-0223"},"bookingQuestionAnswers":{"type":"array","items":{"$ref":"#/components/schemas/BookingQuestionAnswerDto"}},"languageGuide":{"$ref":"#/components/schemas/LanguageGuideDto"}},"required":["bookingRef","partnerBookingRef","bookingQuestionAnswers","languageGuide"]},"BookingsCartBookRequestDto":{"type":"object","properties":{"cartRef":{"type":"string","example":"CR-020ec2ace18e2ab66b33d08250c00959"},"bookerInfo":{"$ref":"#/components/schemas/BookerInfoDto"},"communication":{"$ref":"#/components/schemas/CommunicationDto"},"items":{"type":"array","items":{"$ref":"#/components/schemas/BookingsCartBookItemDto"}},"paymentToken":{"type":"string","example":"STK-erck44djevhv7cymtxpz7g6wym"}},"required":["cartRef","bookerInfo","communication","items","paymentToken"]},"AddressDto":{"type":"object","properties":{"country":{"type":"string","example":"US"},"postalCode":{"type":"string","example":"02494"}},"required":["country","postalCode"]},"CreditCardDto":{"type":"object","properties":{"number":{"type":"string","example":"4000000000003220"},"cvv":{"type":"string","example":"234"},"expMonth":{"type":"string","example":"03"},"expYear":{"type":"string","example":"2026"},"name":{"type":"string","example":"Nishant Ojha"},"address":{"$ref":"#/components/schemas/AddressDto"}},"required":["number","cvv","expMonth","expYear","name","address"]},"PaymentAccountsDto":{"type":"object","properties":{"creditCards":{"type":"array","items":{"$ref":"#/components/schemas/CreditCardDto"}}},"required":["creditCards"]},"AddPaymentAccountsDto":{"type":"object","properties":{"paymentAccounts":{"$ref":"#/components/schemas/PaymentAccountsDto"}},"required":["paymentAccounts"]},"BookingStatusRequestDto":{"type":"object","properties":{"bookingRef":{"type":"string","example":"BR-597571577","description":"The Viator booking reference ID"}},"required":["bookingRef"]},"CancellationRequestDto":{"type":"object","properties":{"reasonCode":{"type":"string","description":"Viator cancellation reason code","example":"Customer_Service.Weather"}},"required":["reasonCode"]},"CreateFaqDto":{"type":"object","properties":{"page":{"type":"string","description":"The page of the FAQ"},"question":{"type":"string","description":"The question of the FAQ"},"answer":{"type":"string","description":"The answer of the FAQ"}},"required":["page","question","answer"]},"UpdateFaqDto":{"type":"object","properties":{"id":{"type":"string","description":"The id of the FAQ"},"page":{"type":"string","description":"The page of the FAQ"},"question":{"type":"string","description":"The question of the FAQ"},"answer":{"type":"string","description":"The answer of the FAQ"}},"required":["id","page"]},"MiscDestinationsFilterDto":{"type":"object","properties":{"destinationsIds":{"description":"Destination IDs to filter by","example":[723,804],"type":"array","items":{"type":"number"}},"positions":{"description":"Destination positions to filter by","example":[{"lat":37.7749,"lng":-122.4194},{"lat":34.0522,"lng":-118.2437},{"lat":40.7128,"lng":-74.006}],"type":"array","items":{"type":"object"}}}}}},"externalDocs":{"description":"ER Diagram","url":"/erd.html"},"x-logo":{"url":"/images/logo.svg"}}