Organizations

The flight school itself: membership, invitations, and settings.

35 endpoints · base URL https://api.aerscheduler.com

get/invitations

List pending invitations

Requires the admin role.

Query parameters

limitintegerRows to return, 1,1000. Defaults to 1000; a larger value is clamped rather than rejected.
offsetintegerRows to skip, for paging. Defaults to 0.
sortstringField 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

200OKSuccess.→ { data: object[] }
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl https://api.aerscheduler.com/invitations \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"
get/joinRequests

List join requests

People asking to join a private organization. Requires the admin role.

Query parameters

limitintegerRows to return, 1,1000. Defaults to 1000; a larger value is clamped rather than rejected.
offsetintegerRows to skip, for paging. Defaults to 0.
sortstringField 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

200OKSuccess.→ { data: object[] }
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl https://api.aerscheduler.com/joinRequests \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"
get/organizations

List your organizations

Every organization the signed-in account belongs to.

Query parameters

limitintegerRows to return, 1,1000. Defaults to 1000; a larger value is clamped rather than rejected.
offsetintegerRows to skip, for paging. Defaults to 0.
sortstringField 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

200OKThe organizations.→ { data: Organization[] }
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl https://api.aerscheduler.com/organizations \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"
patch/organizations

Update your organization

Requires the admin role.

Request body

Fields to change.

namestring
organizationType"flight_school" | "flying_club" | "rental" | "solo_instructor" | "aircraft_owner" | "maintenance_shop"What kind of operation this is. Same values as create. Changing it here does not rewrite signup attribution.
aboutstring
showInDirectoryboolean
bookingPolicyobjectOrg-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.
publicBookingEnabledbooleanWhen true, guests can submit booking requests for active offerings at /book/{publicBookingSlug}/{offering.slug}. Staff still approve every request.
publicBookingSlugstringLowercase letters, numbers, and hyphens. Unique across organizations. Generated from the organization name if you enable public booking without one.
publicBookingEmbedHostsstring[]HTTPS origins allowed to iframe /book pages, stored like https://www.yoursite.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.
publicBookingAccentHexstring | nullGuest /book accent, #RRGGBB. Null clears it.
reservationTypeColorsobject | nullColors for reservation types on the schedule: keys dual, solo, shared, ground, sim, rental, guest, maintenance; values #RRGGBB dark enough to read on white (3:1). A type set to null goes back to its default; null for the whole field resets them all. Admins only.
publicBookingAppearance"light" | "dark" | "system"
publicBookingDensity"compact" | "comfortable"
publicBookingCornerStyle"rounded" | "sharp"

Responses

200OKSuccess.→ { data: Organization }
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl -X PATCH https://api.aerscheduler.com/organizations \
  -H "Authorization: Bearer $AERSCHEDULER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"…","organizationType":"flight_school"}'
delete/organizations

Schedule your organization for deletion

Puts the organization on a 30-day countdown. The organization 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

200OKThe organization with its deletion date.→ { data: object }
400Bad RequestUnpaid invoices, already scheduled, or a demo organization.
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl -X DELETE https://api.aerscheduler.com/organizations \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"
delete/joinRequests/{id}

Delete a join request

Requires the admin role.

Path parameters

idrequiredintegerThe join request id.

Responses

204No ContentSuccess. No body.
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl -X DELETE https://api.aerscheduler.com/joinRequests/:id \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"
get/organizations/{orgId}

Get an organization

Public detail for one organization.

Path parameters

orgIdrequiredintegerThe organization id.

Responses

200OKSuccess.→ { data: Organization }
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl https://api.aerscheduler.com/organizations/:orgId \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"
get/organizations/adTracking

Read whether AerScheduler finds the ADs for your aircraft

One switch. When enabled, each aircraft lists the published ADs that name its airframe, engine or propeller, from the AD library, for somebody to decide (see GET /maintenance/resources/{resourceId}/airworthiness-directives), with alerts and the AD status report. Off by default. Admin only.

Responses

200OKThe setting.→ { data: object }
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl https://api.aerscheduler.com/organizations/adTracking \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"
patch/organizations/adTracking

Turn finding the ADs for your aircraft on or off

Send enabled. The older mode (off or catalogue) is still accepted. Admin only.

Request body

enabledboolean
mode"off" | "catalogue"Accepted in place of enabled.

Responses

200OKThe updated setting.→ { data: object }
400Bad RequestNeither enabled nor a valid mode was sent.
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl -X PATCH https://api.aerscheduler.com/organizations/adTracking \
  -H "Authorization: Bearer $AERSCHEDULER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"enabled":true,"mode":"off"}'
