API
Open and free, CORS enabled — built for developers and AI agents alike. No keys required (per-IP rate limits listed per endpoint).
GET /api/generate
The fastest way to an image. 120 requests/hour/IP.
GET /api/generate?type=ean-13&data=735005385001&format=png Parameters: type one of: ean-13, ean-8, upc-a, upc-e, isbn, code-128, gs1-128, code-39, code-93, itf-14, codabar, msi, pharmacode, qr, datamatrix, pdf417, micro-qr, micro-pdf417, aztec data the content to encode (URL-encoded) format png (default) | svg scale px per module for PNG, 1-8 (default 4) height bar height in mm for linear codes (default per type) text 0 to hide human-readable text (on by default) Examples: curl -o code.png "https://inkbeep.com/api/generate?type=qr&data=https%3A%2F%2Fexample.com" <img src="/api/generate?type=code-128&data=ABC-123" alt="Code 128"> Errors are returned as JSON with an error type, message and the data rules for the type.
GET /api/swish
Swish payment QR (Sweden): builds the official pre-filled payload locally and returns the code — or the raw payload as JSON. Validation messages are in Swedish.
GET /api/swish?payee=1231234567&amount=149,50&message=Faktura%2042&format=png
Parameters:
payee Swish number: 07X..., 123... or a 7-digit 90-number (required)
amount SEK, comma or dot decimals, max 2 (optional - empty = payer enters it)
message max 50 chars, Swish payment charset (optional)
editable fields the payer may change: editable=amount,message (default: locked)
format png (default) | svg | pdf (CMYK vector) | json (raw payload + app link)
scale px per module for PNG, 1-8 (default 4)
bwr Bar Width Reduction in um for PDF, 0-200 (default 0)
Examples:
curl -o swish.png "https://inkbeep.com/api/swish?payee=0701234567&amount=100"
curl "https://inkbeep.com/api/swish?payee=1231234567&message=Medlem%2042&format=json"
The QR payload follows Getswish's official specification (C<payee>;<amount>;<message>;<mask>)
and is built locally. Swish is a registered trademark of Getswish AB - Inkbeep is not
affiliated with Getswish AB. Validation errors: 400 {"error":"validation","fields":{...}} (Swedish).POST /api/vector
Press-ready vector: PDF/EPS with DeviceCMYK and Bar Width Reduction, or SVG.
POST /api/vector
Content-Type: application/json
{
"slug": "ean-13",
"text": "735005385001",
"format": "pdf", // pdf | eps | svg
"scalePct": 100, // 80-500, 100% = 0.33 mm X-dim
"heightMm": 25.9,
"bwrUm": 20, // Bar Width Reduction 0-200 μm
"includetext": true,
"fg": {"c":0,"m":0,"y":0,"k":100},
"bg": "white" // "white" | "transparent" | {c,m,y,k}
}
→ application/pdf (attachment)POST /api/batch
Up to 500 codes → ZIP. 10 runs/hour/IP. Per-row errors are collected in _errors.txt.
POST /api/batch
Content-Type: application/json
{
"slug": "code-128",
"format": "png", // png | svg | pdf | eps
"items": [
{"text": "SKU-0001"},
{"text": "SKU-0002", "filename": "second-code"}
],
"includetext": true,
"bwrUm": 0
}
→ application/zip; headers X-Batch-Total / X-Batch-ErrorsPOST /api/labels
Label sheets as a multi-page A4 PDF.
POST /api/labels
Content-Type: application/json
{
"slug": "ean-13",
"templateId": "avery-l7160", // avery-l7160 | avery-l7163 | avery-l7173 | avery-l7651 | grid-3x8
"items": ["7350053850019"],
"copies": 21, // repeat the list up to N labels
"includetext": true
}
→ application/pdf; headers X-Labels-Count / X-Labels-ErrorsAPI keys — higher volume
The anonymous limit is 120 requests/hour/IP. With an API key you get a daily quota instead (free registered tier: 2 000/day; pro: 20 000/day). Keys are currently issued manually — request one via the contact address on the site.
GET /api/generate?type=qr&data=hello Authorization: Bearer ib_<your key> → image/png; header X-RateLimit-Remaining shows what's left of today's quota. 401 invalid_key | 429 quota_exceeded
Terms
Free to use within the rate limits. Codes are generated with the BWIPP engine and provided as is — always verify scannability in your own environment before going to print. Valid GTINs require a GS1 license.