# Predator Guard > AI farm watch. Feed a video frame or snapshot, the vision model names the animal, and the app returns an Animal Score (model confidence, 0-100) and a Danger Type (CRITICAL / DANGER / WARNING / MONITOR / NONE) tuned to the camera's zone, the time of day and the farm's US region. Every result is saved to per-camera history. Animal ID is an estimate - a human should check the frame before acting. In immediate danger call 911 (US). Times on the dashboard are farm-local (the region's time zone). ## Pages - [Dashboard](https://predator-guard.vercel.app/): cameras, recent threat alerts, species by camera, farm region and predator watchlist, plus a live Ring documentation search backed by the Ring Appstore Knowledge MCP server. Sections: [#cameras](https://predator-guard.vercel.app/#cameras), [#species](https://predator-guard.vercel.app/#species), [#threat-alerts](https://predator-guard.vercel.app/#threat-alerts), [#ring-docs](https://predator-guard.vercel.app/#ring-docs). - [Camera check](https://predator-guard.vercel.app/video): load a video or snapshot, pick a camera, analyze a frame. ## API Machine-readable spec: [OpenAPI 3.1](https://predator-guard.vercel.app/openapi.json). All endpoints answer JSON. Errors share one shape: `{ "error": string, "detail"?: string }` with an HTTP status. No authentication. - `GET https://predator-guard.vercel.app/api/health` - liveness: `{ "status": "ok", "service": "predator-guard" }`. - `GET https://predator-guard.vercel.app/api/farm` - farm profile and the region list: `{ farm: { id, region, updatedAt } | null, regions: [{ id, label, states, blurb }] }`. - `POST https://predator-guard.vercel.app/api/farm` - set the region. Body `{ "region": "" }`. Region ids: `northeast` (Northeast), `southeast` (Southeast), `midwest` (Midwest), `great-plains` (Great Plains & Texas), `mountain-west` (Mountain West), `pacific-northwest` (Pacific Northwest), `southwest` (Southwest & Desert), `suburban` (Suburban / Backyard). - `GET https://predator-guard.vercel.app/api/cameras` - cameras of the current region: `{ cameras: [...], farm: { region } }`. - `POST https://predator-guard.vercel.app/api/cameras` - register a camera. Body `{ "name": string (1-80), "zoneKind": "coop" | "pasture" | "shed" | "gate" }` -> 201 `{ camera }`. - `DELETE https://predator-guard.vercel.app/api/cameras?id=` - remove a camera **and its whole history** (irreversible) -> `{ deleted: true }`. - `POST https://predator-guard.vercel.app/api/analyze` - judge one frame. Body `{ "imageBase64": "", "cameraId"?: "", "contentType"?: "image/jpeg" | "image/png", "timeframeSeconds"?: number }`. Without cameraId the frame is judged as a manual check. Returns `{ source, camera, farm, animal: { species, score, model, peopleOnly, status, reason }, danger: { type, severity, score }, detectionId, imageKey, capturedAt, saved }`. 503 `model_not_configured` when no vision key is set. - `POST https://predator-guard.vercel.app/api/media` - store the original photo/video. multipart/form-data field `file` (jpeg, png, webp, gif, mp4, webm, mov; max 100 MB) and optional `detectionId`. - `GET https://predator-guard.vercel.app/api/media/` and `GET https://predator-guard.vercel.app/api/captures/` - 302 to a short-lived signed URL of the stored file / analyzed frame. - `GET https://predator-guard.vercel.app/api/emergency-nearby?address=` or `?lat=&lon=` - nearest police stations from OpenStreetMap. - `GET https://predator-guard.vercel.app/api/ring-docs` - gateway status: `{ server: { url, serverName, serverVersion, tools } }`. Live proxy to the Ring Appstore Knowledge MCP (`mcp.json`). - `GET https://predator-guard.vercel.app/api/ring-docs?q=&max=5` - search Ring's documentation: `{ query, status, confidence, hits: [{ content, score, sourceType, source }], followUpQuestions }`. 503 `mcp_not_configured` when the gateway is not reachable. - `GET https://predator-guard.vercel.app/api/ring-docs?doc=` - full content of one document returned by a search (relative docs path or `https://ring.com/...` URL): `{ source, content }`. - `GET https://predator-guard.vercel.app/api/ring-live` - live-section status; without `RING_ACCESS_TOKEN` in the server env it answers `configured: false`, with a token the real `{ user, devices: [{ id, name, online }] }`. - `POST https://predator-guard.vercel.app/api/ring-live` - the motion hook. Body `{ "deviceId": string, "cameraName"?: string, "timestampMs"?: number }` → pulls the device snapshot at that instant and classifies it. An animal lands in S3 + history (`{ animalDetected: true, snapshot: "saved", verdict, danger, detectionId }`); no animal / people-only / model-failure frames are reported and dropped (`{ animalDetected: false, snapshot: "discarded" }`). - `GET https://predator-guard.vercel.app/api/ring-live/events?deviceId=` - Ring event history, newest first: `{ events: [{ eventId, startMs, eventType, thirdPartyReviewed }] }`. - `GET https://predator-guard.vercel.app/api/ring-live/snapshot?deviceId=×tampMs=` - on-demand frame as base64 JSON; never persisted. - `POST https://predator-guard.vercel.app/api/ring-live/whep?deviceId=` - server-relayed WHEP: POST an SDP offer (text) → `200` SDP answer + `X-WHEP-Session`; `DELETE ?session=` closes it. ## Docs - [README](https://github.com/suchet-kapoor/Amazon_Devices_RingSection/blob/main/README.md): setup and architecture. - [Features](https://github.com/suchet-kapoor/Amazon_Devices_RingSection/blob/main/docs/FEATURES.md): feature list and milestones. - [Build plan](https://github.com/suchet-kapoor/Amazon_Devices_RingSection/blob/main/docs/PLAN.md): scope, data model, danger rules. ## Optional - [Sitemap](https://predator-guard.vercel.app/sitemap.xml) - [Source code](https://github.com/suchet-kapoor/Amazon_Devices_RingSection)