QR Code Generator

Turn any link or text into a downloadable QR code — static, untracked, free and watermark-free.

100% free No signup No watermark Processed in memory, never stored

How it works

  1. Enter content. Type the link or text you want the QR code to contain.
  2. Choose options. Pick a size and an error-correction level (higher survives more damage).
  3. Download PNG. The QR code appears instantly — download it as a PNG.

About this tool

Create a QR code for a URL, a Wi-Fi login, a phone number or any text. Choose the size and the error-correction level — higher correction means the code still scans even if part of it is dirty or covered — and download a clean PNG. The codes are static and contain only the data you type, so there's no redirect, no tracking and no expiry. No watermark, no signup, and nothing about your code is stored after the page renders it.

What people use it for

  • Put a link to your site on a flyer, card or poster
  • Share a Wi-Fi password guests can scan
  • Add a menu or booking link to a table tent
  • Link a product to a review or instructions page

Developer API

Automate this tool from your own code. Send a POST request to the endpoint below and get the same result the web tool produces. It is rate-limited per IP and needs no signup — API keys for higher limits are coming.

POST https://best.free/api/tools/qr-code-generator/
Parameter Example Required Notes
text https://best.free Yes URL or text to encode (≤2000 chars).
size 10 No Module pixel size 4–20.
ec M No Error correction L/M/Q/H.
curl -X POST https://best.free/api/tools/qr-code-generator/ \
  -H 'Content-Type: application/json' \
  -d '{"text": "https://best.free", "size": 10, "ec": "M"}'
import requests

r = requests.post(
    "https://best.free/api/tools/qr-code-generator/",
    json={"text": "https://best.free", "size": 10, "ec": "M"},
)
print(r.json())
const r = await fetch("https://best.free/api/tools/qr-code-generator/", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ text: "https://best.free", size: 10, ec: "M" }),
});
const data = await r.json();
console.log(data);

Response: JSON with a base64 PNG data URI in "image".

{"ok": true, "image": "data:image/png;base64,iVBORw0KG..."}

Frequently asked questions

Any text up to about 2000 characters — most commonly a URL, but also Wi-Fi details, a phone number, an email or plain text.

Higher levels add redundancy so the code still scans when part of it is smudged, printed small or partly covered, at the cost of a denser pattern.

No. They are static and contain your data directly — there is no redirect service, no tracking and no expiry date.

A PNG image, which prints cleanly and works anywhere. Pick a larger size if it will be printed big.

Neither. The PNG is just your QR code, and no account is required.

No. The code is generated on the fly for your request and nothing is saved afterwards.

Yes. Modern iPhone and Android cameras read standard QR codes natively, with no special app needed.

Yes. POST a JSON body to /api/tools/qr-code-generator/ and you get a JSON response back — the same engine the web tool uses, so results are identical. It is rate-limited per IP like the web version and needs no signup; API keys for higher limits are coming. See the API section above for ready-to-run curl, Python and JavaScript examples.