Developer API Reference
Generate customized, high-quality QR codes dynamically using simple web requests. Optimized for speed and instant response times.
All requests are optimized for fast delivery and automatic caching. This guarantees instant load speeds when embedding QR codes directly in your website or emails.
Endpoints
QR Maker provides two endpoints to choose from depending on your integration needs.
Free Endpoint
Standard rate limits, no auth required.
https://qrmaker.ryanmarch.me/api/qr
Plus Endpoint
Higher rate limits, requires Bearer API Key.
https://qrmaker.ryanmarch.me/api/plus
Resources
Test in Postman or Bruno
Download an API request collection to test, preview, and run requests instantly. Supported by both Postman and Bruno.
AI-Agent & Machine Specifications
Get machine-readable specifications including OpenAPI 3.0 schema and LLM-friendly documentation.
Shortcut for macOS and iOS
Download an iOS/macOS shortcut to generate QR codes from the share sheet.
Authentication & API Keys
For higher rate limits, authenticate your API requests by passing your API Key in the HTTP
Authorization header using the Bearer scheme. Authenticated requests
bypass the public rate limits, allowing up to 20 requests per 10 seconds.
Authorization: Bearer YOUR_API_KEY
Request an API Key
Generate a free API Key to authenticate your requests and access the high-limit endpoint of the QR Maker API. Keys are generated instantly and are valid for a limited duration.
To request your key, enter your email address and complete the security verification below. Once generated, be sure to copy the key immediately or email it to yourself for your records.
Query Parameters
Customize your generated QR codes by appending the following parameters to the URL query string.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
content |
String |
Yes | — | The URL or text content to encode. Must be properly URL-encoded. |
format |
String |
No | png |
Output format: png (raw binary file), svg (vector
graphic), or base64 (JSON wrapping Data URI). |
size |
Number |
No | 1024 |
Width and height in pixels (for png and base64). Min:
64, Max: 4096.
|
fgColor |
String |
No | 000000 |
Hex color code for the foreground/pixels. Do not include a leading
#. |
bgColor |
String |
No | ffffff |
Hex color code for background. Ignored if transparent=true. Do
not include #. |
transparent |
Boolean |
No | false |
Set to true or 1 for a transparent background. |
margin |
Number |
No | 2 |
Quiet-zone border size in modules. Min: 0, Max: 10. |
ecl |
String |
No | M |
Error Correction Level: L (Low), M (Medium),
Q (Quartile), H (High).
|
cornerRadius |
Number |
No | 0 |
Quiet-zone background card border radius percentage. Min: 0, Max:
100.
|
cornerStyle |
String |
No | square |
Rendering style of modules: square, rounded,
circle, leaf, beveled.
|
icon |
String |
No | none |
Overlay an icon: link, globe,
text, wifi, contact, email,
phone, map-pin, sms, event,
github, linkedin, instagram,
facebook, whatsapp, youtube,
patreon, discord, pinterest.
You can also pass any URL-encoded custom emoji (e.g.,
|
iconSize |
Number |
No | 20 |
Percentage width of center icon. Min: 10, Max: 30.
|
iconColor |
String |
No | — | Hex color code for the center icon. Defaults to fgColor. Do not
include #. |
iconBg |
String |
No | rounded |
Shape of the backing card behind the icon: rounded,
circle, square, or none.
|
Response Formats
PNG Image (Default)
Returns raw image binary data directly. Ideal for embedding in static markups.
Content-Type: image/png
SVG XML
Returns standard, lightweight XML vector code.
Content-Type: image/svg+xml; charset=utf-8
Base64 Data JSON
Returns a clean JSON object containing a Base64-encoded Data URI string.
{
"data": "data:image/png;base64,iVBORw0KGgo..."
}
Interactive Playground
Construct your API request with parameters below and preview the generated QR code instantly in your browser.
Code Integration
Easy-to-use snippets to programmatically fetch, generate, or embed QR codes in your application workflows.
Embed QR codes directly in your HTML pages using a standard <img> tag.
Unauthenticated requests are subject to rate limits.
<img src="https://qrmaker.ryanmarch.me/api/qr?content=https%3A%2F%2Fqrmaker.ryanmarch.me&size=512&fgColor=327DFF" alt="QR Code" />
Rate Limits: To bypass public rate limits in production workflows, authenticate your requests using the JavaScript or Proxy Example options.
# Download a high-res custom SVG QR code using your API Key
curl -H "Authorization: Bearer YOUR_API_KEY" -o qr.svg "https://qrmaker.ryanmarch.me/api/plus?content=https%3A%2F%2Fqrmaker.ryanmarch.me&format=svg&fgColor=327DFF"
// Fetch Base64 data from the API using your API Key
fetch("https://qrmaker.ryanmarch.me/api/plus?content=https%3A%2F%2Fqrmaker.ryanmarch.me&format=base64", {
headers: {
"Authorization": "Bearer YOUR_API_KEY"
}
})
.then(res => res.json())
.then(json => {
console.log("Base64 Data URI:", json.data);
// document.getElementById('my-img').src = json.data;
});
Set up a secure server-side endpoint on your own server (e.g. Node/Express) to keep your API key private while allowing direct inline images on the frontend.
// Example Node.js/Express proxy endpoint (/api/qr)
const express = require('express');
const fetch = require('node-fetch'); // or global fetch in Node 18+
const app = express();
app.get('/api/qr', async (req, res) => {
// Construct the target URL with query parameters from the frontend
const query = new URLSearchParams(req.query).toString();
const targetUrl = `https://qrmaker.ryanmarch.me/api/plus?${query}`;
try {
const apiResponse = await fetch(targetUrl, {
headers: {
'Authorization': 'Bearer YOUR_API_KEY' // Stored securely on the server
}
});
res.setHeader('Content-Type', apiResponse.headers.get('Content-Type'));
apiResponse.body.pipe(res);
} catch (err) {
res.status(500).json({ error: 'Failed to proxy request to QR Maker' });
}
});