Organizations
The flight school itself: membership, invitations, and settings.
23 endpoints · base URL https://api.aerscheduler.com
/invitationsList pending invitations
Requires the admin role.
Query parameters
limit | integer | Rows to return, 1,1000. Defaults to 1000; a larger value is clamped rather than rejected. |
offset | integer | Rows to skip, for paging. Defaults to 0. |
sort | string | Field to order by before paging, as a dot path into the row , total, user.firstName. Omit to keep the endpoint's own order. Numbers and ISO timestamps order as numbers and instants, not as text, and empty values always sort last regardless of direction. Ordering happens before the page is cut, so it orders the whole collection rather than the page you are holding. |
order | "asc" | "desc" | asc (default) or desc. Only meaningful with sort. |
Responses
200 | OK | Success.→ { data: object[] } |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl https://api.aerscheduler.com/invitations \
-H "Authorization: Bearer $AERSCHEDULER_KEY"/joinRequestsList join requests
People asking to join a private organization. Requires the admin role.
Query parameters
limit | integer | Rows to return, 1,1000. Defaults to 1000; a larger value is clamped rather than rejected. |
offset | integer | Rows to skip, for paging. Defaults to 0. |
sort | string | Field to order by before paging, as a dot path into the row , total, user.firstName. Omit to keep the endpoint's own order. Numbers and ISO timestamps order as numbers and instants, not as text, and empty values always sort last regardless of direction. Ordering happens before the page is cut, so it orders the whole collection rather than the page you are holding. |
order | "asc" | "desc" | asc (default) or desc. Only meaningful with sort. |
Responses
200 | OK | Success.→ { data: object[] } |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl https://api.aerscheduler.com/joinRequests \
-H "Authorization: Bearer $AERSCHEDULER_KEY"/organizationsList your organizations
Every organization the signed-in account belongs to.
Query parameters
limit | integer | Rows to return, 1,1000. Defaults to 1000; a larger value is clamped rather than rejected. |
offset | integer | Rows to skip, for paging. Defaults to 0. |
sort | string | Field to order by before paging, as a dot path into the row , total, user.firstName. Omit to keep the endpoint's own order. Numbers and ISO timestamps order as numbers and instants, not as text, and empty values always sort last regardless of direction. Ordering happens before the page is cut, so it orders the whole collection rather than the page you are holding. |
order | "asc" | "desc" | asc (default) or desc. Only meaningful with sort. |
Responses
200 | OK | The organizations.→ { data: Organization[] } |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl https://api.aerscheduler.com/organizations \
-H "Authorization: Bearer $AERSCHEDULER_KEY"/organizationsUpdate your organization
Requires the admin role.
Request body
Fields to change.
name | string | |
organizationType | "flight_school" | "flying_club" | "rental" | "solo_instructor" | "aircraft_owner" | What kind of operation this is. Same values as create. Changing it here does not rewrite signup attribution. |
about | string | |
showInDirectory | boolean | |
bookingPolicy | object | Org-wide booking rules. Send only the keys you are changing; null clears a rule. Minimum notice, booking horizon, start interval, fixed duration, and buffers apply to every internal schedule booking (member self-book and front desk), not only future public embeds. The four balance gates apply only when the organization is in ledger billing mode. |
publicBookingEnabled | boolean | When true, guests can submit booking requests for active offerings at /book/{publicBookingSlug}/{offering.slug}. Staff still approve every request. |
publicBookingSlug | string | Lowercase letters, numbers, and hyphens. Unique across schools. Generated from the school name if you enable public booking without one. |
publicBookingEmbedHosts | string[] | HTTPS origins allowed to iframe /book pages, stored like https://www.yourschool.com. Empty keeps the share link only. No wildcards, no IP addresses except localhost/127.0.0.1. Public hosts must be https. Demo organizations are refused. |
publicBookingAccentHex | string | null | Guest /book accent, #RRGGBB. Null clears it. |
publicBookingAppearance | "light" | "dark" | "system" | |
publicBookingDensity | "compact" | "comfortable" | |
publicBookingCornerStyle | "rounded" | "sharp" |
Responses
200 | OK | Success.→ { data: Organization } |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl -X PATCH https://api.aerscheduler.com/organizations \
-H "Authorization: Bearer $AERSCHEDULER_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"…","organizationType":"flight_school"}'/organizationsSchedule your organization for deletion
Puts the school on a 30-day countdown. The school stays usable until then. Every admin and owner is emailed and notified. Requires the owner role. Refused while any invoice is unpaid, or if a countdown is already running.
Responses
200 | OK | The organization with its deletion date.→ { data: object } |
400 | Bad Request | Unpaid invoices, already scheduled, or a demo organization. |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl -X DELETE https://api.aerscheduler.com/organizations \
-H "Authorization: Bearer $AERSCHEDULER_KEY"/joinRequests/{id}Delete a join request
Requires the admin role.
Path parameters
idrequired | integer | The join request id. |
Responses
204 | No Content | Success. No body. |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl -X DELETE https://api.aerscheduler.com/joinRequests/:id \
-H "Authorization: Bearer $AERSCHEDULER_KEY"/organizations/{orgId}Get an organization
Public detail for one organization.
Path parameters
orgIdrequired | integer | The organization id. |
Responses
200 | OK | Success.→ { data: Organization } |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl https://api.aerscheduler.com/organizations/:orgId \
-H "Authorization: Bearer $AERSCHEDULER_KEY"/organizations/adTrackingRead the Airworthiness Directive tracking mode and readiness
Whether this school wants AerScheduler involved in Airworthiness Directives, and how well it could be. mode is one of off (we do nothing about ADs), manual (the school enters ADs itself), catalogue (we watch published ADs and propose the ones that mention this fleet) or external (applicability is tracked in another system, named by externalSystem).
aircraft reports, per aeroplane, how precisely a published AD could be matched: serial when we can narrow the AD's serial-number range, model when we can only tell that an AD mentions this make and model, and none when we do not know enough to propose anything. Admin only.
Responses
200 | OK | The mode and what could be matched for each aeroplane.→ { data: object } |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl https://api.aerscheduler.com/organizations/adTracking \
-H "Authorization: Bearer $AERSCHEDULER_KEY"/organizations/adTrackingSet the Airworthiness Directive tracking mode
Changes what AerScheduler does about ADs. Setting external requires externalSystem, which is printed on the AD status report so a reader knows applicability lives elsewhere. Returns the same shape as the GET, including refreshed readiness. Admin only.
Request body
moderequired | "off" | "manual" | "catalogue" | "external" | |
externalSystem | string | null | Required when mode is external. Cleared otherwise. |
Responses
200 | OK | The updated mode and readiness.→ { data: object } |
400 | Bad Request | An unknown mode, or external with no system named. |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl -X PATCH https://api.aerscheduler.com/organizations/adTracking \
-H "Authorization: Bearer $AERSCHEDULER_KEY" \
-H "Content-Type: application/json" \
-d '{"mode":"off"}'/organizations/cancelDeletionCancel a scheduled organization deletion
Clears the 30-day countdown. Requires the admin role (owners hold admin).
Responses
200 | OK | The organization with the countdown cleared.→ { data: object } |
400 | Bad Request | No deletion is currently scheduled. |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl -X POST https://api.aerscheduler.com/organizations/cancelDeletion \
-H "Authorization: Bearer $AERSCHEDULER_KEY"/organizations/guestsList guests
Non-members who have appeared on bookings.
Query parameters
limit | integer | Rows to return, 1,1000. Defaults to 1000; a larger value is clamped rather than rejected. |
offset | integer | Rows to skip, for paging. Defaults to 0. |
sort | string | Field to order by before paging, as a dot path into the row , total, user.firstName. Omit to keep the endpoint's own order. Numbers and ISO timestamps order as numbers and instants, not as text, and empty values always sort last regardless of direction. Ordering happens before the page is cut, so it orders the whole collection rather than the page you are holding. |
order | "asc" | "desc" | asc (default) or desc. Only meaningful with sort. |
Responses
200 | OK | The guests.→ { data: User[] } |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl https://api.aerscheduler.com/organizations/guests \
-H "Authorization: Bearer $AERSCHEDULER_KEY"/organizations/inviteInvite someone
Emails an invitation with the roles they will get on acceptance. Requires the admin role.
Request body
Who to invite and as what.
emailrequired | string | |
admin | boolean | |
instructor | boolean | |
student | boolean | |
renter | boolean | |
technician | boolean | |
dispatcher | boolean | |
orgUserGroupIds | integer[] |
Responses
204 | No Content | Success. No body. |
400 | Bad Request | Already invited, or already a member. |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl -X POST https://api.aerscheduler.com/organizations/invite \
-H "Authorization: Bearer $AERSCHEDULER_KEY" \
-H "Content-Type: application/json" \
-d '{"email":"you@yourschool.com"}'/organizations/ledgerGet ledger billing mode
Whether this organization is in ledger billing mode. When on, members live on an account balance; money-in and refunds are separate from per-flight invoices. Default off. Any member may read.
Responses
200 | OK | Success.→ { data: OrganizationLedgerSettings } |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl https://api.aerscheduler.com/organizations/ledger \
-H "Authorization: Bearer $AERSCHEDULER_KEY"/organizations/ledgerSet ledger billing mode
Turns ledger mode on or off, sets the optional card surcharge on member top-ups, and/or sets late fees on negative balances. Owner only. Desk cash/check credit is never surcharged. Late fees post once per member per calendar month after the grace period.
Request body
Ledger settings patch. Send any subset.
enabled | boolean | |
topUpCardFeePercent | integer | |
topUpCardFeeFlatCents | integer | |
lateFeePercent | integer | Whole percent of the amount owing. 0 or null = off. |
lateFeeFlatCents | integer | |
lateFeeGraceDays | integer | Days owing before a late fee posts. Null = 30. 0 = first eligible sweep. |
Responses
200 | OK | Updated settings.→ { data: OrganizationLedgerSettings } |
400 | Bad Request | Body failed validation. |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Only the organization owner can change this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl -X PATCH https://api.aerscheduler.com/organizations/ledger \
-H "Authorization: Bearer $AERSCHEDULER_KEY" \
-H "Content-Type: application/json" \
-d '{"enabled":true,"topUpCardFeePercent":1}'/organizations/ratingsList ratings
The certificates and ratings your organization teaches.
Query parameters
limit | integer | Rows to return, 1,1000. Defaults to 1000; a larger value is clamped rather than rejected. |
offset | integer | Rows to skip, for paging. Defaults to 0. |
sort | string | Field to order by before paging, as a dot path into the row , total, user.firstName. Omit to keep the endpoint's own order. Numbers and ISO timestamps order as numbers and instants, not as text, and empty values always sort last regardless of direction. Ordering happens before the page is cut, so it orders the whole collection rather than the page you are holding. |
order | "asc" | "desc" | asc (default) or desc. Only meaningful with sort. |
Responses
200 | OK | Success.→ { data: object[] } |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl https://api.aerscheduler.com/organizations/ratings \
-H "Authorization: Bearer $AERSCHEDULER_KEY"/organizations/ratingsCreate a rating
Requires the admin role.
Request body
The rating.
namerequired | string | |
anyInstructorCanTeachrequired | boolean | |
defaultInstructorRaterequired | integer | Hourly rate in cents. |
Responses
200 | OK | Success.→ { data: object } |
400 | Bad Request | Validation failed. |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl -X POST https://api.aerscheduler.com/organizations/ratings \
-H "Authorization: Bearer $AERSCHEDULER_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"…","anyInstructorCanTeach":true,"defaultInstructorRate":1}'/joinRequests/{id}/acceptAccept a join request
Requires the admin role.
Path parameters
idrequired | integer | The join request id. |
Responses
200 | OK | Success.→ { data: object } |
204 | No Content | Success. No body. |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl -X POST https://api.aerscheduler.com/joinRequests/:id/accept \
-H "Authorization: Bearer $AERSCHEDULER_KEY"/joinRequests/{id}/declineDecline a join request
Requires the admin role.
Path parameters
idrequired | integer | The join request id. |
Responses
200 | OK | Success.→ { data: object } |
204 | No Content | Success. No body. |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl -X POST https://api.aerscheduler.com/joinRequests/:id/decline \
-H "Authorization: Bearer $AERSCHEDULER_KEY"/organizations/leave/{orgId}Leave an organization
Removes yourself. The last owner cannot leave.
Path parameters
orgIdrequired | integer | The organization to leave. |
Responses
200 | OK | Success.→ { data: object } |
204 | No Content | Success. No body. |
400 | Bad Request | You cannot leave , you are the last owner or administrator. |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl -X POST https://api.aerscheduler.com/organizations/leave/:orgId \
-H "Authorization: Bearer $AERSCHEDULER_KEY"/organizations/ledger/accountsList member account balances
School-wide ledger roster for the Operations Billing desk. Admin only. Current members only (not archived, not API keys). summary is org-wide and ignores q / status. Default sort is most owing first (balanceCents ascending).
Query parameters
q | string | Free-text filter. Matches the fields a person would search on. |
status | string | Comma-separated balance buckets: owing (negative), credit (positive), zero. |
limit | integer | Rows to return, 1,1000. Defaults to 1000; a larger value is clamped rather than rejected. |
offset | integer | Rows to skip, for paging. Defaults to 0. |
sort | string | Field to order by before paging, as a dot path into the row , total, user.firstName. Omit to keep the endpoint's own order. Numbers and ISO timestamps order as numbers and instants, not as text, and empty values always sort last regardless of direction. Ordering happens before the page is cut, so it orders the whole collection rather than the page you are holding. |
order | "asc" | "desc" | asc (default) or desc. Only meaningful with sort. |
Responses
200 | OK | Paged accounts plus org-wide totals.→ { data: LedgerAccount[] } |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not an administrator. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl https://api.aerscheduler.com/organizations/ledger/accounts \
-H "Authorization: Bearer $AERSCHEDULER_KEY"/organizations/ratings/{ratingId}Update a rating
Requires the admin role.
Path parameters
ratingIdrequired | integer | The rating id. |
Request body
Fields to change.
name | string |
Responses
200 | OK | Success.→ { data: object } |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl -X PATCH https://api.aerscheduler.com/organizations/ratings/:ratingId \
-H "Authorization: Bearer $AERSCHEDULER_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"…"}'/organizations/ratings/{ratingId}Delete a rating
Requires the admin role.
Path parameters
ratingIdrequired | integer | The rating id. |
Responses
204 | No Content | Success. No body. |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl -X DELETE https://api.aerscheduler.com/organizations/ratings/:ratingId \
-H "Authorization: Bearer $AERSCHEDULER_KEY"/organizations/removeUser/{userId}Remove a member
Removes someone from your organization. Requires the admin role.
Path parameters
userIdrequired | integer | The user to remove. |
Responses
204 | No Content | Success. No body. |
400 | Bad Request | They cannot be removed , the last owner or administrator, for instance. |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl -X POST https://api.aerscheduler.com/organizations/removeUser/:userId \
-H "Authorization: Bearer $AERSCHEDULER_KEY"