Resources

Aircraft, simulators, and rooms.

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

get/resources

List resources

Every bookable resource , aircraft, simulators, and rooms together. Use /resources/aircraft, /simulators, or /rooms for one kind.

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 resources.{ data: Resource[] }
401UnauthorizedNo token, an expired token, or a malformed one. 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/resources \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"
post/resources

Create a resource

Adds a resource to your organization. Requires the admin role.

Request body

The new resource. Exactly one of type.plane, type.simulator, or type.room must be present, and location.id is required.

namerequiredstring
locationrequiredobject
typerequiredobject

Responses

201CreatedThe resource that was created.{ data: Resource }
400Bad RequestThe body failed validation. message says which field.
401UnauthorizedNo token, an expired token, or a malformed one. 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/resources \
  -H "Authorization: Bearer $AERSCHEDULER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"…","location":{},"type":{}}'
get/resources/{id}

Get a resource

Fetches one resource by id.

Path parameters

idrequiredintegerThe resource id.

Responses

200OKSuccess.{ data: Resource }
401UnauthorizedNo token, an expired token, or a malformed one. Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
404Not FoundNo such resource, or it belongs to another organization.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl https://api.aerscheduler.com/resources/:id \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"
patch/resources/{id}

Update a resource

Changes the fields you send and leaves the rest alone. Requires the admin role.

Path parameters

idrequiredintegerThe resource id.

Request body

Fields to change. type must be present even when you are only changing a top-level field, and it has to be the kind the resource already is: this cannot turn an aircraft into a room. Omitting a key leaves the stored value alone, and on most fields null does the same. Four rules break that pattern, and each one is silent, because the write answers 200 whether it changed the field, left it alone, or blanked one nobody meant to blank. On serialNumber and year, "" or null CLEARS the stored value. That is the only way back to blank once a wrong serial number has been typed in. On the pair flyingDayStartMinute and flyingDayEndMinute, null is taken literally and puts the aircraft back on the organization's hours, which changes the bookings the server will accept. Send both or neither; a half pair is rejected. On cost.dryRate, cost.wetRate and cost.overnightMinimumTenths, null is literal too, and it is not 0: a null overnight minimum goes back to inheriting the organization's figure, while 0 exempts this aircraft. groundedReason is not independent of grounded. Any aircraft or simulator update that does not carry grounded: true writes the reason back to null, so send the two together. One value is not merely surprising but rejected: cost.billByHobbsTime is not nullable, and sending null fails the whole request with a 400. Omit the key to leave it alone. On the free-text fields (tailNumber, make, model) an empty string is stored AS an empty string and does not clear them.

namestring
locationobject
typeobject

Responses

200OKThe updated resource.{ data: Resource }
400Bad RequestThe body failed validation.
401UnauthorizedNo token, an expired token, or a malformed one. 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/resources/:id \
  -H "Authorization: Bearer $AERSCHEDULER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"…","location":{}}'
delete/resources/{id}

Delete a resource

Removes the resource. Requires the admin role.

Path parameters

idrequiredintegerThe resource id.

Responses

204No ContentSuccess. No body.
400Bad RequestThe resource could not be deleted , usually because something still references it.
401UnauthorizedNo token, an expired token, or a malformed one. 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/resources/:id \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"
get/resources/aircraft

List aircraft

Only resources whose type is an aircraft.

Query parameters

qstringFree-text filter. Matches the fields a person would search on.
groundedbooleanFilter on grounded state.
locationIdstringComma-separated location ids.
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 aircraft.{ data: Resource[] }
401UnauthorizedNo token, an expired token, or a malformed one. 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/resources/aircraft \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"
get/resources/rooms

List rooms

Only resources whose type is a room.

Query parameters

qstringFree-text filter. Matches the fields a person would search on.
locationIdstringComma-separated location ids.
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 rooms.{ data: Resource[] }
401UnauthorizedNo token, an expired token, or a malformed one. 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/resources/rooms \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"
get/resources/simulators

List simulators

Only resources whose type is a simulator.

Query parameters

qstringFree-text filter. Matches the fields a person would search on.
groundedbooleanFilter on grounded state.
locationIdstringComma-separated location ids.
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 simulators.{ data: Resource[] }
401UnauthorizedNo token, an expired token, or a malformed one. 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/resources/simulators \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"
post/resources/{id}/approve

Approve a member for a resource

Checks someone out on an aircraft. Requires the admin role.

Path parameters

idrequiredintegerThe resource id.

Request body

Who to approve.

userIdrequiredinteger

Responses

200OKSuccess.{ data: object }
401UnauthorizedNo token, an expired token, or a malformed one. Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
404Not FoundThat person is not in your organization.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl -X POST https://api.aerscheduler.com/resources/:id/approve \
  -H "Authorization: Bearer $AERSCHEDULER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"userId":1}'
get/resources/{id}/approvedUsers

List who is approved on a resource

The members checked out to book this aircraft , the read in the opposite direction to GET /users/{userId}/approvedResources. Use this rather than asking every member what they are approved for.

Path parameters

idrequiredintegerThe resource id.

Query parameters

studentbooleanSet true to include members holding the student role. Combines as OR with renter.
renterbooleanSet true to include members holding the renter role. Combines as OR with student.
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 approved members.{ data: OrganizationUser[] }
401UnauthorizedNo token, an expired token, or a malformed one. 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/resources/:id/approvedUsers \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"
get/resources/{id}/files

