QR-koder API
Oversigt
Codes-API’en er hjertet i qr3.app. Med den kan du oprette, opdatere og slette dynamiske og statiske QR-koder.
Basis-URL: https://qr3.app/v1/codes
Bindende REST-kontrakt
Følgende kontrakt gælder for alle klienter:
POST /v1/codesaccepterer kun typerneurl,vcard,wifi,email,smsoglocation. Felterne er flade:url; mindstvcard_first_nameellervcard_last_name;wifi_ssid;email_to;sms_phone; ellerlocation_latoglocation_lng.- Kun
url-koder kan være dynamiske. Oprettelsesanmodninger kan valgfrit indeholdeexpires_atsom et ISO 8601-tidspunkt;ab_enabled,ab_target_url_bogab_weight_a(A/B-destinationer) accepteres for dynamiskeurl-koder;redirect_after_expiryer ikke en del af oprettelseskontrakten. GET /v1/codesunderstøtter kunlimit,cursorogstatus(live,paused,flagged,draft).POST /v1/codes/batchacceptererurl,vcardogwifi. Grænsen er 10 for Free, 500 for Pro og 1.000 poster for Business/Agency/Enterprise pr. anmodning. URL-scanninger kører synkront for højst 50 URL-poster; over 50 krævesskip_url_scan: true.
Opret QR-kode
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,q1Response (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-kodetyper
| Type | Beskrivelse | Påkrævede felter |
|---|---|---|
url | Website-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-mail (mailto:) | email_to |
sms | SMS | sms_phone |
location | Lokation (geo:) | location_lat, location_lng |
Batch-oprettelse
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 }'Response (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 }}QR-kodeliste
GET /v1/codes
curl https://qr3.app/v1/codes?status=live&limit=20 \ -H "Authorization: Bearer qr3_sk_..."Query-parametre:
| Parameter | Type | Standard | Beskrivelse |
|---|---|---|---|
cursor | string | — | Cursor til paginering |
limit | integer | 20 | Resultater pr. side (maks. 100) |
status | string | — | Filter: live, paused, flagged, draft |
Hent QR-kode
GET /v1/codes/:id
curl https://qr3.app/v1/codes/qr_a1b2c3d4 \ -H "Authorization: Bearer qr3_sk_..."Opdater QR-kode
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.
Dynamiske QR-koder gør det muligt at ændre destinations-URL’en når som helst — uden at skulle genprinte 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" }'Landingsside & eksterne links
For dynamiske url-koder kan du angive is_landing_page: true (ved oprettelse eller via PATCH). En scanning vil derefter vise en side hostet af qr3 med kodens offentlige filer og eksterne links i stedet for at viderestille. Eksterne links overføres som et 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 links pr. kode;
labeler 1–100 tegn;urlskal værehttp(s)(≤ 2048 tegn). - Hver URL kontrolleres med Google Web Risk — en usikker URL returnerer
422. - Hvis Web Risk ikke er tilgængelig under lagring, accepteres linket stadig, men markeres til fornyet kontrol. Et dagligt job kontrollerer gemte links igen (og tjekker regelmæssigt links, der tidligere blev klassificeret som sikre) og sætter automatisk koden på pause, hvis et link senere identificeres som usikkert.
"links": []sletter alle links. Se vejledningen til landingssider.
Slet QR-kode
DELETE /v1/codes/:id
Soft-delete — QR-koden arkiveres, scanningsdata bevares.
curl -X DELETE https://qr3.app/v1/codes/qr_a1b2c3d4 \ -H "Authorization: Bearer qr3_sk_..."Download QR-billeder
Alle billedformater er offentligt tilgængelige — ingen godkendelse påkrævet.
| Format | URL | Anvendelse |
|---|---|---|
| SVG (vektor) | /v1/codes/:code/qr.svg | Web, skalering, digital |
| PNG (raster) | /v1/codes/:code/qr.png | E-mail, præsentationer |
| PDF (vektor) | /v1/codes/:code/qr.pdf | Standard: kvadratisk (kun koden); ?format=a4 til et printark |
| EPS (vektor) | /v1/codes/:code/qr.eps | Professionelle print-workflows (Adobe, trykkerier) |
Valgfrit: ?size=N — modulstørrelse i pixels (2–20, standard: 4) for SVG, PNG og EPS. PDF’en bruger en fast modulstørrelse.
Kun PDF: ?format=a4|square — sideformat (standard: square — kun kode + quiet zone, intet hvidt A4-område; a4 til et printklart 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 muliggør feedback-loops mellem bureauer og 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 }'