ForHosting KIT · Developer Utilities

Build a WiFi QR payload string for WPA, WEP, or open networks

A WiFi QR payload is the text encoded inside a QR code that lets a phone recognize network credentials without making someone type them.

● BetaFree · in your browser
Use it from WebAPIEmailTelegramApp soon

This tool builds that standard payload from an SSID, password, and encryption choice. It handles WPA, WEP, and open networks, escapes characters that have special meaning in the format, and returns plain text ready for any QR encoder. The result is deterministic, easy to inspect, and available through the API for $0.002 per request.

Supply the network details that devices need

Start with the exact SSID shown by the wireless access point. Network names are case-sensitive, so capitalization, spaces, and punctuation must match what users see on their devices. Then provide the password and select WPA, WEP, or none as the encryption type. WPA is the appropriate choice for the common WPA, WPA2, and WPA3 personal network configurations represented by this broadly supported QR text convention. WEP is retained for older equipment, while none represents a network that does not request a password. The builder accepts encryption labels without regard to letter case, but it rejects any label outside those three choices so that a typo cannot silently create a misleading QR payload. For WPA and WEP, a non-empty password is required. For an open network, the password is ignored and no password field is emitted. This keeps the output focused on the credentials a scanner actually needs and prevents an unused password from being embedded accidentally.

Understand the payload and its escaping rules

The returned value begins with WIFI: and contains labeled fields separated by semicolons. The T field identifies authentication, the S field holds the SSID, and encrypted networks also receive a P field containing the password. A final pair of semicolons closes the payload. Open networks use the conventional authentication value nopass and omit P. Several ordinary characters have structural meaning in this text format: a backslash introduces an escape, a semicolon ends a field, and commas or colons may be interpreted as delimiters by compatible parsers. The builder prefixes each of those characters with a backslash when it appears inside an SSID or password. Escaping is especially important for names such as Office:Guest or passwords containing punctuation, because concatenating raw values by hand can produce a string that looks plausible while being split into the wrong fields by a scanner. The tool returns the payload as JSON text data; it does not render pixels or alter the credentials themselves.

Encode, test, and share the result safely

Pass the returned payload unchanged to a QR code library, printing service, label workflow, or design application that accepts arbitrary text. Choose an error-correction level and physical size appropriate for the setting, then test the finished symbol with more than one target device before distributing it. A valid payload does not guarantee that a phone can reach the access point, that the password is current, or that a particular operating system supports every legacy encryption mode. Treat the generated string as sensitive whenever it includes a password: avoid placing it in public logs, analytics events, source repositories, or support tickets, and retire printed codes when credentials change. This capability performs no network lookup and cannot verify the wireless network. Its job is narrower and predictable: validate the requested encryption family, escape format-sensitive text, and assemble a reusable payload. That separation is useful in automated systems because QR rendering can change independently while the credential serialization remains stable and straightforward to test.

Prepare a guest network card

Create the credential text for a QR code printed at reception so visitors can join without typing a long password.

Automate router setup labels

Generate consistent payload strings from provisioned SSIDs and passwords before a separate service renders device labels.

Handle punctuation safely

Build a valid payload when a network name or password contains semicolons, colons, commas, or backslashes.

What does one request cost?

Each API request costs $0.002.

Does this create a QR code image?

No. It returns the standard WiFi payload string that you can pass to a QR code encoder.

Which encryption types are supported?

WPA, WEP, and none are supported. Any other encryption label returns an invalid-input error.

What happens to the password for an open network?

It is ignored, and the generated nopass payload does not contain a password field.

Are special characters escaped?

Yes. Backslashes, semicolons, commas, and colons in the SSID or password are escaped with a leading backslash.

Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.

POSThttps://api.kit.forhosting.com/enc/qr-wifi-payload

Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.

curl -X POST https://api.kit.forhosting.com/enc/qr-wifi-payload \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ssid":"Studio WiFi","password":"correct horse battery staple","encryption":"WPA"}'
{
  "ssid": "Studio WiFi",
  "password": "correct horse battery staple",
  "encryption": "WPA"
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "enc.qr_wifi_payload",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.

Per request$0.002

Published price — no tokens, no invented credits. A failed task is never charged.

HTTPCodeMeaning
401unauthorizedMissing or invalid API key.
402insufficient_balanceYour balance doesn't cover the task price.
404unknown_typeThat task type doesn't exist.
429rate_limitedToo many requests. Use the webhook instead of polling.

Read the full KIT documentation →