Web UI and API reference

May 11, 2026 ยท View on GitHub

The control server runs on port 80.

http://<device-ip>/

Web UI pages

RoutePurpose
/Dashboard: stream status, HTTP player, quick actions, Wi-Fi summary
/wifiWi-Fi status, scan, credentials, reconnect/forget, TX power
/audioAudio status, audio profile, HPF, convert shift, stream counters
/systemTime, scheduler, heap/stack, logs, reboot/time sync

API basics

GET endpoints do not need special headers.

POST endpoints require:

X-ESP32MIC-CSRF: 1

POST bodies are form-encoded.

Example:

curl -X POST \
  -H 'X-ESP32MIC-CSRF: 1' \
  -d 'audio_profile=stability_24k' \
  http://<device-ip>/api/set

GET endpoints

RouteDescription
/api/statusSystem status, stream URLs, active transport, runtime settings, Wi-Fi summary
/api/audio_statusI2S/ring-buffer state, profile, sample rate, HPF, levels, drops, stream counters
/api/perf_statusHeap, CPU MHz, stack high-water marks, Wi-Fi sleep policy, RSSI
/api/logsRecent in-memory logs
/api/wifi_statusSaved/connected SSID, IPs, RSSI, setup AP state, last error
/api/wifi_scanWi-Fi scan results

POST endpoints

RouteDescription
/api/setUpdate runtime settings
/api/wifi/configSave Wi-Fi credentials
/api/wifi/reconnectReconnect using saved credentials
/api/wifi/forgetErase saved credentials and start setup AP
/api/action/restart-audioRestart I2S/audio pipeline
/api/action/reset-peak-holdReset peak-hold level
/api/action/time-syncForce NTP sync
/api/action/rebootReboot the ESP32

/api/set settings

Accepted keys:

KeyValuesNotes
wifi_tx_power_dbm-1 to 20Applied immediately
hpf_enabled0, 1, true, falseApplied immediately
hpf_cutoff_hz20 to 8000Applied immediately
convert_shift1 to 31Requires audio restart
audio_profilequality_48k, stability_24k, 0, 1Requires audio restart

Example profile change:

curl -X POST \
  -H 'X-ESP32MIC-CSRF: 1' \
  -d 'audio_profile=stability_24k' \
  http://<device-ip>/api/set

curl -X POST \
  -H 'X-ESP32MIC-CSRF: 1' \
  http://<device-ip>/api/action/restart-audio

Stream status fields

The dashboard uses /api/status stream fields:

FieldMeaning
activeAny stream session is connected
active_transportnone, http, or rtsp
rtsp_streamingRTSP session is actively playing
connect_countTotal stream sessions since boot
http_connect_countHTTP stream sessions since boot
rtsp_connect_countRTSP sessions since boot
wav_urlHTTP WAV stream URL
pcm_urlHTTP raw PCM stream URL
rtsp_urlRTSP stream URL

connect_count is a session counter, not a current-client count.