REST API

Maintenance API

Use the Sky Schedule maintenance API to read work orders, squawks, aircraft inspections, due reminders, and parts inventory from read-only REST endpoints.

llms.txt

The maintenance API gives read-only access to what your shop tracks in Sky Schedule: work orders, squawks, inspections, inspection reminders, and parts inventory. Use it to put open squawks on a hangar screen, send a weekly list of inspections coming due, or flag parts that are running low.

Method and pathReturnsSort order
GET/api/v1/work-ordersWork ordersCreated, newest first
GET/api/v1/squawksSquawksCreated, newest first
GET/api/v1/inspectionsInspections (archived ones left out)Created, newest first
GET/api/v1/remindersThe same inspections, shaped as due remindersCreated, newest first
GET/api/v1/inventoryActive parts with stock totalsPart name, A to Z

Each endpoint takes one optional query parameter, limit (1 to 100, default 50). None of them filter by aircraft or date, so filter on tailNumber or aircraftId in your own code. A list returns at most 100 records; see rate limits and errors for how paging works.

Work orders

curl -s "https://app.skyschedule.io/api/v1/work-orders?limit=1" \
  -H "Authorization: Bearer $SKYSCHEDULE_API_KEY"
{
  "data": [
    {
      "id": "88888888-8888-4888-8888-888888888888",
      "aircraftId": "99999999-9999-4999-8999-999999999999",
      "tailNumber": "N67890",
      "title": "100-hour inspection",
      "description": "100-hour inspection and oil change.",
      "category": "Inspection",
      "status": "in-progress",
      "scheduledStartDate": "2026-10-09",
      "scheduledEndDate": "2026-10-10",
      "createdAt": "2026-10-02T14:22:31.512+00:00"
    }
  ],
  "meta": {
    "count": 1,
    "pageSize": 1,
    "rateLimit": { "limit": 100, "remaining": 89, "reset": "2026-10-09T00:00:00.000Z" }
  }
}
FieldTypeDescription
idstring (UUID)Work order id.
aircraftIdstring or nullAircraft id.
tailNumberstring or nullAircraft tail number.
title, descriptionstring or nullWhat the work is.
categorystring or nullThe school's category, such as General.
statusstring or nullnew, in-progress, pending-parts, or completed.
scheduledStartDate, scheduledEndDatestring or nullPlanned dates, YYYY-MM-DD.
createdAtstring or nullWhen the work order was created, ISO 8601.

Squawks

curl -s "https://app.skyschedule.io/api/v1/squawks?limit=1" \
  -H "Authorization: Bearer $SKYSCHEDULE_API_KEY"
{
  "data": [
    {
      "id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
      "aircraftId": "bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb",
      "tailNumber": "N12345",
      "title": "Left landing light out",
      "description": "Found on preflight. Bulb or connector.",
      "priority": "medium",
      "severity": "non-grounding",
      "status": "open",
      "category": "Electrical",
      "createdAt": "2026-10-07T13:05:09.004+00:00"
    }
  ],
  "meta": {
    "count": 1,
    "pageSize": 1,
    "rateLimit": { "limit": 100, "remaining": 88, "reset": "2026-10-09T00:00:00.000Z" }
  }
}
FieldTypeDescription
id, aircraftId, tailNumberstring or nullSquawk id and the aircraft it's on.
title, descriptionstring or nullWhat was reported.
prioritystring or nulllow, medium, high, or critical.
severitystring or nullnon-grounding or grounding. A grounding squawk keeps the aircraft down until its work order is completed.
statusstring or nullopen, deferred, in-progress, or resolved.
categorystring or nullThe school's category.
createdAtstring or nullWhen it was reported, ISO 8601.

Inspections