List papers on an aircraft

POH, weight and balance, and other files on the tail. Any org member may read bookers files. Staff, dispatchers, and technicians also see staff files. Soft-deleted rows are omitted.

Path parameters

idrequiredintegerThe resource id.

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 papers.{ data: ResourceFile[] }
401UnauthorizedNo token, an expired token, or a malformed one. 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/resources/:id/files \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"
post/resources/{id}/files

Add papers to an aircraft

Send fileNames (jpg, jpeg, png, heic, heif, or pdf, up to five in that category). The server writes the S3 keys and returns signedUrlData for the client to POST each file to. fileUrls in the body is refused. Requires owner, admin, dispatcher, or technician. Uploading is turned off in the public demo.

Path parameters

idrequiredintegerThe resource id.

Request body

The papers.

categoryrequired"poh" | "weight_and_balance" | "insurance" | "form_337" | "logbook_scan" | "other"
visibility"bookers" | "staff"Defaults: POH and weight and balance are bookers; the rest are staff.
labelstring
fileNamesrequiredstring[]Original file names. The server mints the S3 keys.

Responses

201CreatedThe papers. signedUrlData is a list of S3 presigned POSTs in the same order as the created rows.{ data: ResourceFile[] }
400Bad RequestValidation failed.
401UnauthorizedNo token, an expired token, or a malformed one. Sign in again.
403ForbiddenNot allowed to upload, or this is the public demo.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl -X POST https://api.aerscheduler.com/resources/:id/files \
  -H "Authorization: Bearer $AERSCHEDULER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"category":"poh","fileNames":[]}'
post/resources/{id}/fuel

Record fuel on board

Updates fuel for one or both engines.

Path parameters

idrequiredintegerThe resource id.

Request body

Fuel figures, in the aircraft's configured units.

fuelEngine1integer
fuelEngine2integer

Responses

200OKSuccess.{ data: object }
400Bad RequestValidation failed.
401UnauthorizedNo token, an expired token, or a malformed one. 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/resources/:id/fuel \
  -H "Authorization: Bearer $AERSCHEDULER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"fuelEngine1":1,"fuelEngine2":1}'
patch/resources/{id}/grounding

Ground an aircraft or return it to service

Takes a tail off the line, or puts it back. Requires the admin or technician role.

Its own endpoint rather than a field on PATCH /resources/{id}, which is admin-only: a technician signs maintenance off and has to be able to release the aircraft afterwards.

Grounding requires a reason, which is shown wherever the aircraft appears. The reason you send is treated as a PERSON'S decision and is never cleared automatically. Holds the system applies itself (an inspection coming due, an open grounding squawk) are released on their own once nothing is outstanding; yours are not, and stay until someone sends grounded: false here.

Path parameters

idrequiredintegerThe resource id.

Request body

Which way, and why.

groundedrequiredbooleantrue takes it off the line, false returns it to service.
reasonstringRequired when grounding. Ignored when returning to service.

Responses

200OKSuccess.{ data: Resource }
400Bad Requestgrounded missing, or grounding without a reason.
401UnauthorizedNo token, an expired token, or a malformed one. Sign in again.
403ForbiddenNot an admin or technician, or the resource belongs to another organization.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl -X PATCH https://api.aerscheduler.com/resources/:id/grounding \
  -H "Authorization: Bearer $AERSCHEDULER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"grounded":true}'
post/resources/{id}/unapprove

Withdraw a member's approval

Requires the admin role.

Path parameters

idrequiredintegerThe resource id.

Request body

Whose approval to withdraw.

userIdrequiredinteger

Responses

200OKSuccess.{ data: object }
401UnauthorizedNo token, an expired token, or a malformed one. Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
404Not FoundThat person is not in your organization.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl -X POST https://api.aerscheduler.com/resources/:id/unapprove \
  -H "Authorization: Bearer $AERSCHEDULER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"userId":1}'
patch/resources/{id}/files/{fileId}

Rename or recategorize a paper

Changes label, visibility, or category. Does not replace the bytes. Requires owner, admin, dispatcher, or technician.

Path parameters

idrequiredintegerThe resource id.
fileIdrequiredintegerThe paper id.

Request body

What to change.

category"poh" | "weight_and_balance" | "insurance" | "form_337" | "logbook_scan" | "other"
visibility"bookers" | "staff"
labelstring

Responses

200OKThe paper.{ data: ResourceFile }
401UnauthorizedNo token, an expired token, or a malformed one. Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
404Not FoundThat file is not on this aircraft.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl -X PATCH https://api.aerscheduler.com/resources/:id/files/:fileId \
  -H "Authorization: Bearer $AERSCHEDULER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"category":"poh","visibility":"bookers"}'
delete/resources/{id}/files/{fileId}

Remove a paper from an aircraft

Soft-deletes the row and drops the S3 object. A stale W&B should come down. Requires owner, admin, dispatcher, or technician.

Path parameters

idrequiredintegerThe resource id.
fileIdrequiredintegerThe paper id.

Responses

204No ContentSuccess. No body.
401UnauthorizedNo token, an expired token, or a malformed one. Sign in again.
403ForbiddenAuthenticated, but not allowed to do this.
404Not FoundThat file is not on this aircraft.
429Too Many RequestsRate limited. Retry-After says how long to wait.
Example request
curl -X DELETE https://api.aerscheduler.com/resources/:id/files/:fileId \
  -H "Authorization: Bearer $AERSCHEDULER_KEY"