HonestQR API v1
Crie códigos QR e leia estatísticas de escaneamento programaticamente. Obtenha uma API key no painel (seção de chaves API) e envie-a como token Bearer.
URL base: https://qr.zalize.com
Autenticação: Authorization: Bearer hqr_…
Limite de requisições: 60 requisições por minuto por API key (HTTP 429 ao exceder).
Renderizar um código QR estático
GET /api/v1/static — retorna a imagem diretamente. Nada é armazenado; códigos estáticos nunca expiram. Parâmetros: data (obrigatório, máx. 2048 caracteres), format (png padrão ou svg), size (px, 128–4096, padrão 1024).
curl -H "Authorization: Bearer $HONESTQR_KEY" \
"https://qr.zalize.com/api/v1/static?data=https%3A%2F%2Fexample.com&format=png&size=1024" \
-o qr.png
curl -H "Authorization: Bearer $HONESTQR_KEY" \
"https://qr.zalize.com/api/v1/static?data=https%3A%2F%2Fexample.com&format=svg" \
-o qr.svgCriar um código QR dinâmico
POST /api/v1/qrcodes — cria um link curto editável (https://qr.zalize.com/r/<slug>) e retorna as URLs de imagem. Campos do body: target_url (obrigatório), name, folder. O plano grátis inclui 3 códigos dinâmicos.
curl -X POST https://qr.zalize.com/api/v1/qrcodes \
-H "Authorization: Bearer $HONESTQR_KEY" \
-H "Content-Type: application/json" \
-d '{"target_url": "https://example.com/menu", "name": "Menu"}'{
"qrcode": { "id": "…", "slug": "abc1234", "short_url": "https://qr.zalize.com/r/abc1234", … },
"image_png": "https://qr.zalize.com/api/v1/qrcodes/<id>/image?format=png",
"image_svg": "https://qr.zalize.com/api/v1/qrcodes/<id>/image?format=svg"
}Exemplo em JavaScript
Funciona no Node.js 18+ e em qualquer runtime com fetch (Workers, Deno, Bun; navegadores apenas via proxy de backend — nunca envie sua chave ao cliente).
const BASE = 'https://qr.zalize.com';
const headers = {
Authorization: `Bearer ${process.env.HONESTQR_KEY}`,
'Content-Type': 'application/json',
};
// Create a dynamic code
const res = await fetch(`${BASE}/api/v1/qrcodes`, {
method: 'POST',
headers,
body: JSON.stringify({ target_url: 'https://example.com/menu', name: 'Menu' }),
});
if (!res.ok) throw new Error(`HonestQR ${res.status}: ${(await res.json()).error}`);
const { qrcode } = await res.json();
// Fetch its stats later
const stats = await (await fetch(`${BASE}/api/v1/qrcodes/${qrcode.id}/stats`, { headers })).json();
console.log(qrcode.short_url, stats.total);Exemplo em Python
import os, requests
BASE = "https://qr.zalize.com"
HEADERS = {"Authorization": f"Bearer {os.environ['HONESTQR_KEY']}"}
# Render a static QR code (never stored, never expires)
png = requests.get(
f"{BASE}/api/v1/static",
params={"data": "https://example.com", "format": "png", "size": 1024},
headers=HEADERS,
)
png.raise_for_status()
open("qr.png", "wb").write(png.content)
# Create a dynamic code
r = requests.post(
f"{BASE}/api/v1/qrcodes",
json={"target_url": "https://example.com/menu", "name": "Menu"},
headers=HEADERS,
)
r.raise_for_status()
print(r.json()["qrcode"]["short_url"])Baixar a imagem de um código dinâmico
GET /api/v1/qrcodes/:id/image — parâmetros format (png/svg) e size.
curl -H "Authorization: Bearer $HONESTQR_KEY" \
"https://qr.zalize.com/api/v1/qrcodes/<id>/image?format=svg" -o menu.svgListar seus códigos QR
GET /api/v1/qrcodes
curl -H "Authorization: Bearer $HONESTQR_KEY" https://qr.zalize.com/api/v1/qrcodesEstatísticas de escaneamento
GET /api/v1/qrcodes/:id/stats — totais e detalhamento por dia (últimos 30 dias), país e dispositivo.
curl -H "Authorization: Bearer $HONESTQR_KEY" https://qr.zalize.com/api/v1/qrcodes/<id>/statsErros
Todos os erros são JSON: {"error": "…"}.
| Status | Significado | O que fazer |
|---|---|---|
400 | Requisição inválida (parâmetro ausente/inválido) | Verifique a mensagem error; corrija o parâmetro. |
401 | API key ausente ou inválida | Envie Authorization: Bearer hqr_…; gere a chave novamente no painel se foi revogada. |
402 | Limite do plano atingido (plano grátis: 3 códigos dinâmicos) | Exclua códigos sem uso ou faça upgrade para o Pro. |
404 | Código QR não encontrado (ou pertence a outra conta) | Confira o id com GET /api/v1/qrcodes. |
429 | Limite de requisições (60/minuto por chave) | Aguarde um minuto e tente de novo; agrupe leituras quando possível. |
Prefere incorporar sem código?
Você também pode colocar o gerador completo no seu próprio site como um widget incorporável gratuito — um snippet, sem API key.
Usando um agente de IA?
O HonestQR também oferece um servidor MCP gratuito para que Claude, Cursor e outros clientes MCP gerem e decodifiquem códigos QR diretamente — sem API key.