Skip to content

How to build: Rooms and Rates ​

implemented /extranet/properties/[id]/rooms, /extranet/properties/[id]/rate-plans.

Middleware rates-packages is the v1 winner (live). It stores a rate/package against the property (Core rate_plan via Middleware). There is no separate Middleware rooms folder yet — room type is a field on the package (roomType).

Middleware Backend · winner · live

POST https://middleware-dev.bookdirect.live/api/v1/nellalink/rates-packages/property/{propertyId}

GET https://middleware-dev.bookdirect.live/api/v1/nellalink/rates-packages/property/{propertyId}

GET https://middleware-dev.bookdirect.live/api/v1/nellalink/rates-packages/{id}

PUT https://middleware-dev.bookdirect.live/api/v1/nellalink/rates-packages/{id}

DELETE https://middleware-dev.bookdirect.live/api/v1/nellalink/rates-packages/{id}

json
{
  "name": "Flexible rate",
  "roomType": "Standard Room",
  "packageType": "room-only",
  "description": "Queen bed, city view.",
  "price": 30000,
  "currency": "NGN",
  "maxOccupancy": 2,
  "totalUnits": 3,
  "validFrom": "2026-10-01T00:00:00.000Z",
  "validTo": "2026-12-31T00:00:00.000Z"
}

packageType: room-only | bed-breakfast | half-board | full-board | all-inclusive.

ScreenHow to build
Room List / Create / Edit / Delete RoomroomType + totalUnits on the package until a rooms folder exists
Room Type / Bed Configuration / Occupancy / UnitsroomType, maxOccupancy, totalUnits
Room amenitieslocal slugs only (free_wifi, air_conditioning, …) — tick list. Not a Marketplace filter unless product later searches “room has X”
Rate Plan List / Create / Edit / Deletethe endpoints above
Cancellation Policy / Meal Plan / Seasonal PricingpackageType, validFrom / validTo; extra policy keys recommend on Middleware if missing

Called by Middleware Backend, not by frontend ​

POST https://backend-dev.bookdirect.live/public/api/v1/nellalink/smart-meta-manager/entity/room

POST .../entity/rate_plan

API-first. Middleware Backend wins over Core Backend when both exist.