> ## 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.

# Upload offline scans

> Send scans made without internet; each is checked as of when it was made and recorded.

Scope: `scans:verify`. For apps and plant systems that scan [offline](https://docs.satyakod.com/concepts/verification-modes.md)
and sync later. Each scan is checked as of the time it was made: clone checks compare it with
scans around then, and it appears in your scan history, alerts and reports at that time.

**scans** `object[]` *required*

Up to 500 scans per request.

**scan**

**serial** `string` *required*

The serial as read.

**scannedAt** `string` *required*

ISO 8601 with a time zone, at most 30 days ago, e.g. `2026-10-24T09:15:00+05:30`.

**channel** `string` (default: sdk)

As for [Verify a serial](https://docs.satyakod.com/api-reference/verify.md).

**location** `object`

As for Verify a serial.

**device** `object`

As for Verify a serial.

**recorded** `number` *required*

How many scans were checked and recorded.

**results** `object[]` *required*

One per scan, in order: `serial` with `verdict`, `reason`, `scanId` and `batchId`, or `error`
when the scan was not accepted (missing serial, or `scannedAt` missing, without a time zone or
older than 30 days). Send accepted scans again only if the request failed as a whole.

```bash cURL theme={null}
curl https://api.satyakod.com/v1/verify/offline \
  -H "Authorization: Bearer $SATYAKOD_KEY" \
  -H "Content-Type: application/json" \
  -d '{"scans": [
        {"serial": "0021A0512PXK20J9", "scannedAt": "2026-10-24T09:15:00+05:30", "channel": "rugged_handheld"},
        {"serial": "0021A0512PXK20J0", "scannedAt": "2026-10-24T09:15:04+05:30"}
      ]}'
```

```json 200 theme={null}
{
  "recorded": 2,
  "results": [
    { "serial": "0021A0512PXK20J9", "verdict": "genuine", "reason": "All checks passed", "scanId": "scn_…", "batchId": "B-1045" },
    { "serial": "0021A0512PXK20J0", "verdict": "counterfeit", "reason": "Forged code: signature invalid", "scanId": "scn_…" }
  ]
}
```


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