curl https://api.satyakod.com/v1/scan-frame \
-H "Authorization: Bearer $SATYAKOD_KEY" \
-F frame=@frame.jpg -F dryRun=false
{
"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"
}
{ "found": false }
Scans
Read a camera frame
Send a camera image; Satyakod finds and reads a Private Code in it and returns the verdict.
POST
/
v1
/
scan-frame
curl https://api.satyakod.com/v1/scan-frame \
-H "Authorization: Bearer $SATYAKOD_KEY" \
-F frame=@frame.jpg -F dryRun=false
{
"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"
}
{ "found": false }
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.
false records the scan. Leave it true for checks that shouldn’t count, such as testing a label.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”.curl https://api.satyakod.com/v1/scan-frame \
-H "Authorization: Bearer $SATYAKOD_KEY" \
-F frame=@frame.jpg -F dryRun=false
{
"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"
}
{ "found": false }