curl -s "https://app.skyschedule.io/api/v1/inspections?limit=1" \
  -H "Authorization: Bearer $SKYSCHEDULE_API_KEY"
{
  "data": [
    {
      "id": "cccccccc-cccc-4ccc-8ccc-cccccccccccc",
      "aircraftId": "bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb",
      "tailNumber": "N12345",
      "inspectionType": "100-hour",
      "status": "complete",
      "completedAt": "2026-09-20T18:00:00+00:00",
      "expiresAt": null,
      "completedAtHobbs": 2400.2,
      "completedAtTach": 1932.7,
      "intervalHours": 100,
      "notes": "Compressions good. Replaced oil filter."
    }
  ],
  "meta": {
    "count": 1,
    "pageSize": 1,
    "rateLimit": { "limit": 100, "remaining": 87, "reset": "2026-10-09T00:00:00.000Z" }
  }
}
FieldTypeDescription
id, aircraftId, tailNumberstring or nullInspection id and the aircraft.
inspectionTypestring or nullThe inspection name, such as Annual or 100-hour.
statusstring or nullpending, incomplete, or complete.
completedAtstring or nullWhen it was last completed, ISO 8601.
expiresAtstring or nullCalendar due date, ISO 8601. null when the inspection has no calendar due date.
completedAtHobbs, completedAtTachnumber or nullMeter readings when it was completed.
intervalHoursnumber or nullFor recurring hour-based inspections, how many hours between them.
notesstring or nullNotes entered with the inspection.

Reminders

/reminders returns the same inspection records as /inspections, reshaped for "what's due" lists.

curl -s "https://app.skyschedule.io/api/v1/reminders?limit=1" \
  -H "Authorization: Bearer $SKYSCHEDULE_API_KEY"
{
  "data": [
    {
      "id": "cccccccc-cccc-4ccc-8ccc-cccccccccccc",
      "aircraftId": "bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb",
      "tailNumber": "N12345",
      "reminder": "100-hour",
      "dueAt": null,
      "dueHobbs": 2400.2,
      "intervalHours": 100,
      "status": "complete"
    }
  ],
  "meta": {
    "count": 1,
    "pageSize": 1,
    "rateLimit": { "limit": 100, "remaining": 86, "reset": "2026-10-09T00:00:00.000Z" }
  }
}
FieldTypeDescription
reminderstring or nullThe inspection name.
dueAtstring or nullCalendar due date (the inspection's expiresAt).
dueHobbsnumber or nullThe Hobbs reading when the inspection was last completed (the inspection's completedAtHobbs), not the reading it's next due at. For a recurring inspection tracked on Hobbs, the next one is due at dueHobbs plus intervalHours. The API doesn't say which meter an inspection is tracked on; for one tracked on Tach, use completedAtTach from /inspections.
intervalHoursnumber or nullHours between recurring inspections.
statusstring or nullpending, incomplete, or complete.

id, aircraftId, and tailNumber are the same as on the inspection.

Inventory

curl -s "https://app.skyschedule.io/api/v1/inventory?limit=1" \
  -H "Authorization: Bearer $SKYSCHEDULE_API_KEY"
{
  "data": [
    {
      "id": "dddddddd-dddd-4ddd-8ddd-dddddddddddd",
      "partNumber": "CH48110-1",
      "name": "Oil filter",
      "description": "Spin-on oil filter",
      "category": "Engine",
      "unit": "each",
      "quantity": 3,
      "minimumQuantity": 4,
      "stockStatus": "low"
    }
  ],
  "meta": {
    "count": 1,
    "pageSize": 1,
    "rateLimit": { "limit": 100, "remaining": 85, "reset": "2026-10-09T00:00:00.000Z" }
  }
}
FieldTypeDescription
idstring (UUID)Part id.
partNumber, name, description, categorystring or nullPart details as entered.
unitstring or nullUnit of measure.
quantitynumberQuantity on hand, added up across every stock location.
minimumQuantitynumberThe reorder point set for the part. 0 when none is set.
stockStatusstringout when quantity is 0 or less, low when a minimum is set and quantity is at or below it, otherwise ok.

Only active parts are listed.

Example: open squawks by aircraft

const res = await fetch("https://app.skyschedule.io/api/v1/squawks?limit=100", {
  headers: { Authorization: `Bearer ${process.env.SKYSCHEDULE_API_KEY}` },
});
const { data } = await res.json();

const open = data.filter((s) => s.status !== "resolved");
const grounded = new Set(open.filter((s) => s.severity === "grounding").map((s) => s.tailNumber));
console.log("Grounded:", [...grounded]);

The maintenance endpoints are read only. An agent can open a work order, which also blocks the aircraft on the schedule, with the MCP tool create_work_order in the MCP tools reference. Fleet records themselves (Hobbs, Tach, status) are available to agents through list_aircraft.