get/organizations/billingCurrency

Get the billing currency

The currency every amount in this organization is in, whether it can still change, and the supported list. Any member may read. Pass includeStripe=true as an owner or admin to also get the connected Stripe account's own currency.

Query parameters

includeStripe"true" | "false"Also return the connected Stripe account's currency (owners and admins only).

Responses

200OKSuccess.→ { data: OrganizationBillingCurrency }
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl https://api.aerscheduler.com/organizations/billingCurrency \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"
put/organizations/billingCurrency

Set the billing currency

Changes the currency the organization bills in. Owner only. Refused with 409 once any invoice, account ledger entry or card charge exists, because every recorded amount is a number in the old currency.

Request body

The new currency.

currencyrequired"usd" | "cad" | "aud" | "nzd" | "gbp" | "eur"

Responses

200OKThe currency after the change.→ { data: OrganizationBillingCurrency }
400Bad RequestNot one of the supported currencies.
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenOnly the organization owner can change this.
409The organization has already billed in its current currency.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl -X PUT https://api.aerscheduler.com/organizations/billingCurrency \
  -H "Authorization: Bearer $AERSCHEDULER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"currency":"usd"}'
post/organizations/cancelDeletion

Cancel a scheduled organization deletion

Clears the 30-day countdown. Requires the admin role (owners hold admin).

Responses

200OKThe organization with the countdown cleared.→ { data: object }
400Bad RequestNo deletion is currently scheduled.
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl -X POST https://api.aerscheduler.com/organizations/cancelDeletion \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"
get/organizations/guests

List guests

Non-members who have appeared on bookings.

Query parameters

limitintegerRows to return, 1,1000. Defaults to 1000; a larger value is clamped rather than rejected.
offsetintegerRows to skip, for paging. Defaults to 0.
sortstringField 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

200OKThe guests.→ { data: User[] }
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl https://api.aerscheduler.com/organizations/guests \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"
post/organizations/invite

Invite someone

Emails an invitation with the roles they will get on acceptance. At least one role must be true. Joining uses the invitation up: somebody who leaves and comes back joins like anybody else. Requires the admin role.

Request body

Who to invite and as what.

emailrequiredstring
adminboolean
instructorboolean
studentboolean
renterboolean
technicianboolean
dispatcherboolean
orgUserGroupIdsinteger[]

Responses

204No ContentSuccess. No body.
400Bad RequestNo role chosen, already a member, or a group that is not this organization's.
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl -X POST https://api.aerscheduler.com/organizations/invite \
  -H "Authorization: Bearer $AERSCHEDULER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"email":"you@yourschool.com"}'
get/organizations/ledger

Get 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

200OKSuccess.→ { data: OrganizationLedgerSettings }
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl https://api.aerscheduler.com/organizations/ledger \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"
patch/organizations/ledger

Set 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.

enabledboolean
topUpCardFeePercentinteger
topUpCardFeeFlatCentsinteger
lateFeePercentintegerWhole percent of the amount owing. 0 or null = off.
lateFeeFlatCentsinteger
lateFeeGraceDaysintegerDays owing before a late fee posts. Null = 30. 0 = first eligible sweep.

Responses

200OKUpdated settings.→ { data: OrganizationLedgerSettings }
400Bad RequestBody failed validation.
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenOnly the organization owner can change this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl -X PATCH https://api.aerscheduler.com/organizations/ledger \
  -H "Authorization: Bearer $AERSCHEDULER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"enabled":true,"topUpCardFeePercent":1}'
get/organizations/ratings

List ratings

The certificates and ratings your organization teaches.

Query parameters

limitintegerRows to return, 1,1000. Defaults to 1000; a larger value is clamped rather than rejected.
offsetintegerRows to skip, for paging. Defaults to 0.
sortstringField 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

200OKSuccess.→ { data: object[] }
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl https://api.aerscheduler.com/organizations/ratings \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"
post/organizations/ratings

Create a rating

Requires the admin role.

Request body

The rating.

namerequiredstring
anyInstructorCanTeachrequiredboolean
defaultInstructorRaterequiredintegerHourly rate in cents.

Responses

200OKSuccess.→ { data: object }
400Bad RequestValidation failed.
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
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}'
get/organizations/reservationTypeColors

Reservation type colors

The organization's own colors for reservation types on the schedule, readable by every member. Null means every type uses its default. Set them with PATCH /organizations (admins).

Responses

