Reservations
Booking, rescheduling, and closing out flights.
11 endpoints · base URL https://api.aerscheduler.com
/reservationsList reservations
Bookings overlapping a date window. startDate and endDate are required — unlike every other list in this API, this one will not return an unbounded set.
Query parameters
startDate | string | Start of the window, ISO 8601. Include an offset or Z. |
endDate | string | End of the window, ISO 8601. |
q | string | Free-text filter. Matches the fields a person would search on. |
resourceId | string | Comma-separated resource ids to filter by. |
locationId | string | Comma-separated location ids to filter by. |
includeCanceled | boolean | Set true to include cancelled bookings. Defaults to false. |
ongoing | boolean | Set false to exclude bookings already in progress. Defaults to true. |
orderBy | "asc" | "desc" | Sort direction on start time. Defaults to desc. |
Responses
200 | OK | The bookings.→ { data: Reservation[] } |
400 | Bad Request | The date range is missing or unparseable. |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl https://api.aerscheduler.com/reservations \
-H "Authorization: Bearer $AERSCHEDULER_TOKEN"/reservationsCreate a reservation
Books a resource, a person, or both.
start and end must carry an explicit UTC offset or Z. A bare local datetime is rejected: it would be read in the server's zone and silently book a different instant than the customer picked.
Which type values you may create depends on your roles — see the Reservation types section. The server also refuses double-bookings and bookings on grounded aircraft.
Pass a recurrence object to create a repeating series. Occurrences are real reservations, so each one can be ramped, reviewed, and invoiced independently.
Request body
The booking.
titlerequired | string | Short label shown on the calendar. |
typerequired | "solo" | "dual" | "ground" | "guest" | "sim" | "rental" | "maintenance" | What kind of booking. Restricted by the caller's roles — see the table above. |
startrequired | string | Start instant. Must carry an explicit offset or Z. |
endrequired | string | End instant. Must carry an explicit offset or Z. |
timeZoneNamerequired | string | IANA zone the booking is being made in — the field's zone, not the caller's device. |
notes | string | Free-text notes shown on the booking. |
resource | object | The aircraft, simulator, or room to book, as { id }. |
location | object | Where it happens, as { id }. Defaults to the resource's location. |
personnel | object | Who is on the booking. One person cannot fill two seats on the same booking. |
recurrence | object | Optional. Creates a repeating series. |
Responses
201 | Created | The booking that was created, or the series.→ { data: Reservation } |
400 | Bad Request | Rejected: a clash, a grounded aircraft, an ambiguous timestamp, or a type your roles may not create. |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl -X POST https://api.aerscheduler.com/reservations \
-H "Authorization: Bearer $AERSCHEDULER_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"Discovery flight","type":"solo","start":"2026-08-04T15:00:00-06:00","end":"2026-08-04T17:00:00-06:00","timeZoneName":"America/Denver"}'/reservations/{id}Get a reservation
One booking, with personnel and close-out figures.
Path parameters
idrequired | integer | The reservation id. |
Responses
200 | OK | Success.→ { data: Reservation } |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
404 | Not Found | No such booking in your organization. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl https://api.aerscheduler.com/reservations/:id \
-H "Authorization: Bearer $AERSCHEDULER_TOKEN"/reservations/{id}Update a reservation
Reschedules or edits a booking. The same clash and role rules as create apply.
Path parameters
idrequired | integer | The reservation id. |
Request body
Fields to change.
title | string | |
start | string | |
end | string | |
notes | string |
Responses
200 | OK | Success.→ { data: Reservation } |
400 | Bad Request | Rejected — usually a clash. |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl -X PATCH https://api.aerscheduler.com/reservations/:id \
-H "Authorization: Bearer $AERSCHEDULER_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"…","start":"2026-08-04T15:00:00-06:00"}'/reservations/{id}Cancel a reservation
Cancels rather than destroys: the booking stays readable with cancelledAt set, which is what keeps cancellation reporting honest. Send a cancellationCategory so it lands in the right bucket.
Path parameters
idrequired | integer | The reservation id. |
Request body
Why it was cancelled.
cancellationReason | string | |
cancellationCategory | string |
Responses
204 | No Content | Success. No body. |
400 | Bad Request | It is already cancelled, or too late to cancel under your organization's policy. |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl -X DELETE https://api.aerscheduler.com/reservations/:id \
-H "Authorization: Bearer $AERSCHEDULER_TOKEN" \
-H "Content-Type: application/json" \
-d '{"cancellationReason":"…","cancellationCategory":"…"}'/reservations/{id}/confirmReviewSign off the close-out
Confirms the recorded times. A dual flight needs both seats to confirm before it will invoice, which is why one person cannot occupy two seats on a booking.
Path parameters
idrequired | integer | The reservation id. |
Responses
200 | OK | Success.→ { data: Reservation } |
400 | Bad Request | Nothing to confirm yet. |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl -X POST https://api.aerscheduler.com/reservations/:id/confirmReview \
-H "Authorization: Bearer $AERSCHEDULER_TOKEN"/reservations/{id}/invoicesInvoice a reservation
Generates the bill for a closed-out flight. Requires the admin role.
Path parameters
idrequired | integer | The reservation id. |
Responses
200 | OK | Success.→ { data: Invoice } |
201 | Created | Success.→ { data: Invoice } |
400 | Bad Request | The flight is not closed out, or it is already invoiced. |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl -X POST https://api.aerscheduler.com/reservations/:id/invoices \
-H "Authorization: Bearer $AERSCHEDULER_TOKEN"/reservations/{id}/rampInRamp in
Records return meter readings and puts the aircraft back on the ramp.
Path parameters
idrequired | integer | The reservation id. |
Request body
Return readings.
hobbsTimeInrequired | number | |
tachTimeInrequired | number |
Responses
200 | OK | Success.→ { data: Reservation } |
400 | Bad Request | Not ramped out, or you are not on this booking. |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl -X POST https://api.aerscheduler.com/reservations/:id/rampIn \
-H "Authorization: Bearer $AERSCHEDULER_TOKEN" \
-H "Content-Type: application/json" \
-d '{"hobbsTimeIn":1,"tachTimeIn":1}'/reservations/{id}/rampOutRamp out
Records departure meter readings and marks the aircraft off the ramp. The first step of closing a flight out.
Path parameters
idrequired | integer | The reservation id. |
Request body
Departure readings.
hobbsTimeOutrequired | number | |
tachTimeOutrequired | number |
Responses
200 | OK | Success.→ { data: Reservation } |
400 | Bad Request | The aircraft is already ramped out, or you are not on this booking. |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl -X POST https://api.aerscheduler.com/reservations/:id/rampOut \
-H "Authorization: Bearer $AERSCHEDULER_TOKEN" \
-H "Content-Type: application/json" \
-d '{"hobbsTimeOut":1,"tachTimeOut":1}'/reservations/resource/{resourceId}List a resource's reservations
Bookings for one aircraft, simulator, or room in a window.
Path parameters
resourceIdrequired | integer | The resource id. |
Query parameters
startDate | string | Start of the window, ISO 8601. Include an offset or Z. |
endDate | string | End of the window, ISO 8601. |
Responses
200 | OK | The bookings.→ { data: Reservation[] } |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl https://api.aerscheduler.com/reservations/resource/:resourceId \
-H "Authorization: Bearer $AERSCHEDULER_TOKEN"/reservations/user/{userId}List a person's reservations
Bookings a person is on, in a window.
Path parameters
userIdrequired | integer | The user id. |
Query parameters
startDate | string | Start of the window, ISO 8601. Include an offset or Z. |
endDate | string | End of the window, ISO 8601. |
Responses
200 | OK | The bookings.→ { data: Reservation[] } |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl https://api.aerscheduler.com/reservations/user/:userId \
-H "Authorization: Bearer $AERSCHEDULER_TOKEN"