For the complete documentation index, see llms.txt. This page is also available as Markdown.

Mass & Balance

Role names and user_group_id values are listed in User groups.

Aircraft Mass & Balance profiles and per-flight loadsheets. All endpoints are JSON and company-scoped: the aircraft or flight must belong to the authenticated user's company_id, otherwise 404.

The server always recalculates a loadsheet itself; results sent by a client are never trusted.

Units and conventions

  • A profile uses one unit system: mass_unit (kg | lb) and arm_unit (m | mm | cm | in). Values are never converted.

  • Fuel is given as a volume in the station's fuel_unit (l | usgal | impgal) and converted to mass with fuel_density (profile mass unit per volume unit).

  • Envelope limits are [mass, arm] points. The limit is linear between points and constant below the first / above the last point.

Access control

Endpoint
Allowed

aircraft (GET)

Any company user. ACL grants for groups 180, 240, 245, 250

aircraft_save, aircraft_delete

Any manager of the aircraft (Aircraft.ManagerIds) or user_group_id in 1, 100, 105, 110, 150, 300 (Company Administrators, Operations Managers, Compliance & Safety Managers, Chief Pilots and Mechanics) → otherwise 403

loadsheet (GET)

Same rule as GET /flights/view: user_group_id 171–249 (Captains, Pilots, Student Pilots and Cabin Crew) only when creator, PIC, SIC, supervisor or a manager of the aircraft → otherwise 403

loadsheet_save, loadsheet_delete

Creator, PIC, SIC, supervisor, a manager of the aircraft, or user_group_id in 1, 100, 105, 110, 145, 150, 170 (Company Administrators, Operations Managers, Compliance & Safety Managers, Flight Dispatchers, Chief Pilots and Flight Instructors). Never on CANCELED / DELETED flights → 403

loadsheet_sign

PIC or supervisor (creator when the flight has no PIC). Requires the user's password

Groups 240 (Cabin Crew), 245 (Specialist) and 250 (Auditor) have ACL access to the two read endpoints only.

Get aircraft profile

GET /mass_balance/aircraft/{aircraftId}.json

profile is null when the aircraft has none.

Save aircraft profile

POST /mass_balance/aircraft_save/{aircraftId}.json

Form-encoded. Creates or fully replaces the profile.

Parameter
Type
Description

profile

string (JSON)

Required. mass_unit, arm_unit, basic_empty_mass, basic_empty_arm, max_takeoff_mass, optional max_landing_mass, max_zero_fuel_mass, max_ramp_mass, stations[], envelope, optional landing_envelope

weighed_on

string

YYYY-MM-DD or empty

weighing_reference

string

Max 100 characters

notes

string

template_key

string

Informational

Station fields: key ([A-Za-z0-9_-], unique), name, type (seat | baggage | fuel | other), arm, max_mass; fuel stations also fuel_unit, fuel_density (required, > 0), fuel_capacity. Maximum 40 stations and 20 points per envelope limit.

Validation failure returns result: false with field errors:

Codes: REQUIRED, REQUIRED_POSITIVE, POSITIVE, NOT_BELOW_MAX_TAKEOFF, TOO_MANY, DUPLICATE, INVALID (for an envelope: a forward limit at or behind the aft limit at some point).

Delete aircraft profile

POST /mass_balance/aircraft_delete/{aircraftId}.json

Loadsheets already saved keep their own profile copy.

Get flight loadsheet

GET /mass_balance/loadsheet/{flightId}.json

  • stale: the flight's aircraft or its profile changed after the loadsheet was calculated.

  • signed.valid: the stored signature still matches the stored numbers.

Issue codes

STATION_OVER_MAX, FUEL_OVER_CAPACITY, BURN_EXCEEDS_FUEL, NEGATIVE_INPUT, UNKNOWN_STATION, ZERO_FUEL_OVER_MAX, RAMP_OVER_MAX, TAKEOFF_OVER_MAX, LANDING_OVER_MAX, CG_FORWARD, CG_AFT, PROFILE_INCOMPLETE. Issues carry station, condition (zero_fuel | takeoff | landing), value and limit where relevant. The landing CG limits are the landing envelope clipped to the normal envelope (the most restrictive of the two at that mass).

Save flight loadsheet

POST /mass_balance/loadsheet_save/{flightId}.json

Parameter
Type
Description

inputs

string (JSON)

{ "loads": { stationKey: mass }, "fuel": { stationKey: { "takeoff": vol, "taxi": vol, "burn": vol } }, "labels": { stationKey: text } }

Calculated with the aircraft's current profile (400 if the flight has no aircraft or the aircraft has no profile). Unknown station keys are dropped. Saving different numbers clears any signature; saving identical numbers keeps it. Returns { result, message, loadsheet }.

Sign flight loadsheet

POST /mass_balance/loadsheet_sign/{flightId}.json

Parameter
Type
Description

pass

string

Required. The signing user's password

Refused with 400 when there is no saved loadsheet, the aircraft or profile changed since it was saved, the loadsheet is outside limits, or the password is wrong. Returns { result, message, loadsheet }.

Delete flight loadsheet

POST /mass_balance/loadsheet_delete/{flightId}.json

Last updated