200OKSuccess.→ { data: object | null }
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl https://api.aerscheduler.com/organizations/reservationTypeColors \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"
get/organizations/salesTax

Get sales tax settings

The organization's sales tax rates, archived ones included, and which categories of invoice line each rate taxes. Administrators. Nothing is taxed until a rate exists and a category points at it (or a person ticks a line). Close-out bills for flights are not taxed.

Responses

200OKSuccess.→ { data: SalesTaxSettings }
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl https://api.aerscheduler.com/organizations/salesTax \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"
post/joinRequests/{id}/accept

Accept a join request

Requires the admin role.

Path parameters

idrequiredintegerThe join request id.

Responses

200OKSuccess.→ { data: object }
204No ContentSuccess. No body.
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl -X POST https://api.aerscheduler.com/joinRequests/:id/accept \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"
post/joinRequests/{id}/decline

Decline a join request

Requires the admin role.

Path parameters

idrequiredintegerThe join request id.

Responses

200OKSuccess.→ { data: object }
204No ContentSuccess. No body.
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl -X POST https://api.aerscheduler.com/joinRequests/:id/decline \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"
post/organizations/leave/{orgId}

Leave an organization

Removes yourself. The last owner cannot leave. An aircraft owner from outside the organization hands its record of them back instead (their aircraft, jobs and bills stay with the organization), and their saved payment methods and autopay are removed from it.

Path parameters

orgIdrequiredintegerThe organization to leave.

Responses

200OKSuccess.→ { data: object }
204No ContentSuccess. No body.
400Bad RequestYou cannot leave , you are the last owner or administrator.
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl -X POST https://api.aerscheduler.com/organizations/leave/:orgId \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"
get/organizations/ledger/accounts

List member account balances

Organization-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

qstringFree-text filter. Matches the fields a person would search on.
statusstringComma-separated balance buckets: owing (negative), credit (positive), zero.
limitintegerRows to return, 1,1000. Defaults to 1000; a larger value is clamped rather than rejected.
offsetintegerRows to skip, for paging. Defaults to 0.
sortstringField 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

200OKPaged accounts plus org-wide totals.→ { data: LedgerAccount[] }
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenAuthenticated, but not an administrator.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl https://api.aerscheduler.com/organizations/ledger/accounts \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"
get/organizations/ledger/blocks

List prepaid blocks

The blocks this organization sells (pay a price, get more credit on the account ledger). Members get the active ones; owners and admins may pass includeArchived=true and get purchase counts.

Query parameters

includeArchived"true" | "false"Owners and admins: include archived blocks.
limitintegerRows to return, 1,1000. Defaults to 1000; a larger value is clamped rather than rejected.
offsetintegerRows to skip, for paging. Defaults to 0.
sortstringField 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

200OKSuccess.→ { data: LedgerBlock[] }
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl https://api.aerscheduler.com/organizations/ledger/blocks \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"
post/organizations/ledger/blocks

Create a prepaid block

Adds a block members can buy from Add funds and the desk can sell. Admin only. Requires Account ledger mode.

Request body

The block.

namerequiredstring
descriptionstring | null
priceCentsrequiredintegerWhat the member pays.
creditCentsrequiredintegerWhat lands on the balance; at least priceCents, at most 100000000.
activeboolean

Responses

201CreatedSuccess.→ { data: LedgerBlock }
400Bad RequestA missing name, or amounts that do not work (credit below price, price under 1.00).
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
409The organization is not in Account ledger mode.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl -X POST https://api.aerscheduler.com/organizations/ledger/blocks \
  -H "Authorization: Bearer $AERSCHEDULER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"…","priceCents":1,"creditCents":1}'
patch/organizations/ratings/{ratingId}

Update a rating

Requires the admin role.

Path parameters

ratingIdrequiredintegerThe rating id.

Request body

Fields to change.

namestring

Responses

200OKSuccess.→ { data: object }
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl -X PATCH https://api.aerscheduler.com/organizations/ratings/:ratingId \
  -H "Authorization: Bearer $AERSCHEDULER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"…"}'
delete/organizations/ratings/{ratingId}

Delete a rating

Requires the admin role.

Path parameters

ratingIdrequiredintegerThe rating id.

Responses

204No ContentSuccess. No body.
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl -X DELETE https://api.aerscheduler.com/organizations/ratings/:ratingId \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"
post/organizations/removeUser/{userId}

Remove a member

Removes someone from your organization. Requires the admin role.

Path parameters

userIdrequiredintegerThe user to remove.

Responses

