Getting started
Sky Schedule API Overview
The Sky Schedule API gives a flight school read-only REST access to its reservations, flights, rosters, and maintenance, plus a hosted MCP server for AI agents.
The Sky Schedule API lets a flight school pull its own data into other tools: a schedule board on the hangar TV, a nightly export of completed flights to a spreadsheet, or a check that flags aircraft with inspections coming due. There are two ways in, and both use the same school API key.
Two ways to use the Sky Schedule API
| REST API v1 | MCP server | |
|---|---|---|
| Best for | Scripts, dashboards, data exports | AI agents such as Claude, Cursor, and Grok |
| Access | Read only (every endpoint is GET) | 20 read tools and 14 write tools |
| Address | https://app.skyschedule.io/api/v1 | https://app.skyschedule.io/api/mcp |
| Daily limit per school | 100 requests | 1,000 requests, of which 200 can be write tool calls |
| Start here | API authentication | MCP server overview |
The REST API can't create, change, or delete anything. If you need to book a flight, log Hobbs, or open a work order from software, use the MCP server.
Base URL
All REST endpoints live under one base URL, over HTTPS:
https://app.skyschedule.io/api/v1
Quick start
- A school admin generates an API key in Settings, Integrations, API Keys. See API authentication for the steps.
- Store the key on your server, for example in an environment variable named
SKYSCHEDULE_API_KEY. - Request the next few reservations:
curl -s "https://app.skyschedule.io/api/v1/reservations?from=2026-10-09&limit=1" \
-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": {
"count": 1,
"pageSize": 1,
"rateLimit": { "limit": 100, "remaining": 99, "reset": "2026-10-09T00:00:00.000Z" }
}
}
REST endpoints
| Method and path | Returns | Filters |
|---|---|---|
GET/api/v1/reservations | Reservations on the schedule | from, to, limit |
GET/api/v1/reservations/{id} | One reservation | |
GET/api/v1/flights | Completed flight logs | from, to, limit |
GET/api/v1/flights/{id} | One completed flight | |
GET/api/v1/customers | Customers (students and renters) | limit |
GET/api/v1/customers/{id} | One customer | |
GET/api/v1/instructors | Instructors | limit |
GET/api/v1/instructors/{id} | One instructor | |
GET/api/v1/work-orders | Maintenance work orders | limit |
GET/api/v1/squawks | Aircraft squawks | limit |
GET/api/v1/inspections | Aircraft inspections | limit |
GET/api/v1/reminders | Inspection due reminders | limit |
GET/api/v1/inventory | Parts inventory and stock levels | limit |
GET/api/v1/comments | Reservation comments | reservationId, limit |
Aircraft records and CRM leads are not REST endpoints. Agents can read them through the MCP tools list_aircraft, get_aircraft, list_leads, and get_lead.
Conventions
- Responses are JSON with camelCase field names.
- A list returns
{ "data": [ ... ], "meta": { ... } }. A single record returns{ "data": { ... }, "meta": { ... } }. - An error returns
{ "error": "message" }with an HTTP status code. See rate limits and errors. - Record ids are UUIDs.
- Timestamps such as
startsAtandcompletedAtare ISO 8601 with a UTC offset. Plain dates such asflightDateuseYYYY-MM-DD. - A field with no value is
null. It is not left out. - A key only reaches the school that owns it. Every query is scoped to that school.
Call the API from a server
REST responses don't include CORS headers, so a web page on another site can't call the API from the browser. That's on purpose: a key in browser or mobile app code is visible to anyone who opens it. Call the API from your own server, a scheduled job, or a spreadsheet script that keeps the key private.
Versioning
The version is part of the path: /api/v1. Version 1 is the current and only REST version. The MCP server reports its own name and version (sky-schedule, 2.0.0) when a client connects. Dated changes are listed in the API changelog.
Acceptable use
API keys and the MCP server are for a school's own data and its own tools. Reverse engineering, decompiling, or scraping Sky Schedule, accessing it outside the API, and using it to build or help build a competing product are not allowed. We monitor API, MCP, and app traffic to detect this. If we find it, we revoke access and may take legal action under Section 7 of the Terms of Service.