> ## Documentation Index
> Fetch the complete documentation index at: https://docs.satyakod.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Read a camera frame

> Send a camera image; Satyakod finds and reads a Private Code in it and returns the verdict.

Scope: `scans:verify`. For Private Codes, which only Satyakod reads. Send frames from the camera
preview, a few per second, until one comes back with `found: true`. The body is
`multipart/form-data`.

**frame** `file` *required*

A JPEG, PNG or WebP image up to 2 MB. Around 1280 px on the long side reads well.

**dryRun** `string` (default: true)

`false` records the scan. Leave it `true` for checks that shouldn't count, such as testing a label.

**found** `boolean` *required*

Whether a code was read in the frame. When `false`, send the next frame.

**verdict** `string`

When found: `genuine`, `suspicious` or `counterfeit`. A code issued by another workspace is reported as `counterfeit` with the reason "Not a code this workspace issued".

**reason** `string`

**checks** `object[]`

**batchId** `string`

**productName** `string`

```bash cURL theme={null}
curl https://api.satyakod.com/v1/scan-frame \
  -H "Authorization: Bearer $SATYAKOD_KEY" \
  -F frame=@frame.jpg -F dryRun=false
```

```json Found theme={null}
{
  "found": true,
  "verdict": "genuine",
  "reason": "All checks passed",
  "checks": [{ "kind": "signature", "result": "pass", "detail": "Key acme-pc-2026-01" }],
  "batchId": "B-1047",
  "productName": "Clutch plate CP-14"
}
```

```json Not found theme={null}
{ "found": false }
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.