Skip to main content
POST
/
api
/
public
/
bookings
/
price
{
  "Price": 123,
  "DynamicPriceAdjustment": 123,
  "LastMinutePriceAdjustment": 123,
  "PriceFactorDemand": 123
}

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

_shape
string
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

ResourceId
number
required
The resource to calculate pricing for.
FromTime
string
required
Booking start time in ISO 8601 UTC format (e.g. 2026-04-06T10:00:00.000Z).
ToTime
string
required
Booking end time in ISO 8601 UTC format (e.g. 2026-04-06T11:00:00.000Z).
ChargeNow
boolean
required
Whether the booking should be charged immediately.
BookingVisitors
array
Array of visitor objects associated with the booking. Pass an empty array if none.
BookingProducts
array
Array of add-on products included in the booking. Pass an empty array if none.
CustomFields
object
Custom field values for the booking. Use { "Data": [] } if none.
Id
number
Booking ID. Use 0 for new bookings. For existing bookings, pass the booking ID to preserve any previously locked-in pricing.
UniqueId
string
A unique identifier for the booking. Use a UUID for new bookings.
CoworkerFullName
string
Display name of the customer making the booking.

Response

Price
number
required
Total calculated price for the booking, including all dynamic adjustments.
DynamicPriceAdjustment
number
required
Absolute price adjustment from demand-based dynamic pricing. Positive values indicate a surcharge, negative values a discount. 0 when no demand adjustment applies.
LastMinutePriceAdjustment
number
required
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.
PriceFactorDemand
number
required
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 30anda10percentdemandsurchargeof30 and a 10 percent demand surcharge of 3 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.