Gå til indhold

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/codes accepterer kun typerne url, vcard, wifi, email, sms og location. Felterne er flade: url; mindst vcard_first_name eller vcard_last_name; wifi_ssid; email_to; sms_phone; eller location_lat og location_lng.
  • Kun url-koder kan være dynamiske. Oprettelsesanmodninger kan valgfrit indeholde expires_at som et ISO 8601-tidspunkt; ab_enabled, ab_target_url_b og ab_weight_a (A/B-destinationer) accepteres for dynamiske url-koder; redirect_after_expiry er ikke en del af oprettelseskontrakten.
  • GET /v1/codes understøtter kun limit, cursor og status (live, paused, flagged, draft).
  • POST /v1/codes/batch accepterer url, vcard og wifi. 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æves skip_url_scan: true.

Opret QR-kode

POST /v1/codes

Terminal window
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
}'

Response (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

TypeBeskrivelsePåkrævede felter
urlWebsite-URL (dynamisk eller statisk)url
vcardVisitkort (vCard 3.0)vcard_first_name eller vcard_last_name
wifiWi-Fi-konfigurationwifi_ssid
emailE-mail (mailto:)email_to
smsSMSsms_phone
locationLokation (geo:)location_lat, location_lng

Batch-oprettelse

POST /v1/codes/batch

Terminal window
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

Terminal window
curl https://qr3.app/v1/codes?status=live&limit=20 \
-H "Authorization: Bearer qr3_sk_..."

Query-parametre:

ParameterTypeStandardBeskrivelse
cursorstringCursor til paginering
limitinteger20Resultater pr. side (maks. 100)
statusstringFilter: live, paused, flagged, draft

Hent QR-kode

GET /v1/codes/:id

Terminal window
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.

Terminal window
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" }'

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; label er 1–100 tegn; url skal være http(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.

Terminal window
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.

FormatURLAnvendelse
SVG (vektor)/v1/codes/:code/qr.svgWeb, skalering, digital
PNG (raster)/v1/codes/:code/qr.pngE-mail, præsentationer
PDF (vektor)/v1/codes/:code/qr.pdfStandard: kvadratisk (kun koden); ?format=a4 til et printark
EPS (vektor)/v1/codes/:code/qr.epsProfessionelle 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)

Terminal window
# SVG für Web
curl https://qr3.app/v1/codes/r7f3Kx/qr.svg
# PNG in hoher Auflösung
curl 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-Blatt
curl "https://qr3.app/v1/codes/r7f3Kx/qr.pdf?format=a4" -o qr-a4.pdf

Kommentarer

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

Terminal window
# Kommentar hinzufügen
curl -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 auflisten
curl "https://qr3.app/v1/codes/qr_a1b2c3d4/comments?resolved=false" \
-H "Authorization: Bearer qr3_sk_..."
# Kommentar als erledigt markieren
curl -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 }'