Skip to content

HTTP API

Public stream

GET /<mount> returns the live stream. The response includes icy-* headers and Content-Type for the configured profile. HEAD returns headers without creating a listener.

Endpoint Purpose
GET /radio Audio stream
GET /radio with Icy-MetaData: 1 Audio with ICY metadata blocks
GET /_kite/v1/events?mount=/radio SSE metadata/source events
GET /_kite/v1/ws?mount=/radio WebSocket audio and JSON events
GET /_kite/v1/playlist.m3u?mount=/radio Absolute M3U playlist
GET /, /index.html, /status.xsl Built-in HTML status and player page
GET /status-json.xsl Mount status JSON
GET /radio.m3u8 Live HLS playlist for MP3 and AAC mounts
GET /radio.hls/<seq>.ts Immutable HLS MPEG-TS segment
GET /healthz Process health on the admin listener
GET /readyz Listener readiness on the admin listener

HLS

Mounts with the mp3 or aac-adts profile are packaged into live HLS streams without transcoding: /radio.m3u8 serves a sliding-window playlist (six ~4-second MPEG-TS segments) and each segment is served from <mount>.hls/<sequence>.ts. Segments are immutable and cacheable; playlists are not. Packaging starts on the first playlist request and stops after 30 seconds without listeners. Source switches and dropped data are marked with #EXT-X-DISCONTINUITY. Disable with server.hls_enabled: false.

Source ingest

Source clients authenticate with HTTP Basic Auth using the configured mount username and password. Kite accepts PUT /radio, POST /radio, and legacy SOURCE /radio ICE/1.0 over HTTP/1.1. The media profile must match the mount configuration.

Admin API

Admin endpoints require Authorization: Bearer <KITE_ADMIN_TOKEN>.

Method Endpoint Purpose
GET /api/v1/config Redacted active config and ETag
PUT /api/v1/config Validate, persist, and activate config
POST /api/v1/config/validate Validate a proposed config
POST /api/v1/reload Reload config from disk
GET /api/v1/mounts Runtime mount status
DELETE /api/v1/source?mount=/radio Disconnect active source
GET /metrics Prometheus exposition

Use If-Match with the config ETag to avoid overwriting a newer revision. Listener addresses, admin bind settings, and TLS mode require a restart.

Runtime profiling

Set the environment variable KITE_PPROF=1 and restart to expose Go pprof handlers on the admin listener under /debug/pprof/. The handlers require the admin bearer token like every other control-plane endpoint, and the admin listener binds to loopback by default.