QR-koder API
Bindande REST-avtal
Följande avtal gäller för alla klienter:
POST /v1/codesaccepterar endast typernaurl,vcard,wifi,email,smsochlocation. Fälten är platta:url; minstvcard_first_nameellervcard_last_name;wifi_ssid;email_to;sms_phone; eller bådelocation_latochlocation_lng.- Endast
url-koder kan vara dynamiska. Skapandeförfrågningar kan valfritt inkluderaexpires_atsom en ISO 8601-tidsstämpel;ab_enabled,ab_target_url_bochab_weight_a(A/B-destinationer) accepteras för dynamiskaurl-koder;redirect_after_expiryingår inte i skapandekontraktet. GET /v1/codesstöder endastlimit,cursorochstatus(live,paused,flagged,draft).POST /v1/codes/batchaccepterarurl,vcardochwifi. Gränsen är 10 för Free, 500 för Pro och 1 000 poster för Business/Agency/Enterprise per begäran. URL-skanningar körs synkront för högst 50 URL-objekt; över 50 krävsskip_url_scan: true.
Översikt
Codes-API är hjärtat i qr3.app. Med den skapar, uppdaterar och raderar du dynamiska och statiska QR-koder.
Bas-URL: https://qr3.app/v1/codes
Skapa QR-kod
POST /v1/codes
curl -X POST https://qr3.app/v1/codes \ -H "Authorization: Bearer qr3_sk_..." \ -H "Content-Type: application/json" \ -d '{ "type": "url", "url": "https://example.com", "title": "Mein erster QR-Code", "tags": ["marketing", "q1"], "is_dynamic": true }'const code = await qr3.codes.create({ type: 'url', url: 'https://example.com', title: 'Mein erster QR-Code', tags: ['marketing', 'q1'], is_dynamic: true,});qr3 create https://example.com --title "Mein QR-Code" --tags marketing,q1Svar (HTTP 201):
{ "data": { "id": "qr_a1b2c3d4", "short_code": "r7f3Kx", "redirect_url": "https://qr3.app/r7f3Kx", "image_svg_url": "https://qr3.app/v1/codes/r7f3Kx/qr.svg", "image_png_url": "https://qr3.app/v1/codes/r7f3Kx/qr.png", "image_pdf_url": "https://qr3.app/v1/codes/r7f3Kx/qr.pdf", "image_eps_url": "https://qr3.app/v1/codes/r7f3Kx/qr.eps", "type": "url", "target_url": "https://example.com", "is_dynamic": true, "status": "live", "tags": ["marketing", "q1"], "total_scans": 0, "created_at": "2026-03-15T10:00:00.000Z" }, "meta": { "request_id": "req_xyz123" }}QR-kodtyper
| Typ | Beskrivning | Obligatoriska fält |
|---|---|---|
url | Webbplats-URL (dynamisk eller statisk) | url |
vcard | Visitkort (vCard 3.0) | vcard_first_name eller vcard_last_name |
wifi | Wi-Fi-konfiguration | wifi_ssid |
email | E-post (mailto:) | email_to |
sms | SMS | sms_phone |
location | Plats (geo:) | location_lat, location_lng |
Batch-skapande
POST /v1/codes/batch
curl -X POST https://qr3.app/v1/codes/batch \ -H "Authorization: Bearer qr3_sk_..." \ -H "Content-Type: application/json" \ -d '{ "items": [ { "type": "url", "url": "https://produkt-1.example.com", "tags": ["batch"] }, { "type": "url", "url": "https://produkt-2.example.com", "tags": ["batch"] }, { "type": "wifi", "wifi_ssid": "GastWLAN", "wifi_password": "geheim123" } ], "skip_url_scan": false }'Svar (HTTP 201):
{ "data": { "created": [ { "id": "qr_...", "short_code": "abc123", "redirect_url": "https://qr3.app/abc123" }, { "id": "qr_...", "short_code": "def456", "redirect_url": "https://qr3.app/def456" }, { "id": "qr_...", "short_code": "ghi789", "status": "live" } ], "total": 3, "failed": 0 }}Lista QR-koder
GET /v1/codes
curl https://qr3.app/v1/codes?status=live&limit=20 \ -H "Authorization: Bearer qr3_sk_..."Query-parametrar:
| Parameter | Typ | Standard | Beskrivning |
|---|---|---|---|
cursor | string | — | Cursor för paginering |
limit | integer | 20 | Resultat per sida (max 100) |
status | string | — | Filter: live, paused, flagged, draft |
Hämta QR-kod
GET /v1/codes/:id
curl https://qr3.app/v1/codes/qr_a1b2c3d4 \ -H "Authorization: Bearer qr3_sk_..."Uppdatera QR-kod
PATCH /v1/codes/:id
Update contract: url may be changed only for an existing type: "url" code, and its value must use http:// or https://. Other code types must not receive url; invalid requests return 422.
Dynamiska QR-koder gör det möjligt att ändra mål-URL:en när som helst — utan att behöva trycka om QR-koden.
curl -X PATCH https://qr3.app/v1/codes/qr_a1b2c3d4 \ -H "Authorization: Bearer qr3_sk_..." \ -H "Content-Type: application/json" \ -d '{ "url": "https://neue-zielseite.example.com", "status": "live" }'Landningssida & externa länkar
För dynamiska url-koder kan du ställa in is_landing_page: true (vid skapande eller via PATCH). En skanning visar då en sida som qr3 är värd för med kodens offentliga filer och externa länkar, istället för att omdirigera. Externa länkar skickas som en links-array:
{ "is_landing_page": true, "links": [ { "label": "Datenblatt", "url": "https://example.com/datenblatt.pdf" }, { "label": "Zertifikat", "url": "https://example.com/zertifikat.pdf" } ]}- 0–20 länkar per kod;
labelär 1–100 tecken;urlmåste varahttp(s)(≤ 2048 tecken). - Varje URL kontrolleras med Google Web Risk — en osäker URL returnerar
422. - Om Web Risk inte är tillgängligt vid sparning accepteras länken ändå, men markeras för ny kontroll. Ett dagligt jobb kontrollerar sparade länkar igen (och kontrollerar regelbundet länkar som klassificerats som säkra) och pausar koden automatiskt om en länk senare identifieras som osäker.
"links": []raderar alla länkar. Se guiden för landningssidor.
Radera QR-kod
DELETE /v1/codes/:id
Soft-delete — QR-koden arkiveras, skanningsdata bevaras.
curl -X DELETE https://qr3.app/v1/codes/qr_a1b2c3d4 \ -H "Authorization: Bearer qr3_sk_..."Ladda ner QR-bilder
Alla bildformat är offentligt tillgängliga — ingen autentisering krävs.
| Format | URL | Användning |
|---|---|---|
| SVG (vektor) | /v1/codes/:code/qr.svg | Webb, skalning, digitalt |
| PNG (raster) | /v1/codes/:code/qr.png | E-post, presentationer |
| PDF (vektor) | /v1/codes/:code/qr.pdf | Standard: kvadratisk (endast koden); ?format=a4 för ett utskriftsblad |
| EPS (vektor) | /v1/codes/:code/qr.eps | Professionella tryckarbetsflöden (Adobe, tryckerier) |
Valfritt: ?size=N — Modulstorlek i pixlar (2–20, standard: 4) för SVG, PNG och EPS. PDF:en använder en fast modulstorlek.
Endast PDF: ?format=a4|square — Sidformat (standard: square — endast kod + tyst zon (quiet zone), inget vitt utrymme för A4; a4 för ett utskriftsklart A4-ark)
# SVG für Webcurl https://qr3.app/v1/codes/r7f3Kx/qr.svg
# PNG in hoher Auflösungcurl https://qr3.app/v1/codes/r7f3Kx/qr.png?size=10 -o qr-hires.png
# Kompaktes PDF (nur der Code, Standard)curl https://qr3.app/v1/codes/r7f3Kx/qr.pdf -o qr.pdf
# Druckfertiges A4-Blattcurl "https://qr3.app/v1/codes/r7f3Kx/qr.pdf?format=a4" -o qr-a4.pdfKommentarer
Kommentarer möjliggör feedback-loopar mellan byråer och kunder.
GET /v1/codes/:id/comments
POST /v1/codes/:id/comments
PATCH /v1/codes/:id/comments/:commentId
DELETE /v1/codes/:id/comments/:commentId
# Kommentar hinzufügencurl -X POST https://qr3.app/v1/codes/qr_a1b2c3d4/comments \ -H "Authorization: Bearer qr3_sk_..." \ -H "Content-Type: application/json" \ -d '{ "body": "QR-Code bitte auf grünen Hintergrund abstimmen.", "author_name": "Max Müller" }'
# Offene Kommentare auflistencurl "https://qr3.app/v1/codes/qr_a1b2c3d4/comments?resolved=false" \ -H "Authorization: Bearer qr3_sk_..."
# Kommentar als erledigt markierencurl -X PATCH https://qr3.app/v1/codes/qr_a1b2c3d4/comments/cmt_xyz \ -H "Authorization: Bearer qr3_sk_..." \ -H "Content-Type: application/json" \ -d '{ "resolved": true }'