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}
{
"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.
| Screen | How to build |
|---|---|
| Room List / Create / Edit / Delete Room | roomType + totalUnits on the package until a rooms folder exists |
| Room Type / Bed Configuration / Occupancy / Units | roomType, maxOccupancy, totalUnits |
| Room amenities | local slugs only (free_wifi, air_conditioning, …) — tick list. Not a Marketplace filter unless product later searches “room has X” |
| Rate Plan List / Create / Edit / Delete | the endpoints above |
| Cancellation Policy / Meal Plan / Seasonal Pricing | packageType, 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