QR Code REST API
Generate, manage, and track QR codes programmatically. Integrate QR code creation into your app, workflow, or service in minutes.
Authentication
All API requests require a Bearer token. Generate your API key from your API key settings. Include it in every request:
Authorization: Bearer YOUR_API_KEYEndpoints
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/qr | Create a new QR code |
| GET | /api/v1/qr | List your QR codes |
POSTCreate a QR Code
Creates a new QR code and returns either JSON metadata or the image file directly, depending on the format parameter.
Request Body
| Parameter | Type | Description |
|---|---|---|
| name | string | RequiredA label for this QR code (1-100 chars) |
| type | string | RequiredURL, WIFI, VCARD, TEXT, EMAIL, PHONE, SMS, or SOCIAL |
| data | object | RequiredType-specific data (see QR types below) |
| format | string | Response format: "json" (default), "png", or "svg" |
| size | number | Image dimensions in pixels, 100-4800 (default: 600) |
| isDynamic | boolean | Create a dynamic QR code with a trackable redirect URL (default: false) |
| style | object | Optional styling (see Styling below) |
Example: Create and get JSON metadata
The default format is "json". The QR code is saved to your account and you get back its ID and metadata.
curl -X POST https://qrbloom.com/api/v1/qr \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "My Website",
"type": "URL",
"data": { "url": "https://example.com" }
}'Response (201):
{
"id": "cm4x...",
"name": "My Website",
"type": "URL",
"isDynamic": false,
"shortCode": null,
"shortUrl": null,
"createdAt": "2026-03-04T12:00:00.000Z"
}Example: Create and download as PNG
Set "format": "png" to receive the QR code image directly as binary PNG data. The QR code ID is returned in the X-QR-ID response header. Use -o with curl to save to a file.
# Returns the PNG image directly (binary)
curl -X POST https://qrbloom.com/api/v1/qr \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-o my-qr.png \
-d '{
"name": "My Website",
"type": "URL",
"data": { "url": "https://example.com" },
"format": "png",
"size": 800
}'Example: Create and download as SVG
Set "format": "svg" for a vector SVG file that scales to any size without losing quality.
# Returns the SVG image directly (XML)
curl -X POST https://qrbloom.com/api/v1/qr \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-o my-qr.svg \
-d '{
"name": "My Website",
"type": "URL",
"data": { "url": "https://example.com" },
"format": "svg",
"size": 600
}'Example: Custom styling
Pass a style object to customize colors, dot patterns, and corner shapes.
curl -X POST https://qrbloom.com/api/v1/qr \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-o styled-qr.png \
-d '{
"name": "Branded QR",
"type": "URL",
"data": { "url": "https://example.com" },
"format": "png",
"size": 1000,
"style": {
"dotsColor": "#1a1a2e",
"backgroundColor": "#ffffff",
"dotsType": "rounded",
"cornersSquareType": "extra-rounded",
"cornersSquareColor": "#e94560"
}
}'| Style Property | Values |
|---|---|
| dotsColor | Hex color (e.g. "#1a1a2e") |
| backgroundColor | Hex color (e.g. "#ffffff") |
| dotsType | rounded, dots, classy, classy-rounded, square, extra-rounded |
| cornersSquareType | dot, square, extra-rounded |
| cornersSquareColor | Hex color |
| cornersDotType | dot, square |
| cornersDotColor | Hex color |
Example: Dynamic QR code
Dynamic QR codes encode a short redirect URL (qrbloom.com/r/...) instead of the target URL directly. You can change the destination later without reprinting the code, and every scan is tracked with analytics.
curl -X POST https://qrbloom.com/api/v1/qr \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Campaign Link",
"type": "URL",
"data": { "url": "https://example.com/promo" },
"isDynamic": true
}'Response (201):
{
"id": "cm4x...",
"name": "Campaign Link",
"type": "URL",
"isDynamic": true,
"shortCode": "a1b2c3d4",
"shortUrl": "https://qrbloom.com/r/a1b2c3d4",
"createdAt": "2026-03-04T12:00:00.000Z"
}Example: WiFi QR code
curl -X POST https://qrbloom.com/api/v1/qr \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-o wifi-qr.png \
-d '{
"name": "Office WiFi",
"type": "WIFI",
"data": {
"ssid": "MyNetwork",
"password": "s3cureP@ss",
"encryption": "WPA"
},
"format": "png"
}'Example: vCard contact card
curl -X POST https://qrbloom.com/api/v1/qr \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-o contact.png \
-d '{
"name": "Jane Smith Contact",
"type": "VCARD",
"data": {
"firstName": "Jane",
"lastName": "Smith",
"organization": "Acme Inc",
"title": "CTO",
"email": "jane@acme.com",
"phone": "+15551234567",
"website": "https://acme.com"
},
"format": "png"
}'QR Types
Each type requires specific fields in the data object.
GETList QR Codes
Returns a paginated list of your QR codes. Use page and limit query parameters (max 100 per page).
curl https://qrbloom.com/api/v1/qr?page=1&limit=10 \
-H "Authorization: Bearer YOUR_API_KEY"Response (200):
{
"data": [
{
"id": "cm4x...",
"name": "My Website",
"type": "URL",
"isDynamic": false,
"shortCode": null,
"destination": null,
"scanCount": 42,
"createdAt": "2026-03-04T12:00:00.000Z"
}
],
"pagination": {
"page": 1,
"limit": 10,
"total": 1,
"pages": 1
}
}Rate Limits
| Endpoint | Limit |
|---|---|
| POST /api/v1/qr | 30 requests / minute |
| GET /api/v1/qr | 60 requests / minute |
Exceeding the limit returns 429 Too Many Requests.
Features
8 QR Types
URL, WiFi, vCard, Text, Email, Phone, SMS, and Social links
PNG & SVG Export
Download QR codes in raster or vector format
Dynamic QR Codes
Update the destination without reprinting
Scan Analytics
Track scans with device, location, and time data
Custom Styling
Set colors, dot styles, and corner shapes
Rate Limiting
60 requests per minute on paid plans
Bearer Auth
Secure API key authentication
JSON Responses
Clean, predictable JSON for every endpoint