\

Camera HTTP API

All endpoints are LAN-local to each camera. Default port: 8134.

Discovery

GET /v1/info
200 OK
{ "id":"cam-uuid","model":"Lava LXX504","soc":"D7050","codec":"h264",
  "fps":60,"gop":1,"bitrate":7000000,"hasAudio":true,
  "now_ms":1725169234123,"serving":"ok",
  "thermals":{"state":"nominal","cpuC":41} }

Pairing

POST /v1/pair
Headers: Authorization: Pairing-Nonce <nonce>
Body:    { "director_pubkey":"...", "display_name":"iPad 9", "pin":"123456" }
200 OK   { "camera_pubkey":"...", "pair_token":"<base64url>" }

Enrollment

POST /v1/matches/enroll
Headers: Authorization: Bearer <pair_token>
Body:    { "mid":"<uuid>", "match_token":"<hmac>", "ttl":7200, "role":"A" }
200 OK   { "ok":true }

Init segments

GET /v1/init/video
GET /v1/init/audio  (if audio enabled)
Headers: Authorization: Bearer <match_token>

Serving fragments

GET /v1/segments?mid=<MID>&from=<ms>&to=<ms>&tracks=video[,audio]
Headers: Authorization: Bearer <match_token>
Response: HTTP chunked stream of 1 s m4s (moof/mdat) in order

Export MARK clip

POST /v1/export?mid=<MID>&from=<ms>&to=<ms>&tracks=video[,audio]
Headers: Authorization: Bearer <match_token>
Response: application/mp4 (fast-start; no transcode)

WebRTC (optional)

Unordered RTCDataChannel for the same messages (INIT, SEGMENTS, PING/PONG) on host-only ICE; disabled by default.

mDNS TXT

id=<uuid>;model=LavaLXX504;soc=D7050;codec=h264;fps=60;gop=1;br=7000k;audio=1;pin=1;ver=4