204No ContentSuccess. No body.
400Bad RequestThey cannot be removed , the last owner or administrator, for instance.
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl -X POST https://api.aerscheduler.com/organizations/removeUser/:userId \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"
post/organizations/salesTax/rates

Add a sales tax rate

Owners and admins. Adding a rate taxes nothing by itself: point a category at it with PUT /organizations/salesTax/rules.

Request body

The rate.

namerequiredstringPrinted on invoices, e.g. Idaho sales tax.
ratePpmrequiredintegerParts per million of the amount taxed: 60000 is 6%, 81875 is 8.1875%.
countrystringWhere the tax is owed, as an ISO 3166-1 alpha-2 code. Defaults to US.
jurisdictionstringOptional. In the US, a state (code or name, stored as the code); anything else is refused. Abroad, a region as you want it printed, up to 40 characters, never read as a US state.

Responses

201CreatedThe new rate's id.→ { data: object }
400Bad RequestName or percentage failed validation.
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenOnly the organization owner can change sales tax.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl -X POST https://api.aerscheduler.com/organizations/salesTax/rates \
  -H "Authorization: Bearer $AERSCHEDULER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"…","ratePpm":1}'
put/organizations/salesTax/rules

Set which lines are taxed

Owners and admins. Replaces the whole table in one save: { rules: { part: 3, supply: null } } taxes parts at rate 3 and nothing else. Categories: labor, part, supply, outside_service, freight, fee (the organization's service fee line is a fee), rental, instruction, other.

Request body

The rules.

rulesrequiredobject

Responses

200OKSuccess.→ { data: object }
400Bad RequestAn unknown category, or a rate that does not exist here or is archived.
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenOnly the organization owner can change sales tax.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl -X PUT https://api.aerscheduler.com/organizations/salesTax/rules \
  -H "Authorization: Bearer $AERSCHEDULER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"rules":{}}'
patch/organizations/ledger/blocks/{blockId}

Change a prepaid block

Edit any of name, description, priceCents, creditCents, active, sortOrder. Past purchases keep their own figures. Setting active true also brings an archived block back. Admin only.

Path parameters

blockIdrequiredintegerThe block id.

Request body

Any subset.

namestring
descriptionstring | null
priceCentsinteger
creditCentsinteger
activeboolean
sortOrderinteger

Responses

200OKSuccess.→ { data: LedgerBlock }
400Bad RequestAmounts that do not work.
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
404Not FoundNo such block in this organization.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl -X PATCH https://api.aerscheduler.com/organizations/ledger/blocks/:blockId \
  -H "Authorization: Bearer $AERSCHEDULER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"…","description":"…"}'
delete/organizations/ledger/blocks/{blockId}

Archive a prepaid block

Hides the block from members. Blocks are never deleted, so purchase history keeps its name. Admin only.

Path parameters

blockIdrequiredintegerThe block id.

Responses

200OKSuccess.→ { data: LedgerBlock }
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
404Not FoundNo such block in this organization.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl -X DELETE https://api.aerscheduler.com/organizations/ledger/blocks/:blockId \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"
patch/organizations/salesTax/rates/{rateId}

Change a sales tax rate

Owners and admins. Rename freely. The percentage, country and state change only while no invoice line has been charged at the rate; after that, archive it and add the new rate, so old invoices keep saying what they charged and where it is owed.

Path parameters

rateIdrequiredintegerThe rate id.

Request body

Any subset.

namestring
ratePpminteger
countrystring
jurisdictionstring | null

Responses

200OKSuccess.→ { data: object }
400Bad RequestFailed validation, or the rate is already on invoices and only its name can change.
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenOnly the organization owner can change sales tax.
404Not FoundNo such rate at this organization.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl -X PATCH https://api.aerscheduler.com/organizations/salesTax/rates/:rateId \
  -H "Authorization: Bearer $AERSCHEDULER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"…","ratePpm":1}'
post/organizations/salesTax/rates/{rateId}/archive

Archive a sales tax rate

Owners and admins. Stops the rate applying to new invoices, and removes it from every category that used it, so those categories stop being taxed. Invoices already raised keep the rate they were charged.

Path parameters

rateIdrequiredintegerThe rate id.

Responses

200OKSuccess.→ { data: object }
401UnauthorizedNo token, an expired token, a malformed one, or a session token naming a membership that is no longer yours ("Your session is out of date"). Sign in again.
403ForbiddenOnly the organization owner can change sales tax.
404Not FoundNo such rate at this organization.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl -X POST https://api.aerscheduler.com/organizations/salesTax/rates/:rateId/archive \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"