Plugin API Reference
Complete API documentation for HEMS Command simulator plugins
Telemetry Submission
POST
/api/plugins/telemetryRequest Body:
{
"session_id": "string",
"user_callsign": "string",
"aircraft_type": "string",
"simulator": "X-Plane | MSFS",
"latitude": number,
"longitude": number,
"altitude_ft": number,
"heading_degrees": number,
"ground_speed_kts": number,
"indicated_airspeed_kts": number,
"vertical_speed_fpm": number,
"on_ground": boolean,
"engine_running": boolean,
"fuel_quantity_gal": number,
"timestamp": "ISO-8601"
}Response:
{
"status": "success",
"telemetry_id": "uuid"
}Rate Limit: 1 request per 2 seconds recommended
Authentication: Include user email in X-User-Email header
Quick Implementation Examples
JavaScript/Web Panel
// Fetch mission data
async function loadMission() {
const response = await fetch(
`${API_BASE}/api/plugins/mission?user_email=${USER_EMAIL}`
);
const mission = await response.json();
// Update UI
document.getElementById('missionNumber').textContent = mission.mission_number;
document.getElementById('destination').textContent = mission.destination.name;
}
// Voice-enabled dispatcher
let recognition = new webkitSpeechRecognition();
recognition.onresult = async (event) => {
const text = event.results[0][0].transcript;
const response = await fetch(`${API_BASE}/api/agents/hems_dispatcher/conversations/${conversationId}/messages`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ role: 'user', content: text })
});
const aiResponse = await response.json();
// Speak response
const utterance = new SpeechSynthesisUtterance(aiResponse.content);
speechSynthesis.speak(utterance);
};Lua (X-Plane)
-- Send telemetry
function send_telemetry()
local json = string.format([[{
"session_id": "%s",
"user_callsign": "%s",
"latitude": %.6f,
"longitude": %.6f,
"altitude_ft": %.0f,
"heading_degrees": %.1f,
"ground_speed_kts": %.1f
}]], SESSION_ID, USER_CALLSIGN, lat, lon, alt, hdg, gs)
-- HTTP POST to API_ENDPOINT/api/plugins/telemetry
end
-- Fetch nearby traffic
function get_nearby_traffic()
local url = string.format("%s/api/plugins/nearby?lat=%.6f&lon=%.6f&radius=50",
API_ENDPOINT, lat, lon)
-- HTTP GET and parse JSON
end