Skip to main content
The GetQR API is in beta and is available to selected workspaces. Details may change before the general release.
Each QR code has a qrType, and the type sets what data must contain. This guide lists the format of every type, a request body that works, and what you can still change once the code is printed. The examples are request bodies for Create a QR code. Send them like this:

All types at a glance

How a QR code resolves

Every QR code is a short link plus a payload. Two fields carry the content: Rules for every type:
  • Defaults. On create, an omitted or empty link.url becomes data, and you can leave out the whole link object. When both are sent and differ, link.url wins. Send them equal, or send only data.
  • What the image encodes. The image encodes the short link for every type except wifi. So you can change where a printed code leads, and its scans are tracked. A WiFi QR code encodes the network itself: you can’t change it after printing, and its scans aren’t tracked.
  • Schemes. link.url accepts only http:, https:, wifi:, mailto:, sms: and begin:. Anything else, including geo:, smsto:, matmsg: and tel:, gets 422 Invalid destination URL, even where data accepts it.
  • Empty data. An empty data skips the type check. For a redirect type, link.url must then be set, or the call gets 400 Missing destination URL.
  • Shape. Beyond the type check, the server doesn’t validate the payload. A JSON type only has to parse as a JSON object, and a vCard only has to start with BEGIN:VCARD.
Limits marked Builder below are what the dashboard editor enforces. The API accepts payloads that ignore them, but they may render oddly on the landing page or in the editor.

Website

qrType: "website". Dashboard guide: Website QR code.
Request body
Errors:
  • 422 Expected an http(s) URL, e.g. "https://example.com" for qrType "website".
  • 422 Invalid destination URL

Feedback

qrType: "feedback". Dashboard guide: Feedback QR code. data is the http(s) URL of the feedback form, for example a Google Form or a review page. Everything else works as for Website.
Request body

Payment

qrType: "payment". Dashboard guide: Payment QR code. data is the provider’s payment URL, for example:
The dashboard editor recognizes these hosts: paypal.me, paypal.com/paypalme, cash.app, venmo.com, buy.stripe.com, stripe.com, square.link and payoneer.com. For PayPal, the amount is the last path segment. Any other http(s) URL works too, but the editor won’t split it into provider and amount. Everything else works as for Website.
Request body

WhatsApp

qrType: "whatsapp". Dashboard guide: WhatsApp QR code. data is a wa.me link: the international number in digits without +, optionally with a prefilled text.
The server only checks for an http(s) URL. The dashboard also reads api.whatsapp.com/send links. Everything else works as for Website.
Request body

Location

qrType: "location". Dashboard guide: Location QR code. data is a map URL. Use this format to keep the QR code editable in the dashboard (query_place_id is optional):
Any other http(s) URL also redirects. A geo: URI passes the data check but is rejected as a destination, so don’t use it. Everything else works as for Website.
Request body
qrType: "app". Dashboard guide: App Link QR code.
Request body
Errors:
  • 422 Invalid URL
  • 400 Missing destination URL

Email

qrType: "email". Dashboard guide: Email QR code.
Request body
Errors:
  • 422 Expected a mailto URI, e.g. "mailto:[email protected]?subject=Hello" for qrType "email".

SMS

qrType: "sms". Dashboard guide: SMS QR code.
Request body
Errors:
  • 422 Expected an SMS URI, e.g. "sms:+14155550123?body=Hello" for qrType "sms".

WiFi

qrType: "wifi". Dashboard guide: WiFi QR code.
Request body
Errors:
  • 422 Expected a Wi-Fi payload, e.g. "WIFI:T:WPA;S:MyNetwork;P:secret;H:false;" for qrType "wifi".
Don’t switch the type of a printed WiFi QR code. The printed codes keep the old network.

PDF, image and video

qrType: "pdf", "image" or "video". Dashboard guides: PDF, Image, Video. One file per QR code: PDF bundles and image galleries aren’t available on the API. See Not supported via the API.
To upload the file and get its fileId, see Files.

vCard

