For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
    • Introduction
    • URL Structure
    • API Key
    • Errors
    • Versioning
    • Pagination
    • Replication
    • Rate Limits
    • Webhooks
  • System Services
    • Companies
    • Hello World
  • Accounts
  • Ticketing
    • Getting started
    • Catalog
    • Availability
      • GETGet Capacity
      • GETSearch Time Slots
      • GETGet Schedule
    • Tickets
    • Reservations
  • Memberships
    • Catalog
    • Membership
    • Member
    • Card
    • Payment Method
    • Lifecycle
    • Miscellaneous
    • Points
  • Speedgate
  • Attraction Wallet
  • OTA Channel Manager
    • Getting started
    • Orders
  • POS
    • POS Sale
    • POS Entry
    • POS Unit
    • POS Store
    • Salesperson
    • External POS Sale
    • Global POS Entry
  • Restaurant
  • Inventory
    • Barcodes
    • Items
    • Item Ledger Entries
    • Item Categories
    • Item Variants
    • Item Translations
  • Coupon
  • Vouchers
    • Vouchers
  • Sales Documents
    • Ecommerce
  • Finance
    • General Ledger Account
    • General Ledger Entries
    • General Ledger Journal
  • Customers
    • Customers
    • GDPR
  • Retail Print
    • Print Price Labels
  • PDF Designer
LogoLogo
TicketingAvailability

Search Time Slots

GET
https://api.npretail.app/:tenant/:environment/:company/ticket/timeslots/search
GET
/:tenant/:environment/:company/ticket/timeslots/search
$curl -G https://api.npretail.app/01234567-89ab-cdef-0123-456789abcdef/production/CRONUS%2520International%2520Ltd./ticket/timeslots/search \
> -H "x-np-api-key: <NaviPartner API Key>" \
> -d itemNumber=31001 \
> -d fromDate=2026-06-01 \
> -d toDate=2026-06-02
200Simple ticket item, no flags
1{
2 "itemNumber": "31001",
3 "items": [
4 {
5 "ticketItemNumber": "31001",
6 "quantity": 1,
7 "admissions": [
8 {
9 "admissionCode": "CASTLE",
10 "inclusion": "mandatory",
11 "default": true
12 }
13 ],
14 "variantCode": ""
15 }
16 ],
17 "timeSlots": [
18 {
19 "scheduleNumber": 12345,
20 "ticketItemNumber": "31001",
21 "admissionCode": "CASTLE",
22 "scheduleCode": "WEEKDAYS",
23 "startDate": "2026-06-01",
24 "startTime": "10:00:00",
25 "endDate": "2026-06-01",
26 "endTime": "11:00:00"
27 },
28 {
29 "scheduleNumber": 12346,
30 "ticketItemNumber": "31001",
31 "admissionCode": "CASTLE",
32 "scheduleCode": "WEEKDAYS",
33 "startDate": "2026-06-01",
34 "startTime": "14:00:00",
35 "endDate": "2026-06-01",
36 "endTime": "15:00:00"
37 },
38 {
39 "scheduleNumber": 12347,
40 "ticketItemNumber": "31001",
41 "admissionCode": "CASTLE",
42 "scheduleCode": "WEEKDAYS",
43 "startDate": "2026-06-02",
44 "startTime": "10:00:00",
45 "endDate": "2026-06-02",
46 "endTime": "11:00:00"
47 }
48 ]
49}
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`](./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. ## Date-range cap The range cap is **62 days** (`toDate - fromDate + 1`). Larger ranges return `400`. ## Times are admission-local 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. ## Per-unit math 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. ## Capacity semantics 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. - Any other value — `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. ## v1 inclusion scope 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. ## Decomposition The input item is resolved into one or more ticket items, and each ticket item carries one or more admissions: - **Input item → ticket items.** For a single ticket item, `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. - **Ticket item → admissions.** Each ticket item's `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. ## What this endpoint does not do - No `customerNumber` — use [`getCapacity`](./getCapacity) for personalized pricing. - No `quantity` — defaults to 1; the caller multiplies by `items[].quantity`. - No rolled-up `packagePrice` / `packageAvailable` — the caller composes from per-row data. - No timezone offsets on time fields (see above). - Slots whose sales window has ended are not filtered here — that's a [`getCapacity`](./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`](./createReservation) and to [`getCapacity`](./getCapacity) — same field name, same value, no translation.
Was this page helpful?
Previous

Get Schedule

Next
Built with

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.

Date-range cap

The range cap is 62 days (toDate - fromDate + 1). Larger ranges return 400.

Times are admission-local

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.

Per-unit math

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.

Capacity semantics

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.
  • Any other value — 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.

v1 inclusion scope

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.

Decomposition

The input item is resolved into one or more ticket items, and each ticket item carries one or more admissions:

  • Input item → ticket items. For a single ticket item, 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.
  • Ticket item → admissions. Each ticket item’s 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.

What this endpoint does not do

  • No customerNumber — use getCapacity for personalized pricing.
  • No quantity — defaults to 1; the caller multiplies by items[].quantity.
  • No rolled-up packagePrice / packageAvailable — the caller composes from per-row data.
  • No timezone offsets on time fields (see above).
  • Slots whose sales window has ended are not filtered here — that’s a 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.

Authentication

x-np-api-keystring
API Key authentication via header

Path parameters

tenantstringRequired

Your Entra Tenant ID. More details.

environmentstringRequired

Your Business Central Environment. More details.

companystringRequired

Your Business Central Company. More details.

Headers

x-api-versiondateOptional

Used for API versioning. More details.

Query parameters

itemNumberstringRequired
An item or product number defined in the ticketing system
fromDatedateOptional

Start of the date range (inclusive), YYYY-MM-DD. Defaults to today.

toDatedateOptional

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.

withPricebooleanOptional

When true, the response includes the datePrices array (per-date basePrice) and a priceDelta on each time slot. Defaults to false.

withCapacitybooleanOptional

When true, each time slot carries capacityControl; if that mode tracks capacity, remainingCapacity is also present. Defaults to false.

Response

The decomposed item structure, indicative pricing per date (when requested), and the list of slots in the date range.

itemNumberstring
An item or product number defined in the ticketing system
itemslist of objects
timeSlotslist of objects
datePriceslist of objects