Booking Price
Calculates the total price for a booking at a specific resource and time slot. When dynamic pricing is enabled, the response includes demand-based and last-minute price adjustments alongside the base price.
This endpoint is used by the Members Portal to display price annotations in the booking calendar and time selectors, but it can also be called directly to preview pricing before creating a booking.
Authentication
Requires a valid customer bearer token.
Query Parameters
Comma-separated list of response fields to include. Use this to limit the response to only the fields you need.Example: Price,DynamicPriceAdjustment,LastMinutePriceAdjustment,PriceFactorDemand
Request Body
The resource to calculate pricing for.
Booking start time in ISO 8601 UTC format (e.g. 2026-04-06T10:00:00.000Z).
Booking end time in ISO 8601 UTC format (e.g. 2026-04-06T11:00:00.000Z).
Whether the booking should be charged immediately.
Array of visitor objects associated with the booking. Pass an empty array if none.
Array of add-on products included in the booking. Pass an empty array if none.
Custom field values for the booking. Use { "Data": [] } if none.
Booking ID. Use 0 for new bookings. For existing bookings, pass the booking ID to preserve any previously locked-in pricing.
A unique identifier for the booking. Use a UUID for new bookings.
Display name of the customer making the booking.
Response
Total calculated price for the booking, including all dynamic adjustments.
Absolute price adjustment from demand-based dynamic pricing. Positive values indicate a surcharge, negative values a discount. 0 when no demand adjustment applies.
LastMinutePriceAdjustment
Absolute price adjustment for last-minute bookings. Applied when the booking is made within the configured last-minute period before the start time. 0 when not applicable.
Demand factor as a decimal multiplier. For example, 0.1 means a 10% surcharge, -0.15 means a 15% discount. 0 when no demand adjustment applies.
Examples
Calculate price for a one-hour booking
POST /api/public/bookings/price?_shape=Price,DynamicPriceAdjustment,LastMinutePriceAdjustment,PriceFactorDemand
Authorization: Bearer {token}
Content-Type: application/json
{
"ResourceId": 1491,
"FromTime": "2026-04-06T10:00:00.000Z",
"ToTime": "2026-04-06T11:00:00.000Z",
"ChargeNow": true,
"BookingVisitors": [],
"BookingProducts": [],
"CustomFields": { "Data": [] },
"Id": 0,
"UniqueId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"CoworkerFullName": "Jane Smith"
}
Response with dynamic pricing surcharge
{
"Price": 33.0,
"DynamicPriceAdjustment": 3.0,
"LastMinutePriceAdjustment": 0.0,
"PriceFactorDemand": 0.1
}
In this example, the base price is 30anda10percentdemandsurchargeof3 has been applied, resulting in a total of $33.
Response with no dynamic pricing
{
"Price": 30.0,
"DynamicPriceAdjustment": 0.0,
"LastMinutePriceAdjustment": 0.0,
"PriceFactorDemand": 0.0
}
Response with last-minute discount
{
"Price": 22.5,
"DynamicPriceAdjustment": 0.0,
"LastMinutePriceAdjustment": -7.5,
"PriceFactorDemand": 0.0
}
TypeScript Integration
import endpoints from '@/api/endpoints'
import { BookingPrice } from '@/types/endpoints/BookingPrice'
const PRICE_SHAPE = 'Price,DynamicPriceAdjustment,LastMinutePriceAdjustment,PriceFactorDemand'
const url = `${endpoints.bookings.price().url}?_shape=${PRICE_SHAPE}`
const response = await httpClient.post<BookingPrice>(url, {
ResourceId: 1491,
FromTime: '2026-04-06T10:00:00.000Z',
ToTime: '2026-04-06T11:00:00.000Z',
ChargeNow: true,
BookingVisitors: [],
BookingProducts: [],
CustomFields: { Data: [] },
Id: 0,
UniqueId: crypto.randomUUID(),
CoworkerFullName: 'Jane Smith',
})
Notes
- Dynamic pricing must be enabled via the
Nexudus.ML.DynamicPricing.Enabled business setting. When disabled, DynamicPriceAdjustment, LastMinutePriceAdjustment, and PriceFactorDemand will all be 0.
- Pricing is calculated per hour of the booking. Each hour may have a different demand level, so the total adjustment is the sum of all hourly adjustments.
- Previously charged bookings (non-zero
Id) preserve their original pricing factors — the response reflects the locked-in adjustments rather than recalculating.
- See Dynamic Pricing for a full explanation of how demand levels, availability thresholds, and last-minute adjustments are determined.