REST API

Reservations API

Use the Sky Schedule reservations API to list and fetch bookings by start date, with the customer, instructors, aircraft, status, activity type, and duration.

llms.txt

The reservations API returns bookings from your school's schedule: dual lessons, rentals, discovery flights, and the maintenance blocks that work orders put on an aircraft. Each reservation includes its times, status, activity type, the customer and instructors, and the aircraft. Meeting room, ground lesson, and classroom bookings are not part of this endpoint.

Method and pathDescription
GET/api/v1/reservationsList reservations, optionally within a date range
GET/api/v1/reservations/{id}Get one reservation by id

The reservation object

FieldTypeDescription
idstring (UUID)Reservation id.
reservationNumberstring or nullThe school's reservation number, as shown in the app.
statusstring or nullStatus as stored, for example PENDING, checked-out, completed, or CANCELLED. Casing varies, so compare without case. Treat anything that starts with cancel as cancelled.
activityTypestring or nullThe school's activity type, such as Dual Flight Training. Maintenance blocks use Maintenance.
startsAtstring or nullStart time, ISO 8601 with UTC offset.
endsAtstring or nullEnd time, ISO 8601 with UTC offset.
durationHoursnumber or nullHours between startsAt and endsAt, rounded to 2 decimals.
peoplearrayThe customer and up to two instructors. Each entry has role (customer or instructor), name, email, and phone. A person with no name, email, or phone on file is left out.
aircraftobject or nulltailNumber and model of the booked aircraft, or null when no aircraft is booked.

The people entries don't include customer or instructor ids. To match a person with the customers or instructors lists, use their email.

List reservations

GET https://app.skyschedule.io/api/v1/reservations

Query parameters

ParameterRequiredDescription
fromNoYYYY-MM-DD. Only reservations that start at or after 00:00 UTC on this date.
toNoYYYY-MM-DD. Only reservations that start at or before 23:59:59 UTC on this date.
limitNoRecords to return, 1 to 100. Default 50.

Results are sorted by start time, oldest first. Without from, the list begins at the oldest reservation your school has, so pass from with today's date when you want upcoming bookings. Cancelled reservations can appear in the list; check status.

from and to are UTC calendar days. If your school is in the United States, an evening flight can start on the next UTC day, so widen the range by a day and filter on startsAt in your own time zone.

Example request

curl -s "https://app.skyschedule.io/api/v1/reservations?from=2026-10-09&to=2026-10-09&limit=2" \
  -H "Authorization: Bearer $SKYSCHEDULE_API_KEY"

Example response

{
  "data": [
    {
      "id": "11111111-1111-4111-8111-111111111111",
      "reservationNumber": "1042",
      "status": "PENDING",
      "activityType": "Dual Flight Training",
      "startsAt": "2026-10-09T15:00:00+00:00",
      "endsAt": "2026-10-09T17:00:00+00:00",
      "durationHours": 2,
      "people": [
        { "role": "customer", "name": "Alex Student", "email": "alex.student@example.com", "phone": "555-0100" },
        { "role": "instructor", "name": "Sam Instructor", "email": "sam.cfi@example.com", "phone": "555-0101" }
      ],
      "aircraft": { "tailNumber": "N12345", "model": "Cessna 172S Skyhawk" }
    },
    {
      "id": "22222222-2222-4222-8222-222222222222",
      "reservationNumber": "1043",
      "status": "PENDING",
      "activityType": "Maintenance",
      "startsAt": "2026-10-09T16:00:00+00:00",
      "endsAt": "2026-10-09T23:00:00+00:00",
      "durationHours": 7,
      "people": [],
      "aircraft": { "tailNumber": "N67890", "model": "Piper PA-28-181 Archer" }
    }
  ],
  "meta": {
    "count": 2,
    "pageSize": 2,
    "rateLimit": { "limit": 100, "remaining": 96, "reset": "2026-10-09T00:00:00.000Z" }
  }
}

Get one reservation

GET https://app.skyschedule.io/api/v1/reservations/{id}

{id} is the full reservation UUID from a list response. A partial id, or an id from another school, returns 404.

curl -s "https://app.skyschedule.io/api/v1/reservations/11111111-1111-4111-8111-111111111111" \
  -H "Authorization: Bearer $SKYSCHEDULE_API_KEY"
{
  "data": {
    "id": "11111111-1111-4111-8111-111111111111",
    "reservationNumber": "1042",
    "status": "PENDING",
    "activityType": "Dual Flight Training",
    "startsAt": "2026-10-09T15:00:00+00:00",
    "endsAt": "2026-10-09T17:00:00+00:00",
    "durationHours": 2,
    "people": [
      { "role": "customer", "name": "Alex Student", "email": "alex.student@example.com", "phone": "555-0100" },
      { "role": "instructor", "name": "Sam Instructor", "email": "sam.cfi@example.com", "phone": "555-0101" }
    ],
    "aircraft": { "tailNumber": "N12345", "model": "Cessna 172S Skyhawk" }
  },
  "meta": {
    "rateLimit": { "limit": 100, "remaining": 95, "reset": "2026-10-09T00:00:00.000Z" }
  }
}

When the reservation doesn't exist:

{ "error": "Reservation not found." }

Example: next 7 days for one aircraft

The API has no aircraft filter, so filter on your side:

const params = new URLSearchParams({ from: "2026-10-08", to: "2026-10-15", limit: "100" });
const res = await fetch(`https://app.skyschedule.io/api/v1/reservations?${params}`, {
  headers: { Authorization: `Bearer ${process.env.SKYSCHEDULE_API_KEY}` },
});
const { data, meta } = await res.json();

const bookings = data.filter(
  (r) => r.aircraft?.tailNumber === "N12345" && !String(r.status).toLowerCase().startsWith("cancel"),
);

if (meta.count === meta.pageSize) {
  console.warn("Page is full. Split the date range to see every reservation.");
}

The REST API is read only. To book, change, or cancel reservations from software, use the MCP tools create_reservation, update_reservation, and cancel_reservation described in the MCP tools reference. Comments on a reservation are in the reservation comments API.