This page describes how to automatically download reservation data from Time Slot Control into an external system such as a WMS, ERP, BI tool or data warehouse. The typical setup is a scheduled API call, for example every 15 minutes or once a day, that downloads new and changed reservations.
If you need to react to changes immediately, combine the API calls with webhooks. A webhook tells your system that a reservation has changed, and your system then downloads the reservation detail through the API described below.
Prerequisites:
.timeslotcontrol.comGET https://api.timeslotcontrol.com/v3/{tenant}/Reservations
The response is a JSON array of objects. Field names use PascalCase. All times are in UTC (ISO 8601). Deleted reservations are not returned (see the Deleted reservations section below).
The endpoint supports standard OData query options:
$filter
$orderby
StartUtc asc.$top
A single call returns at most 1000 records, even without the
$topparameter. Always restrict the query to a time range ($filter) and set$top=1000. If the response contains 1000 records, narrow the time range (see Paging below).
Id
Guid
ReservationNumber
string
StartUtc / EndUtc
DateTime
ResourceId
Guid
Carrier
string
CarrierId
Guid?
VehicleTypeId
Guid?
VehicleNumberPlate / TrailerNumberPlate
string
CarrierDriverFullName
string
ApprovalStatus
string
Approved, Pending or Rejected.RealGateVehicleArrivalUtc / RealGateVehicleDepartureUtc
DateTime?
OrderNumbers / SupplierNames
string
Created / Updated
DateTime?
The full list of fields, including custom fields (ExtCustomField*), is available in the API Reference (Scalar UI) at https://api.timeslotcontrol.com/_doc, section Reservations.
The examples use the sandbox api.tscsandbox.com and Basic authentication. In production, use api.timeslotcontrol.com. You can also use a Bearer token instead of Basic authentication.
All reservations with a slot in a given week, sorted by slot start:
curl -G "https://api.tscsandbox.com/v3/{tenant}/Reservations" \
-u "api@yourdomain.com:password" \
--data-urlencode "\$filter=StartUtc ge 2026-10-05T00:00:00Z and StartUtc lt 2026-10-12T00:00:00Z" \
--data-urlencode "\$orderby=StartUtc asc,Id asc" \
--data-urlencode "\$top=1000"
Response (shortened):
[
{
"Id": "3f6c2a1e-...",
"ReservationNumber": "R-2026-012345",
"StartUtc": "2026-10-06T06:00:00Z",
"EndUtc": "2026-10-06T06:30:00Z",
"ResourceId": "6f9d8b0f-...",
"Carrier": "Carrier Ltd.",
"CarrierId": "b7d82473-...",
"VehicleTypeId": "1c2d3e4f-...",
"VehicleNumberPlate": "1AB2345"
}
]
For scheduled downloads, the most efficient approach is to load only the reservations created or changed since the last run. Store the time of the last successful run on your side and use it in the filter:
curl -G "https://api.tscsandbox.com/v3/{tenant}/Reservations" \
-u "api@yourdomain.com:password" \
--data-urlencode "\$filter=(Created ge 2026-10-06T08:00:00Z and Created lt 2026-10-06T08:15:00Z) or (Updated ge 2026-10-06T08:00:00Z and Updated lt 2026-10-06T08:15:00Z)" \
--data-urlencode "\$orderby=Id asc" \
--data-urlencode "\$top=1000"
Use the start time of the previous run (not its end time) as the starting point of the next run, and process records idempotently by
Id. That way a reservation changed during a run is never missed.
Download data in time slices (e.g. per day, or per interval between runs for incremental synchronization). If a response contains exactly 1000 records, it may be incomplete: split the slice into smaller parts (e.g. halves) and download them separately. Repeat until every response returns fewer than 1000 records.
The
$skipand$selectparameters are currently not processed correctly by this endpoint, so do not use them. The endpoint always returns all reservation fields.
A reservation contains the ramp and the vehicle type as IDs. Load the names from the lookup lists. They change rarely, so ideally load them once and cache them.
GET https://api.timeslotcontrol.com/v3/{tenant}/Resources
Returns the fields Id, ResourceName, ShortName, ResourceNameLocalized and BranchOfficeId. The ResourceId value of a reservation matches the Id field.
GET https://api.timeslotcontrol.com/odata/v1/{tenant}/VehicleType?$select=Id,VehicleTypeName
The VehicleTypeId value of a reservation matches the Id field. The name is in the VehicleTypeName field.
The Reservations endpoint returns only active reservations. Deleted reservations are available through the OData entity ReservationDeleted:
GET https://api.timeslotcontrol.com/odata/v1/{tenant}/ReservationDeleted?$select=Id,ReservationNumber
If you keep a copy of the reservations in your system, regularly compare the Id values with this entity and remove the deleted reservations. Alternatively, subscribe to the reservation.deleted webhook.
https://api.tscsandbox.com.Created/Updated filter with paging.If you only need the data for reporting and do not want to write code, you can connect Microsoft Excel or Power BI directly to the
Reservationentity via OData (see OData) and refresh the data automatically.