QR Codes Module
Dynamic QR codes and barcode generation with scan analytics.
Base URL: https://app.proign.com/[tenant]/qr/api
Public API: https://app.proign.com/api/v1 (API Key required)
Overview
The QR module enables you to create dynamic QR codes that can be updated after printing, track scan analytics, and integrate with other PROIGN modules for product registration, warranty activation, and marketing campaigns.
Features
- Dynamic QR Codes - Update destination URLs without reprinting
- Scan Analytics - Track scans by location, device, and time
- Custom Design - Brand QR codes with logos, colors, and shapes
- Batch Generation - Create thousands of unique codes via CSV import
- Templates - Save and reuse design settings
- Folders - Organize QR codes into hierarchical folders
- Short URLs - Custom domains for branded short links
- Barcodes - Generate Code128, EAN-13, UPC-A and more
API Endpoints
QR Code Management
GET /api/[tenant]/qr # List QR codes
POST /api/[tenant]/qr # Create QR code
GET /api/[tenant]/qr/[id] # Get QR details
PATCH /api/[tenant]/qr/[id] # Update QR code
DELETE /api/[tenant]/qr/[id] # Delete QR code
PATCH /api/[tenant]/qr/[id]/destination # Update destination URL
GET /api/[tenant]/qr/[id]/download # Download as PNG/SVG/PDF
POST /api/[tenant]/qr/preview # Preview without saving
Analytics
GET /api/[tenant]/qr/[id]/analytics # Single QR analytics
GET /api/[tenant]/analytics # Dashboard overview
GET /api/[tenant]/analytics/realtime # Real-time scan data
GET /api/[tenant]/analytics/export # Export as CSV/JSON
Templates & Folders
GET /api/[tenant]/templates # List templates
POST /api/[tenant]/templates # Create template
PATCH /api/[tenant]/templates/[id] # Update template
DELETE /api/[tenant]/templates/[id] # Delete template
POST /api/[tenant]/templates/[id]/apply # Apply to QR codes
GET /api/[tenant]/folders # List folders
POST /api/[tenant]/folders # Create folder
PATCH /api/[tenant]/folders/[id] # Update folder
DELETE /api/[tenant]/folders/[id] # Delete folder
Barcodes
GET /api/[tenant]/barcode # List barcodes
POST /api/[tenant]/barcode # Create barcode
GET /api/[tenant]/barcode/[id] # Get barcode (or image)
DELETE /api/[tenant]/barcode/[id] # Delete barcode
Batch Operations
GET /api/[tenant]/batch # List batch jobs
GET /api/[tenant]/batch?template=qr # Download CSV template
POST /api/[tenant]/batch # Create batch job (CSV upload)
GET /api/[tenant]/batch/[id] # Get job status
GET /api/[tenant]/batch/[id]?download=true # Download results ZIP
DELETE /api/[tenant]/batch/[id] # Delete batch job
Settings & Configuration
GET /api/[tenant]/settings # Get tenant settings
PATCH /api/[tenant]/settings # Update settings
GET /api/[tenant]/logo # List uploaded logos
POST /api/[tenant]/logo # Upload logo
GET /api/[tenant]/logo/[id]/image # Get logo image
GET /api/[tenant]/domains # List custom domains
POST /api/[tenant]/domains # Add domain
DELETE /api/[tenant]/domains/[id] # Remove domain
GET /api/[tenant]/api-keys # List API keys
POST /api/[tenant]/api-keys # Create API key
DELETE /api/[tenant]/api-keys/[id] # Revoke API key
Public API (v1)
External integrations can use the Public API with Bearer token authentication:
# Header: Authorization: Bearer prgn_xxxxx
GET /api/v1/qr # List QR codes
POST /api/v1/qr # Create QR code
GET /api/v1/qr/[id] # Get QR details
PATCH /api/v1/qr/[id] # Update QR code
DELETE /api/v1/qr/[id] # Delete QR code
GET /api/v1/qr/[id]/analytics # Get analytics
Request Examples
Create QR Code
POST /api/[tenant]/qr
Content-Type: application/json
{
"name": "Product Landing Page",
"destination_url": "https://example.com/product/123",
"type": "dynamic",
"design_settings": {
"size": 1024,
"errorCorrection": "M",
"color": {
"dark": "#000000",
"light": "#FFFFFF"
},
"logo": {
"enabled": true,
"imageData": "data:image/png;base64,...",
"size": 0.25
}
},
"folder_id": "folder_abc123",
"tags": ["product", "marketing"]
}Response
{
"qr_code": {
"id": "qr_abc123def456",
"name": "Product Landing Page",
"type": "dynamic",
"short_code": "Abc12xyz",
"destination_url": "https://example.com/product/123",
"status": "active",
"scan_count": 0,
"design_settings": { ... },
"created_at": "2026-01-11T10:00:00Z"
},
"short_url": "https://prgn.cc/Abc12xyz"
}Query Parameters
| Parameter | Type | Description |
|---|---|---|
status | string | Filter: active, paused, archived |
folder_id | string | Filter by folder (use 'null' for root) |
search | string | Search in name |
limit | number | Items per page (default: 50, max: 100) |
offset | number | Pagination offset |
sort_by | string | Sort field: created_at, name, scan_count |
Download Formats
Use query parameters with /api/[tenant]/qr/[id]/download:
| Parameter | Values | Description |
|---|---|---|
format | png, svg, pdf | Output format (default: png) |
size | 100-4096 | PNG size in pixels (default: 1024) |
page_size | a4, letter | PDF page size (default: a4) |
include_label | true, false | Include label in PDF (default: true) |
Integration with Other Modules
- Aftersale - QR codes for warranty registration
- Support - Pre-filled support ticket creation
- Campaign - Track marketing campaign scans
- Docs - Link to product documentation
- Analytics - Aggregate QR scan data
Rate Limits
| Endpoint Type | Limit |
|---|---|
| Read operations (GET) | 100 requests/minute |
| Write operations (POST/PATCH) | 30 requests/minute |
| Public API (v1) | Configurable per API key |