Spec-first barcode infrastructure
62 symbologies. Every engine validated against its ISO or AIM standard, not a library that wrapped another library that once read a Wikipedia article. Round-trip verified. Reed-Solomon proofs. Cross-validated by three independent decoders.
Live demo
No sign-up. No API key. Just type and get a barcode. The same engine that runs in production.
Integration
A REST API with official SDKs, async batch jobs, and docs that match what's actually deployed.
Plain HTTP and JSON. Works from curl, Postman, or any language with an HTTP client — no proprietary protocol to learn.
Python, JavaScript, and PHP clients with typed responses and retries built in. pip install barcodelab and go.
Queue large async batches on Starter and Pro plans and get a webhook when the job finishes — no polling loops.
Every endpoint, parameter, and error code, with copy-paste examples in four languages — generated from the code that ships.
Integration
# Encode a QR Code curl -X POST https://barcodelab.dev/api/v1/encode \ -H "X-API-Key: bl_your_key" \ -H "Content-Type: application/json" \ -d '{"text":"https://barcodelab.ai","symbology":"qr_code","format":"PNG"}' \ --output qr.png # Decode a barcode from an image file curl -X POST https://barcodelab.dev/api/v1/decode \ -H "X-API-Key: bl_your_key" \ -F "file=@barcode.png" # Response { "data_text": "https://barcodelab.ai", "symbology": "qr_code", "verified": true, "confidence": 1.0 }
import barcodelab # pip install barcodelab client = barcodelab.Client(api_key="bl_your_key") # Encode result = client.encode( text="https://barcodelab.ai", symbology="qr_code", format="PNG", ) with open("qr.png", "wb") as f: f.write(result.image_data) # Decode decoded = client.decode(file=open("barcode.png", "rb")) print(decoded.data_text) # → "https://barcodelab.ai" print(decoded.verified) # → True
// npm install @barcodelab/sdk import { BarcodeLab } from "@barcodelab/sdk"; const client = new BarcodeLab({ apiKey: "bl_your_key" }); // Encode const result = await client.encode({ text: "https://barcodelab.ai", symbology: "qr_code", format: "SVG", }); document.getElementById("barcode").innerHTML = result.image_data; // Decode const decoded = await client.decode({ file: imageFile }); console.log(decoded.data_text); // "https://barcodelab.ai" console.log(decoded.verified); // true
// composer require barcodelab/sdk use BarcodeLab\Client; $client = new Client(api_key: "bl_your_key"); // Encode $result = $client->encode( text: "https://barcodelab.ai", symbology: "qr_code", format: "PNG", ); file_put_contents("qr.png", $result->image_data); // Decode $decoded = $client->decode(file: fopen("barcode.png", "rb")); echo $decoded->data_text; // "https://barcodelab.ai"
Symbology coverage
Not wrappers around wrappers. Each engine is tested against the worked examples in the actual standard document.
Decoding
Most barcode tools treat decoding as a side feature bolted onto an encoder. Ours is validated with the same rigor — every result is cross-checked before it ever reaches your response.
zxing-cpp, and pyzbar. If they disagree, you get an error, not a wrong answer.Why it matters
DotCode was implemented directly from AIM ISS Rev 4.0. Reed-Solomon over GF(113). Every worked example in §6.1, §6.2, §6.3 verified. RS syndromes = 0. That is a mathematical proof, not a unit test.
Every encoded symbol is checked by our own decoder, zxing-cpp,
and pyzbar. If they disagree, we return an error — not a barcode
that will fail on a real scanner at 3am on a production line.
200+ AIs from GS1 General Specifications Release 24.0. Check digits, date century rule, AI companion requirements, FNC1 separators. Shared across all 22 GS1-capable engines — one implementation, verified once.
Built for production
No marketing fluff — every claim below is something we already do today, not a roadmap item.
Active development, a public changelog for every release, and support that replies in <4h on Enterprise, <8h on Pro, <24h on Starter — best-effort on Free.
Up to 99.9% uptime SLA on Pro and 99.99% on Enterprise — published commitments on the pricing page, not best-effort promises.
All traffic over TLS. API keys are hashed (SHA-256), never stored in plain text. We don't retain the barcode content you send — processed in memory, discarded the moment the response ships. See our privacy policy.
Application Identifier parsing follows GS1 General Specifications Release 24.0. We're not a certified GS1 Solution Partner — we just follow the spec, closely.
Pricing
Every plan includes all 60 symbologies. Quality doesn't change by tier — only volume and support do.
Questions
/api/v1/encode endpoint that's in production. No mocked responses, no pre-rendered images. Try the live demo yourself.zxing-cpp, and pyzbar) before it's returned. If they disagree, you get an error, not a barcode that might fail on a real scanner.429 response once you hit your monthly operation limit. You can upgrade anytime from your dashboard — no surprise overage billing.Free tier, no credit card required. Or just use the live demo above — same engine, zero setup.