qrType: "vcard". Dashboard guide: vCard QR code. The landing page and editor read only the line forms below. Other variants, such as TEL;CELL: or EMAIL;TYPE=INTERNET:, are stored but don’t appear on the page.
  • N:<last>;<first>;;;: last and first name. Builder: both required, up to 40 characters.
  • FN:<first> <last>: not read by the page. The dashboard list label comes from it.
  • ORG:<company> and TITLE:<role>: company and role. Builder: up to 40 characters.
  • TEL;TYPE=HOME:, TEL;TYPE=CELL:, TEL;TYPE=WORK:, TEL;TYPE=FAX:: phone, mobile, work and fax numbers (+ and digits).
  • EMAIL:<email>: email address.
  • URL:<url>: website.
  • NOTE:<text>: summary. Escape \\, \n, \; and \,. Builder: up to 200 characters.
  • ADR:;;<street>;<city>;<state>;<zip>;<country>: address.
  • X-SOCIALPROFILE;TYPE=<platform>:<url> or URL;TYPE=<PLATFORM>:<url>: social links, one line per platform.
  • PHOTO;VALUE=URI:<url>: profile image URL. Wins over any file ID.
  • X-GETQR-IMAGE-FILEID:<fileId>: profile image (logo target).
  • X-GETQR-PAGE-LOGO-FILEID:<fileId>: page logo (logo target).
  • X-GETQR-LANDING-THEME:p|<0-4> or X-GETQR-LANDING-THEME:c|#RRGGBB|#RRGGBB|#RRGGBB: landing theme, either a preset index (0 to 4) or custom background, button and icon colors.
Social platforms: facebook, whatsapp, instagram, youtube, tiktok, messenger, snapchat, linkedin, x, reddit, pinterest, telegram, wechat, viber, line.
Request body
Errors:
  • 422 Expected a vCard payload starting with "BEGIN:VCARD" for qrType "vcard".

Social Media

qrType: "social". Dashboard guide: Social Media QR code. Fields in data:
Request body
Errors:
  • 422 Expected a JSON object describing the social profile page for qrType "social".
qrType: "multilink". Dashboard guide: Multi-Link QR code. The fields in data are those of Social Media, except that firstName, lastName and summary are replaced by: In customItems, logoFileId is optional: a fallback icon is shown. Builder: at least one social link or one non-empty custom item.
Request body
Errors:
  • 422 Expected a JSON object describing the multi-link page for qrType "multilink".

Event

qrType: "event". Dashboard guide: Event QR code. Fields in data:
conference, seminar, workshop, training, webinar, meetup, networking, corporateEvent, productLaunch, tradeShow, jobFair, fundraiser, charity, wedding, engagement, birthday, anniversary, babyShower, graduation, reunion, party, religious, funeralMemorial, ceremony, concert, festival, clubNight, theater, comedy, filmScreening, exhibition, sports, tournament, raceMarathon, fitnessClass, foodDrink, market, openHouse, community, schoolEvent, kids, travelTour
Request body
Errors:
  • 422 Expected a JSON object describing the event page for qrType "event".

Files in QR codes

Register a file with Files, upload it, then pass its fileId. Use the target that matches the use:
  • pdf, image, video. The content of a PDF, image or video QR code.
  • logo. Profile images, page logos, custom-link icons and center logos.
Files that are never attached to a QR code are deleted after a grace period. fileId errors, returned on create and on PATCH when fileId is sent: File IDs inside a payload (fileId, pageLogoFileId, customItems[].logoFileId, X-GETQR-*-FILEID lines) aren’t validated. They only render when uploaded with the logo target. The QR code claims them, so cleanup leaves them alone.

Switching type

You can change qrType with Update a QR code. Send data that matches the new type: the stored payload belongs to the old type, so a switch without it is rejected. After an update, the destination is resolved in this order:
  1. vcard, social, multilink, event: always the hosted page.
  2. A PDF bundle or image gallery made in the dashboard: its landing page.
  3. pdf, image, video: the file URL (a new fileId, else the stored one).
  4. link.url, when sent.
  5. Changed data.
  6. The stored URL.
What each switch does:
  • Out of pdf, image or video. fileId and any bundle or gallery are cleared.
  • Into pdf, image or video. Send fileId too, or the stored one is reused, which may be a vCard photo.
  • Out of app. The app name, link.ios and link.android are cleared, so phones follow the new destination.
  • Into wifi. The image switches to the raw payload. Codes already printed still hold the short link, which now redirects to a wifi: URL.
  • Out of wifi. Printed codes keep their old network.
  • Into vcard, social, multilink or event. The short link is pointed at the new hosted page.
  • Out of vcard, social, multilink or event. Send the new data. The destination follows it.
Static QR codes made in the dashboard have no short link, so changing their link.url gets 422.

Not supported via the API

These dashboard features aren’t part of the v1 API. Unknown fields are dropped without an error, so sending them has no effect. Bundles and galleries made in the dashboard can still be read, paused and deleted through the API, but their files can’t be changed through it.

Common issues

link.url uses a scheme the short link can’t redirect to, such as geo:, smsto:, matmsg: or tel:. Use the formats on this page.
data is empty and there is no link.url. For app, set at least one of link.ios, link.android, link.url or data.
The page reads only the fields and line forms listed for the type. Other fields are stored but not shown.

What’s next

QR codes

Files

Customization

Access rules