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.

GET https://qrmaker.ryanmarch.me/api/qr

Plus Endpoint

Higher rate limits, requires Bearer API Key.

GET 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.

Download Shortcut

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.

Your email address is not stored anywhere and is only used for key generation.


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., icon=%F0%9F%9A%80 for 🚀). Emojis are fully rendered in SVG output only.

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' });
  }
});