Skip to content

Other API Endpoints

Admin

MethodEndpointAuthDescription
POST/admin/loginPublicAdmin login
GET/admin/meAdminCurrent admin profile
GET/admin/dashboardAdminDashboard stats (counts, revenue)
GET/admin/suppliers/pendingAdminPending supplier approvals
PATCH/admin/suppliers/:id/verifyAdminVerify supplier
GET/admin/activities/pendingAdminPending activity approvals
PATCH/admin/activities/:id/approveAdminApprove activity
PATCH/admin/activities/:id/rejectAdminReject activity

Users

MethodEndpointAuthDescription
GET/usersAdminList all users
GET/users/:idUser/AdminUser profile
PATCH/users/:idUserUpdate profile
DELETE/users/:idUser/AdminDelete account
GET/users/meUserCurrent user profile
PATCH/users/meUserUpdate current user

Suppliers

MethodEndpointAuthDescription
POST/supplier/registerPublicSupplier registration
POST/supplier/loginPublicSupplier login
GET/supplierPublicList suppliers
GET/supplier/:idPublicSupplier profile
PATCH/supplier/:idSupplierUpdate profile
GET/supplier/:id/activitiesPublicSupplier's activities

Supplier Registration

Supplier registration requires:

  • Full name, email, password
  • Company details (legal name, license number, address)
  • Company description and logo
  • Admin verification required before listing activities

Reviews

MethodEndpointAuthDescription
GET/review/:activityIdPublicReviews for an activity
POST/reviewUserCreate review
PATCH/review/:idUserUpdate review
DELETE/review/:idUser/AdminDelete review

Reviews include a rating (1–5) and text content. The activity's averageRating is recomputed when reviews change.

Wishlist

MethodEndpointAuthDescription
GET/wishlistUserUser's wishlist
POST/wishlistUserAdd to wishlist
DELETE/wishlist/:itemIdUserRemove from wishlist

Newsletter

MethodEndpointAuthDescription
POST/newsletter/subscribePublicSubscribe email
POST/newsletter/unsubscribePublicUnsubscribe with secret
GET/newsletter/subscribersAdminList subscribers

Cities

MethodEndpointAuthDescription
GET/cityPublicList cities
GET/city/:idPublicCity detail
POST/cityAdminCreate city
PATCH/city/:idAdminUpdate city
DELETE/city/:idAdminDelete city

Cities are shared between activities and the CMS (separate tables in each database). The API's city controller handles city CRUD for activity location tagging.

Regions

MethodEndpointAuthDescription
GET/regionPublicList regions
POST/regionAdminCreate region
PATCH/region/:idAdminUpdate region
DELETE/region/:idAdminDelete region

Trip Categories & Types

MethodEndpointAuthDescription
GET/trip-categoryPublicList trip categories
POST/trip-categoryAdminCreate category
PATCH/trip-category/:idAdminUpdate category
DELETE/trip-category/:idAdminDelete category
GET/trip-typePublicList trip types
POST/trip-typeAdminCreate type
PATCH/trip-type/:idAdminUpdate type
DELETE/trip-type/:idAdminDelete type
MethodEndpointAuthDescription
GET/featuredPublicList featured tags
POST/featuredAdminCreate tag
PATCH/featured/:idAdminUpdate tag
DELETE/featured/:idAdminDelete tag
POST/featured/activityAdminTag activity as featured
DELETE/featured/activity/:idAdminRemove featured tag from activity

Media Upload

MethodEndpointAuthDescription
POST/uploadAdminUpload single file
POST/upload/multipleAdminUpload multiple files
POST/upload/localAdminUpload to local storage
GET/media-libraryAdminList media library
POST/media-libraryAdminAdd to library
DELETE/media-library/:idAdminDelete from library
GET/media-library/entity/:entityType/:entityIdPublicImages for an entity

Uploaded images are processed with Sharp (WebP conversion) and uploaded to Cloudflare Images.

MethodEndpointAuthDescription
GET/legal/:categoryPublicGet legal document by category
POST/legalAdminCreate legal document
PATCH/legal/:idAdminUpdate legal document

Image Proxy

/media routes serve as an image proxy via Express + Axios.

Cron Jobs

Popularity Score Update

Runs every 10 minutes. Updates each activity's popularityScore:

popularityScore = views × 1
                + bookingsCount × 10
                + averageRating × 20
                + (isFeatured ? 100 : 0)
                - (days since creation × 0.5)

The score powers the "Popular" sort option and featured sections.

Typesense Sync (Disabled)

A sync cron exists but is commented out in the server config. Typesense integration is not currently active.

Built with VitePress