Everything the QR code generator
does, as one GET request. No account, no API key — the URL is the image,
so you can drop it straight into an <img> tag, a README, or an email
signature.
GET https://in.bio/api/qr
Request
The response is the raw image, so a request is just a URL with query
parameters. type chooses what the code encodes; the style parameters control
how it looks.
Payload
type selects the payload; each type reads its own fields from the query
string (the same fields as the generator UI).
type |
Fields |
|---|---|
url (default) |
url |
text |
text |
email |
to, subject, body |
phone |
phone |
sms |
phone, body |
whatsapp |
phone, text |
wifi |
ssid, password, encryption (WPA / WEP / nopass) |
vcard |
name, org, title, phone, email, url |
crypto |
coin (e.g. bitcoin, ethereum), address, amount |
Style
| Param | Values | Default |
|---|---|---|
format |
png, svg |
png |
size |
64–2048 (px) |
512 |
dot_style |
square, dots, rounded |
square |
marker_shape |
square, rounded, circle |
square |
marker_center |
square, dot |
square |
foreground |
6-digit hex, # optional |
000000 |
marker_color |
6-digit hex, # optional |
foreground |
transparent |
1 for a transparent background |
0 |
download |
1 to force a file download |
0 |
<img
src="https://in.bio/api/qr?url=https://example.com&dot_style=dots&marker_shape=circle&foreground=1a56db"
alt="QR code"
width="256"
/># Wi-Fi QR code, SVG, rounded dots
curl -o wifi.svg \
"https://in.bio/api/qr?type=wifi&ssid=MyNetwork&password=secret123&format=svg&dot_style=rounded"
# vCard contact, transparent PNG at 1024px
curl -o card.png \
"https://in.bio/api/qr?type=vcard&name=Ada%20Lovelace&org=INBIO&size=1024&transparent=1"const params = new URLSearchParams({
url: "https://example.com",
dot_style: "dots",
marker_shape: "circle",
foreground: "1a56db",
});
const res = await fetch(`https://in.bio/api/qr?${params}`);
const blob = await res.blob(); // image/pngResponse
200 OK with the raw image bytes — no JSON wrapper.
| Header | Value |
|---|---|
Content-Type |
image/png, or image/svg+xml when format=svg |
Content-Disposition |
inline by default; attachment when download=1 |
Cache-Control |
public, max-age=86400 (cached for a day) |
Errors
| Status | When |
|---|---|
422 Unprocessable Entity |
A style or payload field is invalid — standard JSON validation errors naming the field. |
429 Too Many Requests |
Rate limit reached (30 requests/minute per IP). |
Want scan tracking?
A QR code from this endpoint encodes your URL directly, so scans go straight to the destination — untracked. To count scans, shorten the link first (also free and keyless) and generate the QR code for the short URL, or create the link from a free account where every link’s QR code and scan analytics live together.