Printago API

QR tag link format

Printago tags identify printers, slots, filament, spools, and blanks. A tag's saved record determines its type. Optional fields in a link describe the label; scanning them never edits your catalog or inventory.

IDs and issuers

New Printago IDs have a registered issuer prefix, a dash, and 20 Crockford base32 characters:

PTG-7K3QX9MP2W4HC8RT5N6V

The alphabet is 0123456789ABCDEFGHJKMNPQRSTVWXYZ (no I, L, O, or U). Printago uses cryptographically random bytes masked to five bits. PTG is the only registered prefix. Contact Printago before using another issuer prefix; unregistered prefixes return unknown_issuer.

New-format IDs are case-insensitive. Legacy IDs, including cuid2 IDs and custom IDs such as shelf-26f1d5, retain their exact case. A label also prints a short code: the last eight ID characters grouped in fours, such as C8RT-5N6V (a spool keeps its own label code). Resolve accepts it in place of a link, so a label whose QR won't read can be typed in. It is looked up only among the current store's tags. Codes are short, so two of a store's tags can share one; resolve then returns unknown_tag with a message to scan the QR instead. Use the full ID for anything else.

Registered prefixes are reserved. An ID starting with PTG- in any case must have exactly 20 characters from the alphabet above. Malformed IDs return unsupported_version, including when submitted directly to execute, and cannot be set up as blank tags. Readers do not substitute I, L, or O for digits.

Links

HTTPS://APP.PRINTAGO.IO/QR/PTG-7K3QX9MP2W4HC8RT5N6V

The API supplies the complete printable payload. Use it directly. New labels use the configured web host, with an uppercase scheme, host, path, ID, and field values. Readers accept any case. Keep the entire link uppercase to fit QR alphanumeric mode; HTTPS links use only 0-9 A-Z : / . -.

Fields are slash-separated KEY:VALUE segments and can appear in any order:

Key Value Example
S Store ID: 24 letters or digits, read as lowercase. Only on labels printed before October 2026; new links leave it out S:ABCDEFGHIJKLMNOPQRSTUVWX
M Material designation, using letters, digits, dots, or dashes M:PLA
C Hex colors with six RGB or eight RGBA digits each, separated by dots C:00AE42.FFFFFF
G Positive whole-number nominal weight in grams G:1000
D Positive decimal filament diameter in millimeters D:1.75
B Brand token, using letters, digits, dots, or dashes B:BAMBU-LAB
SKU Manufacturer SKU, using letters, digits, dots, or dashes SKU:PLA-01

Unknown keys and invalid optional values are ignored. Invalid S, or conflicting repeated S fields, makes the link unreadable. Resolve returns valid optional fields under each tag's fields object, with uppercase string values. These are scan metadata, not catalog updates.

Store ownership

A link names no store; the server knows which store holds each tag. The first store to set up an unclaimed tag claims it. Scanning alone does not claim a tag. To every other store, a claimed tag reads as unknown_tag (HTTP 404 from execute), exactly like a tag that doesn't exist, and so does a losing setup in a simultaneous race. No response reveals that a tag belongs to another store, which store, or its data.

Labels printed before October 2026 end in /S:{STOREID}. Readers still accept it; when it names another store, the tag is not looked up and reads as unknown_tag.

A blank's row is only saved when it is set up.

QR size

These links encode as one alphanumeric segment at error correction M, measured by decoding the rendered labels:

Payload QR version
HTTPS://APP.PRINTAGO.IO/QR/PTG-7K3QX9MP2W4HC8RT5N6V 3
HTTPS://APP.PRINTAGO.IO/QR/PTG-7K3QX9MP2W4HC8RT5N6V/S:ABCDEFGHIJKLMNOPQRSTUVWX 4
HTTPS://APP.PRINTAGO.IO/QR/PTG-7K3QX9MP2W4HC8RT5N6V/M:PLA/C:00AE42.FFFFFF/G:1000/D:1.75 4

Longer hosts, additional fields, or longer values can increase the version. Configure your QR encoder for alphanumeric mode and error correction M, with a quiet zone of at least four modules.

Compatibility

Tags with legacy IDs print query links, /qr/{id}?v=1&t={type}&s={storeId}, and readers accept them on any web host. Reprinting a legacy tag keeps its code. Every tag is a link: text that isn't one, such as JSON, isn't a Printago tag. An unreadable /QR/ link returns unsupported_version; apps should ask the user to update Printago.

Use Resolve QR tags for scans and its returned tag IDs for execution.