Download every QR code of a campaign as one ZIP

THE CALL, PART BY PART

method

GET

host

strait.link

version

/v1

resource

/qr.zip

GET /v1/qr.zip

Auth: secret key as Authorization: Bearer. Server-side only.

Request

A ZIP with one QR code per live link whose campaign is campaign (case-insensitive, the same match as the dashboard's links filter), named <slug>-qr.<format> and sorted by slug. Same style rules as GET /v1/links/{slug}/qr: the workspace default or preset, overridden by color / background / logo, refused (400) when it would not scan. SVG by default (vector, for print). At most 500 codes as SVG, or 50 as PNG at up to 1024 px. Rate limit: 3 ZIPs a minute per workspace; one PNG ZIP at a time server-wide.

Parameters

campaign required string query
The links' campaign name, e.g. diwali_sale
format "svg" | "png" query
Image format of every code
size integer query
Width and height in pixels (PNG: at most 1024)
margin integer query
Quiet zone around each code, in modules
preset string query
A saved QR style id (Settings → QR codes)
color string query
Code colour as hex, overrides the style
background string query
Background colour as hex, overrides the style
logo boolean query
Put the app icon in the middle, overrides the style
track boolean query
Add utm_source=qr so scans count as the qr channel
tenantId string query
Dashboard sessions only: the workspace id

Response

  • 200 The ZIP (stored, not compressed)
  • 400 No campaign, unknown preset, colours that would not scan, PNG over 1024 px, or more links than the ZIP holds
  • 401 Missing or invalid secret key / session
  • 404 No live links in this campaign
  • 429 More than 3 ZIPs a minute for this workspace, or another PNG ZIP is being made
  • 503 PNG rendering stayed busy for 30 s; retry or use SVG
Request · curl
curl -X GET "https://strait.link/v1/qr.zip?campaign=value" \
  -H "Authorization: Bearer $SECRET_KEY"

The response, printed

Response 200 (no body)
HTTP/1.1 200 OK