Browse-oriented endpoint for calendar UIs: returns every time slot for an item across a date range, with optional indicative pricing and current capacity. Designed for use cases like a 30-day calendar UI or a realtime capacity check across a date window.
This endpoint is not a replacement for getCapacity — that endpoint
stays as the single-date, at-checkout call carrying customerNumber for personalized
pricing and authoritative capacity validation. Prices here are indicative —
customerNumber and quantity aren’t accepted, so customer-specific pricing, price
ladders, and quantity discounts are not applied. Slot-level dynamic pricing is
applied and surfaces as priceDelta on each time slot (see “Per-unit math” below for
how to combine it with basePrice). Capacity is accurate at the moment of the response
but drifts as bookings come in. Re-validate at the slot the customer actually picks.
The range cap is 62 days (toDate - fromDate + 1). Larger ranges return 400.
All *Date / *Time fields are local at the admission. No timezone offset is attached.
Do not parse the time fields as UTC. endDate can differ from startDate for slots that
cross midnight.
Both basePrice (in datePrices) and priceDelta (on each time slot) are per unit.
For a picked slot, the per-unit price is basePrice + priceDelta. The item’s contribution
to a multi-ticket package is items[].quantity × (basePrice + priceDelta).
For well-configured items quantity is typically 1, but the multiplier still applies
when present.
When withCapacity=true, each time slot carries a capacityControl field — one of none,
sales, admitted, or full. Branch on it:
none — capacity is not tracked for this slot. remainingCapacity is omitted.
Render as “Available” / “Unlimited” — there is no number to display.remainingCapacity is present and is the actual count. 0 means
sold out. The number’s semantics differ by mode (e.g. sales counts initial sales,
admitted counts admitted entries) — interpret with capacityControl for accuracy
across modes.capacityControl is per slot, not per admission — the same admission may have
different effective modes on different slots.
Only mandatory admissions are emitted in v1. Opt-in and opt-out admissions
(optionalAndSelected, optionalNotSelected) and their addon-experience pricing are
out of scope for v1.
The input item is resolved into one or more ticket items, and each ticket item carries one or more admissions:
items[] has exactly one
entry. For a package (an item with an item add-on configured), items[] has one entry
per underlying ticket item in the add-on; non-ticket items in the add-on (souvenirs,
coupons, etc.) are filtered out.admissions[] lists every admission
the ticket grants access to. A simple ticket grants one; a combo ticket grants
several. See “v1 inclusion scope” for which admissions are emitted today.customerNumber — use getCapacity for personalized pricing.quantity — defaults to 1; the caller multiplies by items[].quantity.packagePrice / packageAvailable — the caller composes from per-row data.getCapacity concern at point-of-purchase. Cancelled slots and slots
not marked visible-on-web are excluded.Consumers can pass scheduleNumber from a timeSlots[] row directly to
createReservation and to getCapacity — same
field name, same value, no translation.
Your Entra Tenant ID. More details.
Your Business Central Environment. More details.
Your Business Central Company. More details.
Used for API versioning. More details.
Start of the date range (inclusive), YYYY-MM-DD. Defaults to today.
End of the date range (inclusive), YYYY-MM-DD. Defaults to fromDate + 30 days. The total span toDate - fromDate + 1 may not exceed 62 days.
When true, the response includes the datePrices array (per-date basePrice) and a priceDelta on each time slot. Defaults to false.
When true, each time slot carries capacityControl; if that mode tracks capacity, remainingCapacity is also present. Defaults to false.
The decomposed item structure, indicative pricing per date (when requested), and the list of slots in the date range.