Reading DotCode since the first dot

One decoder. Three ways to run it.

On your production line, in your team's browser, or in our cloud. Same engine everywhere — what changes is where it runs, and that decides what it should cost.

Live read

Choose a product

Offline SDK

Production lines · continuous volume

Drops into your application and decodes on your own hardware. No network on the scan path, so a dropped uplink can't stop the line.

Per machine · unlimited scans
See the SDK

Live Scanner

Warehouse, QA, field staff · camera in hand

A browser scanner your team just opens. Point a phone at the symbol and the payload appears. Nothing to install, nothing to deploy.

Per machine · own licence
See the scanner

Cloud API

Mobile & web apps · low or bursty volume

POST an image, get the payload back. No 45 MB native decoder shipped into a phone app for a handful of scans a day.

Per scan · 500/month free
Get a free key
Try it · no signup

Bring your own symbol.

Drop a photo or a generated DotCode. It decodes in milliseconds — and it's the same engine in all three products.

Drop an image or click to choose

The three products

Same engine. Pick where it runs.

Decodes on your hardware.

For a line reading hundreds of symbols a minute, a cloud round-trip is a dependency you can't accept. So the reader runs in your process.

  • No network call on the scan path — ever
  • Licence verified offline; a dead uplink can't lock you out
  • Unlimited scans — we can't count them and don't pretend to
  • Air-gapped mode: telemetry=False
# runs in-process — no network call, ever
from dotcode_sdk import Scanner

scanner = Scanner(license_key="your-key")
result  = scanner.decode("label.png")

print(result.text)        # 0103453120000011...
print(result.elapsed_ms)  # 7.8

Per machine, not per scan

Scan all you like.

A scanner your team just opens.

No app store, no install, no rollout. Send a link. They point a camera at the symbol and read it — on the phone already in their pocket.

  • Any phone, tablet or laptop with a camera
  • Reads rotated, blurred and damaged symbols
  • Also QR, DataMatrix, PDF417, Aztec, MaxiCode
  • Signs in with the same licence key as the SDK
Open the scanner
Camera · live read

Its own licence, per machine

The Live Scanner is a separate product — it isn't bundled with SDK or API plans.

One POST, one payload.

For a mobile app scanning a few times a day, shipping a native decoder is absurd. Send us the image instead and pay for exactly what you use.

  • 500 scans a month free — no card, no call
  • Hard quota, never silent overage: no surprise invoice
  • Quota resets monthly; hits and misses shown separately
  • Any language — it's just an HTTP POST
curl -X POST https://api.yourdomain.com/v1/decode \
  -H "X-API-Key: dk_live_..." \
  -F "file=@label.jpg"

{ "ok": true,
  "text": "0103453120000011...",
  "quota": { "used": 412, "remaining": 9588 } }

Per scan, with a real free tier

Start free. Upgrade only when you outgrow it.

Which one

Pick by where it has to run.

Offline SDKLive ScannerCloud API
Decoding happensYour hardwareOur serverOur server
Works with no internetYesNoNo
Scan volumeUnlimitedUnlimitedMetered
Anything to installA libraryNothingNothing
You payPer machinePer machinePer month
Questions

The ones that actually get asked.

Why isn't everything just the cloud API?

A packaging line reading hundreds of symbols a minute cannot depend on an uplink — one blip and the line stops. For that customer the SDK is the only honest answer. And for a mobile app doing ten scans a day, shipping a native decoder is the wrong answer. Different volumes, different products.

Can you meter my SDK scan volume?

No. Decoding happens in your process on your hardware; we never see the frames. That's exactly why the SDK is priced per machine.

What happens when my API quota runs out?

Calls return a clear 402 and stop. No silent overage — a surprise invoice is worse than a failed call you can see and plan for.