Spec-first barcode infrastructure

The barcode Solution that
read the Specification.

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.

62
symbologies
implemented
307+
tests passing
across all engines
3
independent decoders
must agree
0
RS syndromes on
DotCode validation

Live demo

Encode any barcode. Right now.

No sign-up. No API key. Just type and get a barcode. The same engine that runs in production.

barcodelab.dev/api/v1/encode
Click Encode →
Round-trip verified ✓
Download SVG

Integration

Built for developers, not just demos.

A REST API with official SDKs, async batch jobs, and docs that match what's actually deployed.

REST API, everywhere

Plain HTTP and JSON. Works from curl, Postman, or any language with an HTTP client — no proprietary protocol to learn.

Official SDKs

Python, JavaScript, and PHP clients with typed responses and retries built in. pip install barcodelab and go.

Batch & webhooks

Queue large async batches on Starter and Pro plans and get a webhook when the job finishes — no polling loops.

Docs that don't lie

Every endpoint, parameter, and error code, with copy-paste examples in four languages — generated from the code that ships.

Integration

Three lines to your first barcode.

# 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

60 symbologies. Every one spec-validated.

Not wrappers around wrappers. Each engine is tested against the worked examples in the actual standard document.

Decoding

Decode isn't an afterthought.

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.

  • Rotation, skew, and low-contrast labels — handled the way the spec intends, not patched around.
  • 2D codes lean on built-in error correction. Reed-Solomon means a Data Matrix or QR Code can lose a meaningful chunk of its modules and still decode clean.
  • Every decode is cross-validated by three independent engines — our own decoder, zxing-cpp, and pyzbar. If they disagree, you get an error, not a wrong answer.

Why it matters

Your scanner doesn't care
what you assumed.

01

Built from the specification, not from StackOverflow

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.

02

Three decoders must agree before you get a response

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.

03

GS1 Application Identifiers parsed and validated

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

Ready when you scale.

No marketing fluff — every claim below is something we already do today, not a roadmap item.

Maintained & supported

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.

Predictable performance

Up to 99.9% uptime SLA on Pro and 99.99% on Enterprise — published commitments on the pricing page, not best-effort promises.

Secure by design

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.

GS1 standards

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

Start free. Pay when you grow.

Every plan includes all 60 symbologies. Quality doesn't change by tier — only volume and support do.

Free
$0 / mo
500 operations / month

  • All 60 symbologies
  • PNG + SVG output
  • 1 API key
  • Community support
Get started free
Starter
$20 / mo
10,000 operations / month

  • All 60 symbologies
  • PNG + SVG + JPEG
  • Batch up to 50
  • 5 API keys
  • Email support
Start Starter
Enterprise
Custom
Unlimited operations

  • On-premise deployment
  • SDK license included
  • SSO / SAML
  • Dedicated support
  • 99.99% SLA
  • Custom symbologies
Contact sales

Questions

Frequently asked questions

Yes — it calls the exact same /api/v1/encode endpoint that's in production. No mocked responses, no pre-rendered images. Try the live demo yourself.
No. The text and images you submit are processed in memory and discarded immediately after the response is sent. We only keep usage metadata (operation count, symbology, timestamp) for quota enforcement, retained 13 months. Full detail in our Privacy Policy.
Every symbology is implemented directly from its ISO, AIM, or GS1 specification — not reverse-engineered from another library. Each result is cross-checked by three independent decoders (ours, 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.
Yes — 200+ AIs from GS1 General Specifications Release 24.0, with check digits, date century rules, FNC1 separators, and companion AI requirements, shared across all 22 GS1-capable engines. We follow the GS1 standard closely; we're not a certified GS1 Solution Partner.
SVG and PNG on every plan, including Free. JPEG is available from Starter up. Batch jobs and webhooks are available on Starter and Pro — see pricing for the full breakdown.
You'll get a 429 response once you hit your monthly operation limit. You can upgrade anytime from your dashboard — no surprise overage billing.
Pro includes a 99.9% uptime SLA; Enterprise includes 99.99%. Free and Starter are best-effort. Support response times follow the same tiering — see pricing.
Yes, on the Enterprise plan — on-premise deployment with an included SDK license. Contact sales to talk through your setup.
Still have questions? Visit the support center or email us.

Ship your first barcode in the next five minutes.

Free tier, no credit card required. Or just use the live demo above — same engine, zero setup.