A phpVMS 7 module that adds the API surface the Stratos desktop client needs — pilot identity, reference data, and flight ops. Required by every Stratos integration; everything else (logbook, screenshots, future plugins) builds on top.
📖 API reference: docs.skyvexsoftware.com/api-reference/introduction — full OpenAPI spec for every endpoint this module exposes. Useful when forking, when implementing the same contract in a non-phpVMS stack, or when debugging client behaviour.
You'll need a working phpVMS 7 install.
- Download
module.zipfrom the latest release. - In your phpVMS admin: Admin → Modules → Add New Module, upload the zip.
- Back on the Modules list, enable
StratosCore. - From a shell:
php artisan module:migrate StratosCore php artisan optimize:clear
That's it — your phpVMS now exposes the Stratos API at /api/stratos. Pilots running the Stratos desktop client just point it at your VA's URL and log in.
The module mounts these endpoints under /api/stratos. All require a Bearer token (the pilot's users.api_key) except the handshake and the credentials login.
GET / handshake
POST /pilot/login credentials login
GET /pilot/verify pilot profile
GET /pilot/statistics flight hours, average landing rate, etc.
GET /data/aircraft fleet list
GET /data/airports airport directory
GET /data/announcements VA announcements feed
GET /flights/bookings pilot's current bids
GET /flights/bookings/{bid}/aircraft aircraft eligible for a bid's flight
GET /flights/search schedule search
POST /flights/start begin tracking a booked flight
POST /flights/change-aircraft reassign a bid's aircraft before departure
POST /flights/update position / phase update
POST /flights/complete file PIREP
POST /flights/cancel cancel active flight
POST /flights/unbook drop a bid
Bookings carry an aircraft_changeable flag — false when the flight has a locked SimBrief airframe, true otherwise. When changeable, GET /flights/bookings/{bid}/aircraft lists the eligible airframes (narrowed by phpVMS's native FlightService::filterSubfleets, the same logic the PIREP-create form uses) and POST /flights/change-aircraft persists the pilot's choice to bids.aircraft_id, which /flights/start then reads.
All endpoints are pure phpVMS-native: pilot rows in users, bid aircraft assignments in bids, flight history in acars (FLIGHT_PATH rows), PIREPs in pireps, custom metadata in pirep_field_values. The module owns zero tables of its own.
Every endpoint responds with application/json and permissive CORS headers (Access-Control-Allow-Origin: *), and answers OPTIONS/HEAD preflight requests directly — so a browser-based or external integration can call the API cross-origin. The Authorization and X-Stratos-Version headers are both allow-listed.
This module is the base for the wider Stratos ecosystem. Logbook, screenshots, and any custom Stratos-aware phpVMS module can:
- Import
Modules\StratosCore\Http\Middleware\StratosAuthfor the same Bearer-token auth - Reuse
Modules\StratosCore\Actions\LandingAnalysisMapperandPirepDistanceCalculationfor normalising and recomputing flight data - Add their own endpoints under different prefixes (e.g. a logbook module would mount
/api/stratos/logbook)
Declare this module as a dependency in your module.json:
{
"requires": ["skyvexsoftware/stratos-core-api"]
}If you're building a Stratos integration that doesn't fit as a phpVMS module — e.g. a custom theme widget, a dashboard plugin, or an external service — query the same endpoints the desktop client uses. The Bearer-token model is the same.
# clone + dependencies
git clone https://github.com/skyvexsoftware/stratos-core-api
cd stratos-core-api
composer install
# run the test suite
./vendor/bin/pestThe tests use Pest + Orchestra Testbench and target Laravel 10 (the version phpVMS 7 ships). Stubs at tests/stubs/ cover phpVMS-host classes so the suite runs in isolation. CI runs on PHP 8.2, 8.3, and 8.4.
For end-to-end testing against a real phpVMS install, symlink the repo into your phpVMS modules/ directory:
ln -s "$(pwd)" /path/to/phpvms/modules/StratosCore
cd /path/to/phpvms && php artisan module:enable StratosCoreAfter that any edits in this repo are live in your phpVMS install — no rebuild needed.
Tag a release with v* (e.g. v0.1.0). The release workflow builds module.zip and attaches it to the GitHub release. Operators install it via the Admin → Modules → Add New Module flow above.
This module is based in part on the smartCARS 3 phpVMS 7 API by Invernyx, Inc. (d.b.a. TFDi Design), used under the MIT License.
MIT — see LICENSE. Includes code Copyright (c) 2025 Invernyx, Inc., used under the MIT License.