TEASEDocs
ProductsLinkQR codes

Create a QR code for print

Issue a new carrier — the domain's main /qr code or a named /qr/<slug> — with a design or preset.

Every domain can hand out printable QR codes that lead straight to its landing page. Each one gets its own scan path: leave the slug empty for the domain's main code at /qr, or name it for a /qr/<slug> code — one physical carrier per code (a flyer, a sticker, a specific ad placement) so each can be measured on its own.

Before you start

The domain has to exist already — creating a code resolves the domain first and 404s with domain_not_found if it doesn't. Nothing here touches the domain's draft/publish cycle: a QR code is live the moment it's created.

Create the code

curl -X POST https://app.tease.link/api/admin/qr/links.creator.com \
  -H "Authorization: Bearer $TEASE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "title": "Club flyer", "slug": "flyer", "channel": "instagram", "preset": "rounded-insta" }'
FieldTypeRequiredDescription
titlestringyesDisplay name of the medium, 1–128 characters (e.g. Club flyer).
slugstringno"" (default) = the domain's main code at /qr; otherwise the /qr/<slug> path — 1–32 characters of [a-z0-9_-], starting with a letter or digit.
channelstringnoA tag for grouping (instagram, twitter, …) — doesn't affect the redirect.
designobjectnoA full design config — see Design a QR code. Wins over preset when both are sent.
presetstringnoA catalog design id from GET /api/admin/qr/presets. Omit both design and preset for the stock look.

The response carries the code's id, its public path, and its source label — the tag every scan, visit, click, and payment attributed to this code will carry from now on.

How to know it worked

path in the response (/qr/flyer, or /qr for the main code) is what the printed carrier should encode as https://<domain><path>. Point a phone camera at the finished artwork before sending it to print — a real scan should 302 you to the landing page. The panel's list for the domain (GET /api/admin/qr/{domain}) should show the new code with all-zero stats.

If it didn't work

  • 400 slug_taken — that path is already used by another code on this domain. Pick a different slug, or edit the existing code instead of creating a duplicate.
  • 400 slug_invalid — the slug has to be 1–32 characters of lowercase letters, digits, _ or -, starting with a letter or digit.
  • 404 domain_not_found — the domain string doesn't match a connected domain on your account; double check spelling and that the domain has finished connecting.
  • 400 design_invalid or 404 preset_not_found — see Design a QR code for the full set of valid keys and values.

Once you have a code, the design piece — presets vs. a fully custom look — is its own step; see Design a QR code next.

What's next

On this page