Resources
Aircraft, simulators, and rooms.
17 endpoints · base URL https://api.aerscheduler.com
/resourcesList resources
Every bookable resource , aircraft, simulators, and rooms together. Use /resources/aircraft, /simulators, or /rooms for one kind.
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 resources.→ { data: Resource[] } |
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/resources \
-H "Authorization: Bearer $AERSCHEDULER_KEY"/resourcesCreate 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.
namerequired | string | |
locationrequired | object | |
typerequired | object |
Responses
201 | Created | The resource that was created.→ { data: Resource } |
400 | Bad Request | The body failed validation. message says which field. |
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/resources \
-H "Authorization: Bearer $AERSCHEDULER_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"…","location":{},"type":{}}'/resources/{id}Get a resource
Fetches one resource by id.
Path parameters
idrequired | integer | The resource id. |
Responses
200 | OK | Success.→ { data: Resource } |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
404 | Not Found | No such resource, or it belongs to another organization. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl https://api.aerscheduler.com/resources/:id \
-H "Authorization: Bearer $AERSCHEDULER_KEY"/resources/{id}Update a resource
Changes the fields you send and leaves the rest alone. Requires the admin role.
Path parameters
idrequired | integer | The 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.
name | string | |
location | object | |
type | object |
Responses
200 | OK | The updated resource.→ { data: Resource } |
400 | Bad Request | The body failed validation. |
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/resources/:id \
-H "Authorization: Bearer $AERSCHEDULER_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"…","location":{}}'/resources/{id}Delete a resource
Removes the resource. Requires the admin role.
Path parameters
idrequired | integer | The resource id. |
Responses
204 | No Content | Success. No body. |
400 | Bad Request | The resource could not be deleted , usually because something still references it. |
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/resources/:id \
-H "Authorization: Bearer $AERSCHEDULER_KEY"/resources/aircraftList aircraft
Only resources whose type is an aircraft.
Query parameters
q | string | Free-text filter. Matches the fields a person would search on. |
grounded | boolean | Filter on grounded state. |
locationId | string | Comma-separated location ids. |
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 aircraft.→ { data: Resource[] } |
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/resources/aircraft \
-H "Authorization: Bearer $AERSCHEDULER_KEY"/resources/roomsList rooms
Only resources whose type is a room.
Query parameters
q | string | Free-text filter. Matches the fields a person would search on. |
locationId | string | Comma-separated location ids. |
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 rooms.→ { data: Resource[] } |
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/resources/rooms \
-H "Authorization: Bearer $AERSCHEDULER_KEY"/resources/simulatorsList simulators
Only resources whose type is a simulator.
Query parameters
q | string | Free-text filter. Matches the fields a person would search on. |
grounded | boolean | Filter on grounded state. |
locationId | string | Comma-separated location ids. |
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 simulators.→ { data: Resource[] } |
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/resources/simulators \
-H "Authorization: Bearer $AERSCHEDULER_KEY"/resources/{id}/approveApprove a member for a resource
Checks someone out on an aircraft. Requires the admin role.
Path parameters
idrequired | integer | The resource id. |
Request body
Who to approve.
userIdrequired | integer |
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. |
404 | Not Found | That person is not in your organization. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl -X POST https://api.aerscheduler.com/resources/:id/approve \
-H "Authorization: Bearer $AERSCHEDULER_KEY" \
-H "Content-Type: application/json" \
-d '{"userId":1}'/resources/{id}/approvedUsersList 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
idrequired | integer | The resource id. |
Query parameters
student | boolean | Set true to include members holding the student role. Combines as OR with renter. |
renter | boolean | Set true to include members holding the renter role. Combines as OR with student. |
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 approved members.→ { data: OrganizationUser[] } |
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/resources/:id/approvedUsers \
-H "Authorization: Bearer $AERSCHEDULER_KEY"/resources/{id}/filesList 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
idrequired | integer | The resource id. |
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 papers.→ { data: ResourceFile[] } |
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/resources/:id/files \
-H "Authorization: Bearer $AERSCHEDULER_KEY"/resources/{id}/filesAdd 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
idrequired | integer | The 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. |
label | string | |
fileNamesrequired | string[] | Original file names. The server mints the S3 keys. |
Responses
201 | Created | The papers. signedUrlData is a list of S3 presigned POSTs in the same order as the created rows.→ { data: ResourceFile[] } |
400 | Bad Request | Validation failed. |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Not allowed to upload, or this is the public demo. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl -X POST https://api.aerscheduler.com/resources/:id/files \
-H "Authorization: Bearer $AERSCHEDULER_KEY" \
-H "Content-Type: application/json" \
-d '{"category":"poh","fileNames":[]}'/resources/{id}/fuelRecord fuel on board
Updates fuel for one or both engines.
Path parameters
idrequired | integer | The resource id. |
Request body
Fuel figures, in the aircraft's configured units.
fuelEngine1 | integer | |
fuelEngine2 | integer |
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/resources/:id/fuel \
-H "Authorization: Bearer $AERSCHEDULER_KEY" \
-H "Content-Type: application/json" \
-d '{"fuelEngine1":1,"fuelEngine2":1}'/resources/{id}/groundingGround 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
idrequired | integer | The resource id. |
Request body
Which way, and why.
groundedrequired | boolean | true takes it off the line, false returns it to service. |
reason | string | Required when grounding. Ignored when returning to service. |
Responses
200 | OK | Success.→ { data: Resource } |
400 | Bad Request | grounded missing, or grounding without a reason. |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Not an admin or technician, or the resource belongs to another organization. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl -X PATCH https://api.aerscheduler.com/resources/:id/grounding \
-H "Authorization: Bearer $AERSCHEDULER_KEY" \
-H "Content-Type: application/json" \
-d '{"grounded":true}'/resources/{id}/unapproveWithdraw a member's approval
Requires the admin role.
Path parameters
idrequired | integer | The resource id. |
Request body
Whose approval to withdraw.
userIdrequired | integer |
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. |
404 | Not Found | That person is not in your organization. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl -X POST https://api.aerscheduler.com/resources/:id/unapprove \
-H "Authorization: Bearer $AERSCHEDULER_KEY" \
-H "Content-Type: application/json" \
-d '{"userId":1}'/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
idrequired | integer | The resource id. |
fileIdrequired | integer | The paper id. |
Request body
What to change.
category | "poh" | "weight_and_balance" | "insurance" | "form_337" | "logbook_scan" | "other" | |
visibility | "bookers" | "staff" | |
label | string |
Responses
200 | OK | The paper.→ { data: ResourceFile } |
401 | Unauthorized | No token, an expired token, or a malformed one. Sign in again. |
403 | Forbidden | Authenticated, but not allowed to do this. |
404 | Not Found | That file is not on this aircraft. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
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"}'/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
idrequired | integer | The resource id. |
fileIdrequired | integer | The paper 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. |
404 | Not Found | That file is not on this aircraft. |
429 | Too Many Requests | Rate limited. Retry-After says how long to wait. |
curl -X DELETE https://api.aerscheduler.com/resources/:id/files/:fileId \
-H "Authorization: Bearer $AERSCHEDULER_KEY"