Skip to main content

Room Reservations

Room reservations are for hotels and accommodations, with check-in/check-out dates and nightly rates.

Create a room resource

import { ResourceType, ResourceInstanceStatus } from 'wiil-core-js';

const roomResource = await client.reservationResources.create({
name: 'Deluxe Ocean Suite',
resourceType: ResourceType.ROOM,
capacity: 4,
isAvailable: true,
amenities: ['WiFi', 'Air Conditioning', 'Mini Bar', 'Ocean View'],
checklistTemplate: [],
applicableTierIds: [],
instances: [
{ name: 'Room 101', code: 'R101', status: ResourceInstanceStatus.AVAILABLE, isAvailable: true },
{ name: 'Room 102', code: 'R102', status: ResourceInstanceStatus.AVAILABLE, isAvailable: true },
],
});

Create a room reservation

In TypeScript, room reservations use the roomReservations resource. In Python, the unified reservations resource is used with reservation_type="room".

import {
CreateRoomReservationSchema,
ReservationStatus,
PaymentStatus
} from 'wiil-core-js';

// API expects UTC seconds
const nowSec = Math.floor(Date.now() / 1000);
const checkIn = nowSec + (24 * 60 * 60); // Tomorrow
const checkOut = checkIn + (3 * 24 * 60 * 60); // 3 nights later

const roomReservation = await client.roomReservations.create({
resourceId: roomResource.id,
guestId: 'cust_456',
personsNumber: 2,
checkIn: checkIn,
checkOut: checkOut,
nights: 3,
status: ReservationStatus.PENDING,
ratePerNight: [
{ date: new Date(checkIn * 1000).toISOString().split('T')[0], amount: 299.00 },
],
totalWithTax: 980.67,
deposit: 299.00,
paymentStatus: PaymentStatus.PENDING,
notes: 'Late check-in requested around 10 PM',
});

Read, update, and lifecycle (Python)

In Python, the unified reservations resource provides reads and lifecycle operations for all reservation types:

from wiil.models.business_mgt import UpdateReservation
from wiil.types import PaginationRequest

loaded = client.reservations.get(reservation.id)
by_customer = client.reservations.get_by_customer("cust_456", PaginationRequest(page=1, page_size=20))
by_resource = client.reservations.get_by_resource("resource_room101", PaginationRequest(page=1, page_size=20))

updated = client.reservations.update(
UpdateReservation(id=reservation.id, persons_number=3, notes="Updated guest count")
)

status_updated = client.reservations.update_status(reservation.id, "confirmed")
rescheduled = client.reservations.reschedule(
reservation.id,
start_time=str(int(time() * 1000) + 48 * 60 * 60 * 1000),
end_time=str(int(time() * 1000) + 49 * 60 * 60 * 1000),
)

Read, update, cancel, delete (TypeScript)

import { UpdateRoomReservationSchema, ReservationStatus } from 'wiil-core-js';

const roomRes = await client.roomReservations.get('reservation_123');
const guestReservations = await client.roomReservations.getByGuest('cust_456');
const resourceReservations = await client.roomReservations.getByResource(roomResource.id);
const all = await client.roomReservations.list();

const updated = await client.roomReservations.update(roomReservation.id, {
id: roomReservation.id,
personsNumber: 3,
deposit: 350.00,
});

const cancelled = await client.roomReservations.cancel(roomReservation.id, 'Change of travel plans');

await client.roomReservations.delete('reservation_123');

RoomReservation fields

FieldTypeRequiredDescription
resourceIdstringYesRequested room resource
guestIdstringYesGuest or customer identifier
checkIn / checkOutnumberYesCheck-in / check-out (Unix timestamps)
nightsintegerYesNumber of nights
ratePerNightarrayYesNightly price snapshot (date, amount)
totalWithTaxnumberYesTotal amount including tax
paymentStatusenumYespending, paid, partial, failed, refunded