POST /api/v1/qr/render/draft
Render a draft preview
Synchronously validate a request and return the SVG markup and hashes without queueing a job. Requires the qr:render scope when a key is sent.
The generator and the API share one request model. Submit a render, poll the job, then download the SVG or PNG.
POST /api/v1/qr/render/draft
Synchronously validate a request and return the SVG markup and hashes without queueing a job. Requires the qr:render scope when a key is sent.
POST /api/v1/qr/render
Submit the content route, visual styling, and output settings. The API returns a queued job with a status URL.
GET /api/v1/qr/jobs/{jobId}
Retrieve the current status, resolved payload, timestamps, hashes, and any rendered SVG or PNG artifacts.
GET /api/v1/qr/jobs/{jobId}/artifacts/{format}
Fetch the persisted SVG or PNG output after the worker completes the render job.
GET /api/v1/qr/content-types
Return every content type the API accepts, so clients can stay in sync without hard-coding the list.
The web builder works without an account. For server integrations, create an API key or access token in the developer console. Credentials need an active paid plan.
Start with a link QR, then add gradients, dotted data modules, or a centered logo when needed.
const response = await fetch("https://api.halfqr.com/api/v1/qr/render", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.HALFQR_API_KEY}`,
"Accept": "application/json",
"Content-Type": "application/json"
},
body: JSON.stringify({
contentType: "Link",
targetUrl: "https://computemore.com",
payload: {},
errorCorrectionLevel: "H",
output: { sizePx: 1024 },
finder: { borderShape: "Rounded", centerShape: "Circle" },
colors: { dark: "#10243C", light: "#FFFFFF" },
data: {
pattern: "Dotted",
gradientMode: "Linear",
gradientStart: "#F36D2C",
gradientEnd: "#1F61C0",
gradientRotation: 135
}
})
});