bi_get_alert_image
Retrieve a camera's stored alert frame for a specific time (or latest alert) as base64, including alert record and memo to confirm which alert matched.
Instructions
Fetch the STORED alert image (the frame BI saved when an alert fired) for a camera, resolved by time — not a live frame (that's bi_get_camera_snapshot). Pass 'camera' (short name) and optional 'at' (the alert time: ISO-8601, unix epoch int, or relative like '-2h'); omit 'at' for the most recent alert. Returns the most-recent alert at-or-before 'at' as base64, plus its record/time/memo so you can confirm which alert came back. Optional 'markup' (bool) requests the AI-overlay variant (manual's v=2). Internally resolves via alertlist + the /alerts/@record endpoint. Use a specific camera, not 'Index'. MARKUP — when 'markup'=true draws no box, it's almost always the ALERT'S SOURCE, not a tool bug: a box exists ONLY if CodeProject.AI classified the alert (memo has a score, e.g. person:89%). A bare person memo (no %) is an ONVIF/camera-IVS alert that BI's AI never scored, so there is no box to burn — v=2 just re-encodes the frame. (Separately, low-res thumbnails come from the camera's Hi-res-JPEG alert setting being off; that's a distinct issue from markup.) The /alerts/ endpoint only serves what BI stored and ignores w/h/scale params. State the source-vs-bug distinction proactively.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | Alert time. ISO-8601, unix epoch int, or relative shorthand ('-2h', '-1d'). Resolves to the most-recent alert at-or-before this time. Omit for the latest alert. | |
| raw | No | If true, return the raw Blue Iris JSON instead of the shaped view. | |
| camera | Yes | Camera short name (e.g. 'SecCam_4'). Required. | |
| markup | No | If true, request the AI-markup overlay variant (v=2). Markup only appears when BI stored a detection box. |