LFS-Ayats provides a comprehensive REST API for accessing telemetry data, managing sessions, and performing real-time data analysis. The API is built with FastAPI and provides automatic interactive documentation.
uvicorn src.api.main:app --reload --host 0.0.0.0 --port 8000
uvicorn src.api.main:app --host 0.0.0.0 --port 8000 --workers 4
Once the server is running, visit:
GET /api/v1/health
Returns API health status and version.
Response:
{
"status": "healthy",
"version": "0.1.0"
}
GET /api/v1/status
Returns comprehensive system status including connection state and statistics.
Response:
{
"connected": false,
"uptime": 123.45,
"sessions_count": 10,
"laps_count": 50,
"last_telemetry": "2025-01-10T12:00:00"
}
POST /api/v1/connect
Content-Type: application/json
{
"host": "127.0.0.1",
"port": 29999,
"app_name": "LFS-Ayats"
}
POST /api/v1/disconnect
GET /api/v1/sessions?circuit=Blackwood&vehicle=XFG&limit=10&offset=0
Query Parameters:
circuit (optional): Filter by circuit namevehicle (optional): Filter by vehicle namedriver (optional): Filter by driver namedate_from (optional): Filter from date (ISO 8601)date_to (optional): Filter to date (ISO 8601)limit (optional, default=50): Maximum results (1-100)offset (optional, default=0): Pagination offsetResponse:
{
"total": 10,
"items": [
{
"id": 1,
"circuit": "Blackwood GP",
"vehicle": "XF GTI",
"driver": "TestDriver",
"datetime": "2025-01-10T12:00:00",
"duration": 300,
"total_laps": 5,
"best_lap_time": 85.5
}
],
"page": 0,
"page_size": 50
}
GET /api/v1/sessions/{session_id}
POST /api/v1/sessions
Content-Type: application/json
{
"circuit": "Blackwood GP",
"vehicle": "XF GTI",
"driver": "TestDriver",
"datetime": "2025-01-10T12:00:00"
}
DELETE /api/v1/sessions/{session_id}
GET /api/v1/{session_id}/laps
GET /api/v1/{lap_id}
Response:
{
"id": 1,
"session_id": 1,
"lap_number": 3,
"lap_time": 85.5,
"sector1_time": 28.5,
"sector2_time": 27.0,
"sector3_time": 30.0,
"valid": true
}
GET /api/v1/{lap_id}/telemetry?sample_rate=10
Query Parameters:
sample_rate (optional): Downsampling rate in Hz (1-100)Response:
{
"lap_id": 1,
"points": [
{
"timestamp": 123.45,
"speed": 180.5,
"rpm": 7500,
"gear": 4,
"throttle": 0.8,
"brake": 0.0,
"steering": 0.1,
"position_x": 100.0,
"position_y": 200.0,
"position_z": 10.0
}
],
"total_points": 1000
}
GET /api/v1/compare?lap_ids=1&lap_ids=2&lap_ids=3
Response:
{
"laps": [...],
"fastest_lap_id": 1,
"time_deltas": {
"1": {"total": 0, "sector1": 0, "sector2": 0, "sector3": 0},
"2": {"total": 0.5, "sector1": 0.2, "sector2": 0.2, "sector3": 0.1}
},
"suggestions": [
"Analyze braking points in slower sectors",
"Compare throttle application through corners"
]
}
ws://localhost:8000/api/v1/telemetry/live
WebSocket Protocol:
Message Format:
{
"type": "telemetry",
"data": {
"timestamp": 123.45,
"speed": 180.5,
"rpm": 7500,
"gear": 4,
"throttle": 0.8,
"brake": 0.0,
"position_x": 100.0,
"position_y": 200.0,
"position_z": 10.0
},
"session_id": 1
}
GET /api/v1/telemetry/range?session_id=1&start_time=0&end_time=100
GET /api/v1/analysis/sectors/{lap_id}
Response:
{
"lap_id": 1,
"sectors": [
{
"sector_number": 1,
"time": 28.5,
"delta": null,
"speed_avg": 120.0,
"speed_max": 180.0
}
],
"total_time": 85.5,
"theoretical_best": 84.8
}
GET /api/v1/analysis/anomalies/{session_id}
GET /api/v1/analysis/predictions/{session_id}
POST /api/v1/analysis/compare
Content-Type: application/json
{
"lap_ids": [1, 2, 3]
}
GET /api/v1/stats/best-laps?circuit=Blackwood&vehicle=XFG&limit=10
GET /api/v1/stats/driver/TestDriver
Response:
{
"driver_name": "TestDriver",
"total_sessions": 10,
"total_laps": 50,
"best_lap_time": 85.5,
"avg_lap_time": 87.2,
"total_distance": 250.5
}
GET /api/v1/stats/circuit/Blackwood
GET /api/v1/export/csv/{lap_id}
Downloads a CSV file with lap telemetry data.
GET /api/v1/export/json/{lap_id}
Downloads a JSON file with lap telemetry data.
GET /api/v1/export/session/{session_id}?format=csv
Query Parameters:
format: Export format (csv, json, excel)GET /api/v1/config
PUT /api/v1/config
Content-Type: application/json
{
"connection": {
"host": "127.0.0.1",
"port": 29999,
"app_name": "LFS-Ayats"
},
"telemetry_rate": 10,
"auto_export": false,
"export_format": "csv"
}
GET /api/v1/config/circuits
GET /api/v1/config/vehicles
The API uses standard HTTP status codes:
200 OK: Successful request201 Created: Resource created successfully204 No Content: Successful deletion400 Bad Request: Invalid parameters404 Not Found: Resource not found422 Unprocessable Entity: Validation error500 Internal Server Error: Server error503 Service Unavailable: Connection errorError Response Format:
{
"detail": "Session with ID 999 not found"
}
The API is configured with permissive CORS settings for development:
Access-Control-Allow-Origin: *Access-Control-Allow-Methods: *Access-Control-Allow-Headers: *For production, configure specific origins in src/api/middleware.py.
Currently no rate limiting is implemented. For production deployments, consider adding rate limiting middleware.
The API currently has no authentication. For production deployments, consider adding:
See examples/api_client_example.py for a complete example client demonstrating: