logo
QR Codes

Create WhatsApp, Wi-Fi, and vCard QR codes

Make QR codes that open a WhatsApp chat with a preset message, share a Wi-Fi password, or save a contact — plus text, email, phone, and Pix codes.

Avatar for undefined
CodeQR Team
Content Team

At the end of this guide you know which QR code type to pick for each job — WhatsApp chat, Wi-Fi access, contact card, plain text, email, phone, or Pix — what the person who scans it sees, and how the dynamic and static versions of each type differ.

Availability

  • Plan: all types on all plans. Wallet passes on the visitor page need Pro or above.
  • Where: Create QR CodeSelect QR Type. Dynamic codes offer URL, Text, Wi-Fi, Email, Phone, WhatsApp, and Business Card; static codes add Pix. The API accepts the same types (url, text, wifi, email, phone, whatsapp, vcard, pix, plus sms, crypto, geo, latlog).

Before you start

  • Decide dynamic or static per type: a dynamic Wi-Fi, vCard, Email, Phone, or Text code opens a small CodeQR page with the content and action buttons, counts scans, and can be edited later; a static one is read directly by the phone (the camera offers to join the network, save the contact, or open the mail app) but cannot be edited or measured. See Choose between dynamic and static QR codes.
  • A dynamic WhatsApp code is the exception: it redirects straight to WhatsApp, no intermediate page.
  • Pix is static only: payment apps must read the Pix payload from the image itself.

Steps

  1. Open QR Codes, click Create QR Code, choose Dynamic or Static, and click Continue.
  2. In Select QR Type, pick the type and fill in its fields: - WhatsAppWhatsApp number in international format, digits only (5511999999999), and an optional Message of up to 1,000 characters that appears pre-filled in the chat. - Wi-FiNetwork name, Password, Encryption (None, WPA, WPA2, or WEP), and Hidden network if the SSID is not broadcast. - Business Card — name, phone, email, website, and address fields; the visitor gets a downloadable contact. - Email / Phone — the address or number (and subject and body for email). - Text — any text, shown as is. - Pix (static) — PIX Key, Beneficiary Name, City, and optionally Amount, Transaction ID, and Description.

Editor with the WhatsApp type selected: WhatsApp number 5511999999999 and the pre-filled Message field

Static editor with the Pix type selected: PIX Key, Beneficiary Name, City, Amount, Transaction ID and Description

  1. Set Design and, under Optional, a Title so you recognize the code in the list (the list shows the content, for example WiFi SSID: Cafe Guest or WhatsApp: 5511999999999).
  2. Click Create QR Code, then Export the file.

What the visitor sees

  • WhatsApp (dynamic): the scan redirects to https://wa.me/5511999999999?text=… and WhatsApp opens the chat with your message ready to send.
  • Wi-Fi (dynamic): a page with Network Name, Password (hidden until tapped), Security, the steps to connect, Copy Password, Download, and ADD TO WALLET buttons on Pro and above. The phone does not join the network by itself — that only happens with a static Wi-Fi code.

Visitor page of a dynamic Wi-Fi QR code on an iPhone: Network Name Cafe Guest, Password hidden, Security WPA/WPA2, How to connect steps, Copy Password, Download and Add to Wallet

  • Business Card (dynamic): a page with Name, Mobile (Call, Text), Email (Send), Website (Visit), Add to Contacts, Download, and Wallet buttons.

Visitor page of a dynamic Business Card QR code on an iPhone: Ana Souza, Mobile with Call and Text, Email with Send, Website with Visit, Add to Contacts, Download and Add to Wallet

  • Email, Phone, Text (dynamic): a page with the content and action buttons (call, copy, share).
  • Static codes: the phone handles the content natively — the camera proposes to join the network, save the contact, open the mail or phone app, or shows the text; the Pix code opens in the bank app.

Every scan of a dynamic code of any type is counted in Analytics; visits to the page's public link (https://<domain>/pass/<key>) are not.

The same through the API

Send the type and its object. Examples that ran (200 OK, abbreviated responses):

WhatsApp:

curl -X POST https://api.codeqr.io/qrcodes \
  -H "Authorization: Bearer codeqr_xxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "whatsapp",
    "whatsapp": { "number": "5511999999999", "message": "Hi! I scanned the QR code at the counter." },
    "title": "WhatsApp counter",
    "static": false
  }'
{ "id": "cmsx87izc0005biopy0gtk834", "key": "113HDGTJxMLI-qr", "type": "whatsapp",
  "whatsapp": { "number": "5511999999999", "message": "Hi! I scanned the QR code at the counter." },
  "shortLink": "https://qrup.link/113HDGTJxMLI-qr" }

Wi-Fi: { "type": "wifi", "wifi": { "ssid": "Cafe Guest", "password": "latte2026", "encryption": "WPA" }, "title": "Guest Wi-Fi", "static": false }"key": "PFd23hLIz7dl-qr". Business Card: { "type": "vcard", "vcard": { "name": "Ana", "surname": "Souza", "phone": "+5511999999999", "email": "ana@example.com", "website": "https://example.com" }, "static": false }"key": "AJMvBdqPxG6S-qr". Pix: { "type": "pix", "pix": { … }, "static": true } — always static.

Validation errors you can hit: 400 "Missing Wi-Fi SSID.", 422 "invalid_string: whatsapp.number: Invalid WhatsApp number (use E.164 digits, e.g. 5511999999999)", 400 "Missing PIX data.". The MCP create_qrcode tool supports whatsapp, wifi (ssid, password, encryption WPA/WPA2/WEP/nopass), vcard, email, phone, sms, and text — always dynamic. More in Create QR codes with the API, MCP, and automations.

Verify it works

curl -sI -A "Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X)" https://qrup.link/113HDGTJxMLI-qr | grep -iE "^HTTP|^location"
# HTTP/2 302
# location: https://wa.me/5511999999999?text=Hi!%20I%20scanned%20the%20QR%20code%20at%20the%20counter.

curl -sI -A "Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X)" https://qrup.link/PFd23hLIz7dl-qr | grep -iE "^HTTP|^x-pathname"
# HTTP/2 200
# x-pathname: /qrup.link/pass/PFd23hLIz7dl-qr

The WhatsApp code answers with a redirect to wa.me; Wi-Fi and Business Card codes answer with the visitor page. Then scan each with a phone: WhatsApp opens the chat, the Wi-Fi page shows the network, the contact page offers Add to Contacts.

Troubleshooting

The Wi-Fi code opens a page instead of connecting the phone

That is the dynamic behaviour: the page shows the network and password to copy. If you need one-tap join, create a static Wi-Fi code — the camera then offers to join, but the password cannot be changed after printing.

"Invalid WhatsApp number"

Use the international format with digits only: country code + area code + number, no +, spaces, dashes, or leading zero (5511999999999).

WhatsApp opens without my message

The message travels in the wa.me link as the text parameter and WhatsApp fills it in when the chat opens. Check that the Message field was saved (up to 1,000 characters) by requesting the short link — the location header must contain ?text=.

The contact does not save on the iPhone

Use Add to Contacts on the visitor page (dynamic code) — it downloads a .vcf file that iOS imports. Static vCard codes read by the iPhone camera have a known issue with last names that contain spaces; a dynamic Business Card code avoids it.

The Pix code is refused by the bank app

Pix codes must be static, and the payload has field limits: beneficiary name up to 25 characters, city up to 15, amount with a dot as decimal separator (10.00). Recreate the code with shorter values and test with your own bank app before printing.

Related articles