{"openapi":"3.0.0","info":{"version":"1.0.0","title":"Nusaventure REST API","description":"Nusaventure helps you discover captivating tourist destinations and culinary delights in Nusantara.\n\nNusaventure, short for Nusantara Adventure, is a platform that inspires exploration of various legendary tourist spots, delicious culinary varieties, interesting activities and events, understanding the ecosystem and communities, and more."},"components":{"securitySchemes":{"AuthorizationBearer":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{},"parameters":{}},"paths":{"/places":{"get":{"description":"Get all places","tags":["Places"],"parameters":[{"schema":{"type":"string"},"required":false,"name":"countryId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"stateId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cityId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"categoryId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"List of places"}}}},"/places/featured":{"get":{"description":"Get all featured places","tags":["Places"],"responses":{"200":{"description":"List of featured places"}}}},"/places/top-stats":{"get":{"description":"Get statistics of favorite places","tags":["Places"],"responses":{"200":{"description":"Statistics of favorite places"}}}},"/places/{slug}":{"get":{"description":"Get detail place by slug","tags":["Places"],"parameters":[{"schema":{"type":"string","minLength":1,"example":"masjid-raya-al-jabbar"},"required":true,"name":"slug","in":"path"}],"responses":{"200":{"description":"Successfully get place details"},"404":{"description":"Place not found"}}}},"/countries":{"get":{"description":"Get all countries","tags":["Countries"],"parameters":[{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"List of countries"}}}},"/states":{"get":{"description":"Get all states","tags":["States"],"parameters":[{"schema":{"type":"string","minLength":1,"example":"102"},"required":true,"name":"countryId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"List of states"}}}},"/cities":{"get":{"description":"Get all cities","tags":["Cities"],"parameters":[{"schema":{"type":"string","minLength":1,"example":"102"},"required":true,"name":"countryId","in":"query"},{"schema":{"type":"string","minLength":1,"example":"1829"},"required":true,"name":"stateId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"List of cities"}}}},"/categories":{"get":{"description":"Get all categories","tags":["Categories"],"parameters":[{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"List of categories"}}}},"/categories/featured":{"get":{"description":"Featured categories","tags":["Categories"],"responses":{"200":{"description":"Featured categories"}}}},"/islands":{"get":{"description":"Get all islands","tags":["Islands"],"parameters":[{"schema":{"type":"string","minLength":1,"example":"102"},"required":false,"name":"countryId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"search","in":"query"}],"responses":{"200":{"description":"List of islands"}}}},"/auth/register":{"post":{"description":"User registration","tags":["Auth"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"username":{"type":"string","minLength":3,"maxLength":20,"pattern":"^[a-zA-Z0-9_]+$","example":"johndoe"},"email":{"type":"string","format":"email","example":"johndoe@mail.com"},"password":{"type":"string","minLength":6,"example":"my53cuREpA55w0RD"},"firstName":{"type":"string","example":"John"},"lastName":{"type":"string","example":"Doe"}},"required":["username","email","password","firstName","lastName"]}}}},"responses":{"200":{"description":"Successful registration"},"400":{"description":"Username or email already exists"}}}},"/auth/login":{"post":{"description":"Login user","tags":["Auth"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"username":{"type":"string","minLength":3,"maxLength":20,"pattern":"^[a-zA-Z0-9_]+$","example":"johndoe"},"password":{"type":"string","minLength":6,"example":"my53cuREpA55w0RD"}},"required":["username","password"]}}}},"responses":{"200":{"description":"Login successful"},"400":{"description":"Username or password is incorrect"}}}},"/auth/me":{"get":{"description":"Get logged in user","security":[{"AuthorizationBearer":[]}],"tags":["Auth"],"responses":{"200":{"description":"User data"}}}},"/saved-places":{"post":{"description":"Save a favorite place","security":[{"AuthorizationBearer":[]}],"tags":["Saved Places"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"placeId":{"type":"string","minLength":1}},"required":["placeId"]}}}},"responses":{"200":{"description":"Successfully saved a place"}}},"get":{"description":"Get all saved places","security":[{"AuthorizationBearer":[]}],"tags":["Saved Places"],"responses":{"200":{"description":"Successfully get saved places data"}}}},"/saved-places/{id}":{"delete":{"description":"Delete a saved place","security":[{"AuthorizationBearer":[]}],"tags":["Saved Places"],"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"Successfully deleted the saved place"}}}}},"webhooks":{}}