You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Input validation and sanitisation on every parameter
Rate limiting (default 100 req/min per IP)
Security hardened with Helmet + CORS + compression
Docker + Docker Compose ready
One-click deploy to Render or Railway
Quick Start
Prerequisites
Node.js ≥ 18
Install & run locally
git clone https://github.com/your-org/gs-qrhub.git
cd gs-qrhub
cp .env.example .env # edit as needed
npm install
npm start # production
npm run dev # dev mode (nodemon)
Server starts at http://localhost:3000
API Reference
All requests use GET /
Required parameter
Param
Description
type
One of the supported types listed below
Optional render parameters (all types)
Param
Default
Description
size
300
Output width in pixels (50–2000)
margin
4
Quiet-zone modules (0–20)
darkColor
000000
Module color as hex (no #)
lightColor
ffffff
Background color as hex (no #)
errorCorrectionLevel
M
L / M / Q / H (QR only)
Supported QR Types
qr — Plain text / URL
GET /?type=qr&text=Hello%20World
GET /?type=qr&url=https://example.com
GET /?type=qr&url=https://example.com&size=500&errorCorrectionLevel=H
wifi — WiFi credentials
Param
Required
Description
ssid
✅
Network name
password
✅*
Password (* not required for nopass)
security
WPA (default) / WEP / nopass
hidden
true / false
GET /?type=wifi&ssid=OfficeWifi&password=secret123&security=WPA
vcard — Contact card
Param
Required
Description
name
✅
Full name
phone
Phone number
email
Email address
org
Organisation
title
Job title
url
Website URL
address
Street address
GET /?type=vcard&name=John%20Doe&phone=+919876543210&email=john@example.com&org=ACME
email — Email compose
Param
Required
Description
to
✅
Recipient email
subject
Subject line
body
Email body
GET /?type=email&to=john@example.com&subject=Hello&body=Test%20message
sms — SMS message
Param
Required
Description
phone
✅
Phone number
message
SMS body
GET /?type=sms&phone=9876543210&message=Hello%20there
phone — Phone call
Param
Required
Description
number
✅
Phone number
GET /?type=phone&number=+919876543210
geo — Geographic location
Param
Required
Description
lat
✅
Latitude (-90 to 90)
lng
✅
Longitude (-180 to 180)
GET /?type=geo&lat=28.6139&lng=77.2090
whatsapp — WhatsApp deep link
Param
Required
Description
phone
✅
International number (no +)
message
Pre-filled message
GET /?type=whatsapp&phone=919876543210&message=Hello
event — Calendar event
Param
Required
Description
title
✅
Event title
start
✅
ISO 8601 start datetime
end
ISO 8601 end datetime
location
Venue
description
Event description
GET /?type=event&title=Team%20Meeting&start=2026-06-01T10:00:00Z&end=2026-06-01T11:00:00Z
crypto — Cryptocurrency payment
Param
Required
Description
coin
✅
Coin name (e.g. bitcoin)
address
✅
Wallet address
amount
Payment amount
label
Label
message
Note
GET /?type=crypto&coin=bitcoin&address=1A1zP1eP5QGefi2DMPTfTL5SLmv7Divf&amount=0.01
otp — TOTP Authenticator
Param
Required
Description
issuer
✅
App/service name
account
✅
User account (e.g. email)
secret
✅
Base32-encoded TOTP secret
algorithm
SHA1 (default) / SHA256
digits
6 (default) / 8
period
30 (default)
GET /?type=otp&issuer=MyApp&account=user@example.com&secret=JBSWY3DPEHPK3PXP
Supported Barcode Types
Use ?type=barcode&format=<format> for all barcodes.
Format
Use case
code128
General-purpose alphanumeric
code39
Industrial / automotive
ean13
Retail products (13 digits)
ean8
Small retail (8 digits)
upca
US retail (12 digits)
upce
Compressed UPC-A (6 digits)
interleaved2of5
Logistics / numeric only
gs1-128
Supply chain / GS1 compliant
pdf417
High-density stacked barcode
datamatrix
2D matrix — small footprint
GET /?type=barcode&text=ABC123&format=code128
GET /?type=barcode&text=012345678905&format=ean13
GET /?type=barcode&text=HELLO&format=pdf417&size=400
Special Endpoints
GET /health — Service health check (JSON)
GET /info — Plain-text usage documentation