{"removeAttribution":false,"l10n":{"translations":{"default_locale":{"translation":{}}},"defaultLocale":"default_locale","locales":[{"code":"default_locale","name":"default_locale"}]},"logo":{"srcSet":"/assets/logo-dark.7db790877da5b68d56cdc5378d67f1a9538e1e2d04eb6e17cd2fc5f7742cf239.9c1bb791.svg light, /assets/logo-light.62b7a21dde0dfc6abe39d9effc5b74d8d370602423c8f56ab6082c4d0ea786e4.9c1bb791.svg dark","altText":"TrueFlight","link":"https://trueflightschedule.com"},"navbar":{"items":[{"type":"link","fsPath":"index.md","metadata":{"type":"markdown"},"label":"Home","link":"/","linePosition":"top","routeSlug":"/"},{"type":"link","fsPath":"tf-docs.yaml","metadata":{"type":"openapi","title":"TrueFlight External API","description":"Machine-to-machine API for organizations. Authenticate with `Authorization: Bearer tf_live_...`.\n\nThis specification documents every shipped route under `/api/external/v1` (locations, schedule resources, CRM, maintenance, LMS, read-only payments, and read-only documents/store/contracts/discovery). Response `data` objects use snake_case fields aligned with the implementation.\n\n**Not in this version (by design):** Creating or cancelling reservations (`POST /reservations`, `DELETE /reservations/{id}`, or broad `PATCH` beyond notes) is not exposed until internal schedule validation is shared with this surface. Invoice create/update/void (`POST`/`PATCH`/`DELETE` on `/invoices`) is not exposed here; use in-app billing flows. Payment capture, refunds, and card/ACH money movement are not exposed on this API—only read-only payment records for reconciliation. A future narrowly scoped money API may be specified separately.\n\n**Read-only extended APIs:** Document templates/instances, store orders, contracts, and discovery flight products are list/detail only. Mutations stay in governed in-app flows (e-sign, commerce checkout, contract authoring, product catalog) until product and compliance extend this API. Aircraft dispatch check-in is not exposed under `/api/external/v1`.\n\nWebhooks: verify `x-tf-signature` (HMAC-SHA256 hex over `timestamp.deliveryId.rawBody` using your endpoint signing secret).\n\n**Subscribable webhook `type` values** (non-exhaustive; payload `data` uses snake_case with camelCase mirrors where noted):\n\n- `ping` — connectivity test from the developer webhook settings UI.\n- `reservation.created`, `reservation.updated`, `reservation.cancelled` — schedule changes for subscribed organizations/locations.\n- `invoice.created`, `invoice.paid` — billing lifecycle signals.\n- `squawk.created` — enqueued for outbound partner webhooks when a squawk is created through `POST /squawks` (in-app squawk flows use separate product notifications). Pair with `GET /squawks` for reconciliation.\n- `user.invited` — membership row created/updated for an invite; includes `memberships` (membership id + location id), `email`, `user_id`, `is_new_user`, `send_invitation_email`.\n- `user.invite_accepted` — invitee accepted (in-app or password-creation flow); includes `membership_id`, `location_id`, `user_id`, `status` (membership status after accept).\n- `user.status_changed` — emitted when a user is archived or unarchived from the CRM; includes `previous_status`, `current_status`, `previous_is_archived`, `current_is_archived`, `reason` (`archived` | `unarchived`). Other membership status edits may be added over time.\n"},"label":"API reference","link":"/tf-docs","linePosition":"top","routeSlug":"/tf-docs"},{"type":"link","link":"https://trueflightschedule.com","label":"TrueFlight Website","external":true,"linePosition":"top"},{"type":"link","link":"https://trueflight.app","label":"Production App","external":true,"linePosition":"top"},{"type":"link","link":"https://sandbox.trueflight.app","label":"Sandbox App","external":true,"linePosition":"top"}]},"colorMode":{"modes":["light","dark"]},"markdown":{"frontMatterKeysToResolve":["image","links"],"partialsFolders":["**/_partials/**"],"lastUpdatedBlock":{"format":"timeago"},"toc":{"header":"On this page","depth":3},"editPage":{}},"mcp":{"hide":false,"docs":{"hide":false,"name":"MCP server","ignore":[]}},"banner":[],"breadcrumbs":{"prefixItems":[]},"userMenu":{"hide":true},"auth":{"idpsInfo":[]},"search":{},"entitiesCatalog":{},"apiProducts":{},"searchFeatures":{"advanced":{"enabled":false},"ai":{"enabled":false}},"analytics":{"ga":{"trackingId":"","exclude":[],"trackers":{}}}}