← CodeQR - Link and QR AnalyticsCONTENT HISTORYWHAT CHANGED · RULE-BASED ANALYSIS
Update to CodeQR - Link and QR Analytics
Snapshot Sep 30, 2026 · 22:55 UTC · version 2.0.0
Collection source: not recorded for this historical snapshot.
First saved snapshot
No earlier snapshot is available to establish a change.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"description": "Create a CodeQR QR code that encodes something other than a web address - Wi-Fi credentials a scan joins, a contact card a scan saves, a WhatsApp chat, an email, an SMS, a phone number, plain text, or a crypto payment request. Triggers on QR code for my wifi, QR with my contact details, vCard QR, WhatsApp QR, or any QR request where the target is not a link. Not for a QR code that opens a URL, not for bulk creation across a list, and not for reading or decoding an existing QR image.",
"included_files": [
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 593
}
],
"name": "wifi-and-contact-qr-codes",
"skill_md_contents": "---\nname: wifi-and-contact-qr-codes\ndescription: Create a CodeQR QR code that encodes something other than a web address - Wi-Fi credentials a scan joins, a contact card a scan saves, a WhatsApp chat, an email, an SMS, a phone number, plain text, or a crypto payment request. Triggers on QR code for my wifi, QR with my contact details, vCard QR, WhatsApp QR, or any QR request where the target is not a link. Not for a QR code that opens a URL, not for bulk creation across a list, and not for reading or decoding an existing QR image.\n---\n\n# QR codes that encode something other than a link\n\nA CodeQR QR code can carry a Wi-Fi network, a contact card, or a message, not\nonly a web address. Create these with `create_qrcode` through the CodeQR MCP\ntools. Never generate a QR image locally: a local image cannot be edited or\nmeasured afterwards, which is the whole point of creating it here.\n\n## Always send both `type` and the payload of the same name\n\n`type` names what the code encodes. The payload field carries the content, and\nit is **named exactly like the type** — `type: \"wifi\"` goes with a `wifi` object.\n\n`type` defaults to `\"url\"` when omitted. Sending a `wifi` payload and forgetting\n`type` therefore produces a link code with nothing to link to, which saves\nwithout complaint. Pass both, every time.\n\n| `type` | payload | minimum |\n|---|---|---|\n| `wifi` | `wifi` object | `ssid` |\n| `vcard` | `vcard` object | — |\n| `whatsapp` | `whatsapp` object | `number` |\n| `email` | `email` object | `email` |\n| `sms` | `sms` object | `tel` |\n| `phone` | `phone` string | the number |\n| `text` | `text` string | the text |\n| `crypto` | `crypto` object | `address` |\n\n`whatsapp.number` must be E.164 **without** the `+` and without separators —\n`5511999999999`, not `+55 11 99999-9999`. The API rejects anything else, so\nnormalise whatever the user pasted before calling.\n\n## Four field names that are not what you would guess\n\nPayloads are stored as free-form JSON. A misspelled key **saves successfully**\nand encodes nothing — there is no error to notice, and the failure only surfaces\nwhen someone scans the printed code. These four are worth reading twice:\n\n- **`email.cco`** is BCC. Not `bcc`. The name is Portuguese, from *com cópia\n oculta*.\n- **`sms.subject`** is the **message body**. SMS has no subject line; the field\n is misnamed, not misused.\n- **`crypto.address`** is the wallet address. There is a `crypto.email` field in\n the codebase and it is not this one.\n- **`vcard`** only encodes `city`, `state`, `zipcode` and `country` when\n `address` is also present — they are assembled into a single address line.\n A city sent on its own is silently dropped.\n\nFor an open Wi-Fi network, set `wifi.encryption` to `\"nopass\"`. Leaving it out,\nor inventing a value, produces a code that scanners cannot interpret. Valid\nvalues are `WPA`, `WPA2`, `WEP` and `nopass`. There is no hidden-network option.\n\n## Three types this connector cannot create\n\n`pix`, `geo` and `facetime` exist in the CodeQR dashboard but are not offered\nhere, because a dynamic one does not currently work: a Pix scan lands on the\nsite root instead of a payment, a geo code encodes an undefined coordinate, and\nFaceTime encodes an empty string.\n\nIf the user asks for one, say it is not available through this connector rather\nthan substituting a different type that looks similar. A Pix payment encoded as\n`text` is not a Pix code, and the user finds out at the till.\n\n## Every code created here is dynamic\n\nThe printed pattern encodes a short link. A scan resolves it and lands on a\nCodeQR page that renders the content — the Wi-Fi join prompt, the contact card,\nthe payment request. Three consequences worth stating to the user:\n\n1. **The content can be corrected after printing.** A wrong Wi-Fi password is\n fixed with `update_qrcode`; the printed code stays valid.\n2. **The type cannot be changed afterwards.** Sending a `wifi` payload to a code\n created as `vcard` returns 200 and changes nothing. To switch, create a new\n code — and say so plainly, because the successful-looking response is exactly\n what would otherwise be reported back as done.\n3. **The content is readable by anyone holding the short link.** It is served\n from a public page, so a Wi-Fi password in a QR code is as private as the\n link is unshared. Mention this once for Wi-Fi and crypto codes; do not repeat\n it for a vCard the user is handing out on purpose.\n\n## Report back\n\nGive the short link, and one line describing what a scan does — \"joins the\nnetwork `Cafe-Guest`\", \"offers to save Marina Alves as a contact\". The user\ncannot verify a payload by looking at a QR image, so the sentence is the only\ncheck they have before it goes to print.\n\nScans are counted the same as any other code: `get_analytics` with\n`event: \"scans\"`.\n"
}SHA-256 of public snapshot: eda373b5a1844dbd867f39d65625980648edc447cbebf36b2744653a9b636e72