biofrq.analyze
The "tell me everything" action: detect + liveness + attributes for one image, in one call. Liveness and attribute heads run concurrently after a single shared detection pass, so this is faster than the equivalent sequence of single-action calls.
No embedding is produced — use biofrq.identify or biofrq.enroll
if you need one.
Params
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
images[0] | ImageItem | yes | — | One image. See Envelope → Image inputs. |
kinds | string[] | no | all | Which attribute heads to run. See biofrq.attributes for the supported set. |
biofrq.analyze does not honour the livenessThreshold
parameter today — only the dedicated biofrq.liveness action does.
The verdict comes back at the env default.
Request
json
{
"action": "biofrq.analyze",
"params": {
"images": [
{ "kind": "image", "bytes": "<base64>", "contentType": "image/jpeg" }
],
"kinds": ["emotion", "ageGender"]
}
}
Response
The per-action payload lives at data.results[0].value:
json
{
"detection": { "faceBox": { "x": 142, "y": 87, "w": 218, "h": 218 }, "confidence": 0.992 },
"liveness": { "verdict": "live", "score": 0.96, "reasons": [] },
"attributes": {
"emotion": { "label": "neutral", "confidence": 0.71 },
"ageGender": { "age": 31, "gender": "female", "confidence": 0.82 }
}
}
The detection block uses the same shape as biofrq.detect but
without alignedCropPng — ask biofrq.detect with
returnAlignedCrop: true if you need the crop on the wire.
Common errors
INVALID_REQUEST— no face in the image, or unknown entry inkinds.