AerScheduler

Reservations

Booking, rescheduling, and closing out flights.

11 endpoints · base URL https://api.aerscheduler.com

get/reservations

List 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

startDatestringStart of the window, ISO 8601. Include an offset or Z.
endDatestringEnd of the window, ISO 8601.
qstringFree-text filter. Matches the fields a person would search on.
resourceIdstringComma-separated resource ids to filter by.
locationIdstringComma-separated location ids to filter by.
includeCanceledbooleanSet true to include cancelled bookings. Defaults to false.
ongoingbooleanSet false to exclude bookings already in progress. Defaults to true.
orderBy"asc" | "desc"Sort direction on start time. Defaults to desc.

Responses

200OKThe bookings.{ data: Reservation[] }
400Bad RequestThe date range is missing or unparseable.
401UnauthorizedNo token, an expired token, or a malformed one. Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl https://api.aerscheduler.com/reservations \
  -H "Authorization: Bearer $AERSCHEDULER_TOKEN"
post/reservations

Create 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.

titlerequiredstringShort 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.
startrequiredstringStart instant. Must carry an explicit offset or Z.
endrequiredstringEnd instant. Must carry an explicit offset or Z.
timeZoneNamerequiredstringIANA zone the booking is being made in — the field's zone, not the caller's device.
notesstringFree-text notes shown on the booking.
resourceobjectThe aircraft, simulator, or room to book, as { id }.
locationobjectWhere it happens, as { id }. Defaults to the resource's location.
personnelobjectWho is on the booking. One person cannot fill two seats on the same booking.
recurrenceobjectOptional. Creates a repeating series.

Responses

201CreatedThe booking that was created, or the series.{ data: Reservation }
400Bad RequestRejected: a clash, a grounded aircraft, an ambiguous timestamp, or a type your roles may not create.
401UnauthorizedNo token, an expired token, or a malformed one. Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
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"}'
get/reservations/{id}

Get a reservation

One booking, with personnel and close-out figures.

Path parameters

idrequiredintegerThe reservation id.

Responses

200OKSuccess.{ data: Reservation }
401UnauthorizedNo token, an expired token, or a malformed one. Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
404Not FoundNo such booking in your organization.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl https://api.aerscheduler.com/reservations/:id \
  -H "Authorization: Bearer $AERSCHEDULER_TOKEN"
patch/reservations/{id}

Update a reservation

Reschedules or edits a booking. The same clash and role rules as create apply.

Path parameters

idrequiredintegerThe reservation id.

Request body

Fields to change.

titlestring
startstring
endstring
notesstring

Responses

200OKSuccess.{ data: Reservation }
400Bad RequestRejected — usually a clash.
401UnauthorizedNo token, an expired token, or a malformed one. Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
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"}'
delete/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

idrequiredintegerThe reservation id.

Request body

Why it was cancelled.

cancellationReasonstring
cancellationCategorystring

Responses

204No ContentSuccess. No body.
400Bad RequestIt is already cancelled, or too late to cancel under your organization's policy.
401UnauthorizedNo token, an expired token, or a malformed one. Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl -X DELETE https://api.aerscheduler.com/reservations/:id \
  -H "Authorization: Bearer $AERSCHEDULER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"cancellationReason":"…","cancellationCategory":"…"}'
post/reservations/{id}/confirmReview

Sign 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

idrequiredintegerThe reservation id.

Responses

200OKSuccess.{ data: Reservation }
400Bad RequestNothing to confirm yet.
401UnauthorizedNo token, an expired token, or a malformed one. Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl -X POST https://api.aerscheduler.com/reservations/:id/confirmReview \
  -H "Authorization: Bearer $AERSCHEDULER_TOKEN"
post/reservations/{id}/invoices

Invoice a reservation

Generates the bill for a closed-out flight. Requires the admin role.

Path parameters

idrequiredintegerThe reservation id.

Responses

200OKSuccess.{ data: Invoice }
201CreatedSuccess.{ data: Invoice }
400Bad RequestThe flight is not closed out, or it is already invoiced.
401UnauthorizedNo token, an expired token, or a malformed one. Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl -X POST https://api.aerscheduler.com/reservations/:id/invoices \
  -H "Authorization: Bearer $AERSCHEDULER_TOKEN"
post/reservations/{id}/rampIn

Ramp in

Records return meter readings and puts the aircraft back on the ramp.

Path parameters

idrequiredintegerThe reservation id.

Request body

Return readings.

hobbsTimeInrequirednumber
tachTimeInrequirednumber

Responses

200OKSuccess.{ data: Reservation }
400Bad RequestNot ramped out, or you are not on this booking.
401UnauthorizedNo token, an expired token, or a malformed one. Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
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}'
post/reservations/{id}/rampOut

Ramp out

Records departure meter readings and marks the aircraft off the ramp. The first step of closing a flight out.

Path parameters

idrequiredintegerThe reservation id.

Request body

Departure readings.

hobbsTimeOutrequirednumber
tachTimeOutrequirednumber

Responses

200OKSuccess.{ data: Reservation }
400Bad RequestThe aircraft is already ramped out, or you are not on this booking.
401UnauthorizedNo token, an expired token, or a malformed one. Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
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}'
get/reservations/resource/{resourceId}

List a resource's reservations

Bookings for one aircraft, simulator, or room in a window.

Path parameters

resourceIdrequiredintegerThe resource id.

Query parameters

startDatestringStart of the window, ISO 8601. Include an offset or Z.
endDatestringEnd of the window, ISO 8601.

Responses

200OKThe bookings.{ data: Reservation[] }
401UnauthorizedNo token, an expired token, or a malformed one. Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl https://api.aerscheduler.com/reservations/resource/:resourceId \
  -H "Authorization: Bearer $AERSCHEDULER_TOKEN"
get/reservations/user/{userId}

List a person's reservations

Bookings a person is on, in a window.

Path parameters

userIdrequiredintegerThe user id.

Query parameters

startDatestringStart of the window, ISO 8601. Include an offset or Z.
endDatestringEnd of the window, ISO 8601.

Responses

200OKThe bookings.{ data: Reservation[] }
401UnauthorizedNo token, an expired token, or a malformed one. Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl https://api.aerscheduler.com/reservations/user/:userId \
  -H "Authorization: Bearer $AERSCHEDULER_TOKEN"