REST API v1

QR Code API

Render styled QR codes and manage dynamic codes from your own apps (ERP, CRM, POS…).

Get an API key

Authentication

Send your key in the X-API-Key header (or ?apikey= for quick tests). Base URL: https://qr.psmsofttech.com/api/v1

curl -H "X-API-Key: psm_xxxxxxxxxxxxxxxx" https://qr.psmsofttech.com/api/v1/options

Quick render — GET /qr

Returns the image directly. Parameters: data (required), size, format (svg|pdf|eps), ecc (L|M|Q|H), body, eyeFrame, eyeBall, color, bgColor, template, logo (gallery key), margin, download.

curl -H "X-API-Key: psm_…" "https://qr.psmsofttech.com/api/v1/qr?data=https%3A%2F%2Fpsmsofttech.com&body=dots&eyeFrame=rounded&color=%234f46e5&logo=link&format=svg" -o qr.svg

Custom render — POST /qr/custom

Use a content type with fields (same names as the generator form) or raw data. Set base64: true to get JSON instead of a file.

POST /api/v1/qr/custom Content-Type: application/json X-API-Key: psm_… { "type": "vcard", "fields": { "firstName": "Pradeep", "lastName": "Mishra", "org": "PSM Softtech", "phoneMobile": "+919820000000" }, "template": "indigo-dots", "logo": "contact", "size": 1200, "format": "pdf", "download": true }

Create a saved code — POST /qrcodes

Creates a dynamic code (default) and returns its short URL and an SVG preview. File-based types (PDF, MP3, images, file, app stores) must be created in the dashboard.

{ "name": "Diwali offer", "type": "url", "fields": { "url": "https://shop.example.com/diwali" }, "dynamic": true, "folderId": null, "design": { "bodyShape": "rounded", "foregroundColor": "#0e0e12" } } → 201 { "id": 42, "shortUrl": "https://qr.psmsofttech.com/r/aB3xK9p", "encodedData": "…", "svg": "<svg…" }

List, get, update, delete

MethodPathDescription
GET/qrcodes?page=1&pageSize=50&folderId=&search=List saved codes
GET/qrcodes/{id}Details incl. fields and design
PUT/qrcodes/{id}Change name / fields / design of a dynamic code
DELETE/qrcodes/{id}Delete a code
GET/qrcodes/{id}/image?format=svg&size=1000Render a saved code
GET/optionsContent types, shapes, templates, logos

Statistics — GET /qrcodes/{id}/stats?from=2026-09-01&to=2026-09-30

{ "totalScans": 128, "uniqueScans": 97, "perDay": [ { "day": "2026-09-01", "scans": 4, "uniqueScans": 3 } ], "operatingSystems": [ { "label": "Android", "scans": 80 } ], "devices": [...], "browsers": [...], "countries": [...] }

Design object

bodyShapesquare, mosaic, dots, small-dots, rounded, extra-rounded, classy, classy-rounded, leaf, diamond, star, cross, edge-cut, h-lines, v-lines
eyeFrameShapesquare, rounded, extra-rounded, circle, leaf, leaf-alt, cushion, edge-cut, dotted
eyeBallShapesquare, rounded, circle, leaf, leaf-alt, cushion, diamond, star, edge-cut, dots, plus
foregroundColor, backgroundColor#rrggbb; transparentBackground: true/false
gradientTypenone | linear | radial, with gradientColor1, gradientColor2, gradientAngle, gradientOnEyes
customEyeColor, eyeColorsarray of 3 { "frame": "#…", "ball": "#…" }
logoDataUri, logoSize, logoRemoveBackground, logoPlatedata:image/… URI, 0.10–0.35
frameStyle, frameText, frameColor, frameTextColornone | box | banner-bottom | banner-top | balloon
margin, errorCorrection0–8 modules; L | M | Q | H

For PDF/EPS with a PNG/SVG logo, also send logoJpeg (base64 JPEG of the logo), because vector formats embed JPEG images.

Errors & limits

400 validation error ({"error": "…"}), 401 missing/invalid key, 404 not found, 429 rate limit (default 60 requests per minute per key).

C# example

using var http = new HttpClient { BaseAddress = new Uri("https://qr.psmsofttech.com/api/v1/") }; http.DefaultRequestHeaders.Add("X-API-Key", "psm_…"); var body = new { type = "url", fields = new { url = "https://psmsofttech.com" }, template = "sunset", format = "svg", size = 800 }; var res = await http.PostAsJsonAsync("qr/custom", body); await File.WriteAllBytesAsync("qr.svg", await res.Content.ReadAsByteArrayAsync());