# API Reference ## Authentication ### POST `/api/login` Login via API (returns user info, no token). **Request Body:** ```json { "username": "admin", "password": "password123" } ``` **Success Response (200):** ```json { "error": false, "id": 1, "username": "admin", "email": "admin@example.com", "acc_lvl": 1 } ``` **Error Response (200):** ```json { "error": true, "message": "Wrong Password/Username" } ``` **Notes:** - No authentication token is generated — this endpoint only validates credentials - No session is created — API endpoints are stateless - All other API endpoints have **no authentication** — they are publicly accessible --- ## Station Data ### GET `/api/station/current` Returns all stations with their latest rainfall, water level, and siren data. **Response:** ```json [ { "stationid": "KBLG0026", "name": "Stesen Kupang", "district": "Baling", "lng": 100.7521, "lat": 5.7879, "rainfall": 1, "waterlevel": 1, "siren": 1, "rainfall_value": 12.5, "rainfall_time": "2025-11-06T14:00:00", "waterlevel_value": 3.2, "waterlevel_time": "2025-11-06T14:00:00", "siren_level": "N", "siren_time": "2025-11-06T14:00:00" } ] ``` ### GET `/api/station/rainfall` Returns latest rainfall data for rainfall-enabled stations. ### GET `/api/station/waterlevel` Returns latest water level data for waterlevel-enabled stations. ### GET `/api/station/notification` Returns today's latest notification per station. ### GET `/api/station/history` Returns notification history for the last 3 days (latest per station per day). ### GET `/api/station/siren` Returns current siren status for siren-equipped stations (last 3 days). ### GET `/api/station/siren/history` Returns siren history for the last 3 days (excluding Normal level). --- ## Alert (Push Notification) ### POST `/api/alert` Sends an FCM push notification. Called by the Python autoscript. **Request Body:** ```json { "stationid": "KBLG0026", "level": "Warning", "stationtype": 1 } ``` **Parameters:** | Field | Type | Description | |-------|------|-------------| | `stationid` | string | Station identifier | | `level` | string | Alert level: "Alert", "Warning", "Danger" | | `stationtype` | integer | 1=Rainfall, 2=Water Level, 3=Siren | **Response:** ```json { "status": 200 } ``` The `status` is the HTTP status code returned by the FCM API (200 = success). --- ## Public Web API ### GET `/stations` Returns all stations with coordinates as JSON (used by the public map). ### GET `/locale/{locale}` Switches language. Valid values: `en`, `bm`. Redirects back to previous page.