QR 스튜디오

QR 생성 API

인증 없이 호출할 수 있는 이미지 생성 API 입니다. 같은 파라미터는 항상 같은 이미지를 돌려주므로 GET 응답은 1년 캐시(immutable)됩니다. CORS 가 열려 있어 다른 사이트에서도 바로 쓸 수 있습니다.

엔드포인트

GET/api/qr?data=...&style=...쿼리스트링
POST/api/qrJSON 본문 · 캐시 안 함

응답은 이미지 바이트입니다 (image/png 또는 image/svg+xml).

파라미터

datastring
QR 에 담을 내용 (URL, 텍스트). 최대 2000자. 길수록 칸이 촘촘해집니다.기본값 필수
formatpng | svg
출력 형식. 인쇄에는 svg 를 권장합니다.기본값 png
sizenumber
PNG 한 변 픽셀 (64–4096). SVG 는 width/height 속성으로 들어갑니다.기본값 1024
stylesquare | dots | rounded
모듈 모양. rounded 는 이웃 칸끼리 이어지는 리퀴드 모양입니다.기본값 square
eyesquare | rounded | circle
모서리 위치 마커(파인더) 모양.기본값 square
fghex
코드 색. # 은 빼거나 %23 으로 인코딩합니다.기본값 111111
fg2hex
그라디언트 끝 색. gradient 와 함께 씁니다.기본값 -
gradientnone | diagonal | horizontal | vertical | radial
코드 색 그라디언트 방향.기본값 none
bgtransparent | hex
배경. 기본은 투명입니다.기본값 transparent
plateboolean
코드 뒤에 둥근 판을 깔고 판 바깥은 투명하게 둡니다. 어두운 바탕에 붙일 때 권장.기본값 false
plateColorhex
판 색.기본값 ffffff
logostring
가운데 배지 글자 (4글자 이하, 한글 가능). 지정하면 오류정정이 H 로 고정됩니다.기본값 -
logoBghex
배지 색.기본값 fg 와 같음
logoFghex
배지 글자 색.기본값 ffffff
eccauto | L | M | Q | H
오류정정 레벨. auto 는 사각형이면 M, 꾸민 모양이면 H.기본값 auto
marginnumber
바깥 여백 칸 수 (0–16). 스캔 안정성을 위해 4 이상 권장.기본값 4
downloadboolean
1 이면 Content-Disposition: attachment 로 내려받기를 유도합니다.기본값 false

예시

HTML 에 바로 넣기

<img src="https://qr.core.today/api/qr?data=https%3A%2F%2Faiart.ulsan.ai%2F&style=dots&eye=rounded&fg=7c3aed&fg2=2563eb&gradient=diagonal" alt="QR" />

curl (GET) — 검은 바탕용 흰 판 PNG

curl -o qr.png "https://qr.core.today/api/qr?data=https%3A%2F%2Faiart.ulsan.ai%2F&style=dots&eye=rounded&fg=7c3aed&plate=1&size=2048"

curl (POST) — 로고 넣은 SVG

curl -X POST https://qr.core.today/api/qr \
  -H "Content-Type: application/json" \
  -d '{
    "data": "https://aiart.ulsan.ai/",
    "format": "svg",
    "style": "rounded",
    "eye": "rounded",
    "fg": "#ec4899", "fg2": "#7c3aed", "gradient": "diagonal",
    "logo": "AI", "logoBg": "#7c3aed"
  }' -o qr.svg

JavaScript

const res = await fetch("https://qr.core.today/api/qr", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ data: "https://core.today", style: "dots", size: 512 }),
});
if (!res.ok) throw new Error((await res.json()).error);
const blob = await res.blob(); // image/png

오류

잘못된 파라미터는 400 과 함께 JSON 을 돌려줍니다.

{
  "error": "잘못된 파라미터입니다",
  "issues": [{ "path": "fg", "message": "색상은 #rrggbb 형식이어야 합니다" }]
}

내용이 QR 용량을 넘으면 {"error":"데이터가 너무 길어 QR 코드에 담을 수 없습니다"} (400) 입니다.

잘 읽히게 만드는 요령