Skip to content

Core — Entities

Nellalink Smart Meta Manager is generic. BookDirect is a PMS: hotels, shortlets, and apartments are all property. v1 locks these entity_type values. The first POST creates nll_{type} and nll_{type}_meta_data.

Do not add nll_hotel, nll_shortlet, or nll_apartment.

property                   property_category: hotel | shortlet | apartment
  ├── room                 parent = property (hotel, or apartment by unit)
  ├── rate_plan            parent = room (or property if sold as a whole)
  ├── inventory            parent = rate_plan (optional; availability can compute)
  ├── booking              parent = rate_plan (by unit) or property (whole place)
  └── payment              parent = booking

The old desktop guide’s booking_package = room + rate_plan.

Winner URLs (pattern)

Replace {entity_type} with property, room, rate_plan, booking, or payment.

ActionMethodFull URL
CreatePOSThttps://backend-dev.bookdirect.live/public/api/v1/nellalink/smart-meta-manager/entity/{entity_type}
ListGEThttps://backend-dev.bookdirect.live/public/api/v1/nellalink/smart-meta-manager/entity/{entity_type}
Get uuidGEThttps://backend-dev.bookdirect.live/public/api/v1/nellalink/smart-meta-manager/entity/{entity_type}/{entity_uuid}
Get slugGEThttps://backend-dev.bookdirect.live/public/api/v1/nellalink/smart-meta-manager/entity/{entity_type}/slug/{slug}
UpdatePUThttps://backend-dev.bookdirect.live/public/api/v1/nellalink/smart-meta-manager/entity/{entity_type}/{entity_uuid}
TrashDELETEhttps://backend-dev.bookdirect.live/public/api/v1/nellalink/smart-meta-manager/entity/{entity_type}/trash/{entity_uuid}
RestorePATCHhttps://backend-dev.bookdirect.live/public/api/v1/nellalink/smart-meta-manager/entity/{entity_type}/restore/{entity_uuid}

Examples:

  • Create property: POST https://backend-dev.bookdirect.live/public/api/v1/nellalink/smart-meta-manager/entity/property
  • Create booking: POST https://backend-dev.bookdirect.live/public/api/v1/nellalink/smart-meta-manager/entity/booking

Create body (all types)

Required: request_id, meta_key, owned_by (user uuid).

Optional: slug (defaults to meta_key), title_name, description, status, extra_data, parent_entity_type, parent_entity_uuid, categories[], tags[], co_owned_by[].

extra_data on PUT replaces the entire JSON. Always send the full object.

List query params

ParamExamplePurpose
owned_bysession user uuidRequired for private lists
parent_entity_typepropertyChildren of a type
parent_entity_uuiduuidChildren of one parent
statusactiveFilter
searchLagosTerm
search_bytitle_name or meta_key.cityColumn or metadata
meta_key_to_retrieveaddress,cityLimit metadata in response
per_page / page20 / 1Pagination
sort_by / sort_ordercreated_at / descSort

extra_data catalogs

property

KeyTypeNotes
gallery_urlsstring[]After file-manager upload
total_rooms_displaynumberHotel display only
amenitiesstring[]Optional mirror of amenity_* meta
total_unitsnumberWhole-place inventory (shortlet / whole apartment)
base_rate_ngnnumberWhole-place nightly
currencystringNGN
max_occupancynumberWhole-place
blocked_dates{from,to,reason}[]Maintenance

room

KeyType
total_unitsnumber
room_numbersstring[]
max_occupancynumber
bed_typestring
blocked_datesarray

rate_plan

KeyType
base_rate_ngnnumber
currencystring
cancellationstring
breakfast_includedboolean

booking

KeyType
property_uuidstring — always
room_uuid / rate_plan_uuidhotel
check_in / check_outYYYY-MM-DD
nightsnumber
units_bookednumber
guest_countnumber
rate_per_night_ngn / total_amount_ngnnumber
currencystring
guest_name / guest_email / guest_phonestring

Statuses: pendingconfirmedcancelled | checked_in | checked_out.

payment

Written mainly by Middleware, not the guest UI.

KeyType
providerpaystack | squad | tsara
referencePSP reference
amount_kobonumber
currencystring
booking_uuidstring

Statuses: initialized | paid | failed | refunded | partially_refunded.

Tags and categories

On create/update you may send tags: ["hotel"] and categories: [{ "name": "Hotel" }]. Assignment is additive (not a full replace). Catalog:

  • POST https://backend-dev.bookdirect.live/public/api/v1/nellalink/tag
  • GET https://backend-dev.bookdirect.live/public/api/v1/nellalink/tags
  • POST https://backend-dev.bookdirect.live/public/api/v1/nellalink/category
  • GET https://backend-dev.bookdirect.live/public/api/v1/nellalink/categories

Tag names: ^[a-z0-9_]+$.

What Core must not do

No Paystack/Squad/Tsara calls. No Resend. No GuestTraction. No availability date engine. Those are Middleware.

Roles (staff on a property)

PUT https://backend-dev.bookdirect.live/public/api/v1/nellalink/role/entity/property/{property_uuid}/{user_uuid}

Use for owner staff. Document exact permission strings from the live explorer when you add team UI.

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