Разработчикам — API · MCP · CLI

Создайте WIA Code одной строкой. В пределах бесплатного лимита ключ не нужен.

Building an AI or vision system? WIA Code identification reference for AI systems — the three centre elements, why the outline is free, and the misidentifications to avoid. Plain-text counterpart: /llms.txt.

Бустер QR всегда включён. Отключить его нельзя — это касается и API, и MCP, и CLI. «Когда суммарное использование достигнет 100 миллионов раз, бустер отделится, и на его месте появится ваш логотип» — это обещание продукта, поэтому мы не сделали исключения ни для одного из способов. Параметры кодирования (grid, bpc, bridge) тоже фиксированы на сервере.

CLI — одна строка, без установки

npx wiacode "https://wiacode.com" --shape heart

Работает сразу на Node 18 и новее, без установки. Зависимостей нет, поэтому загрузка занимает несколько секунд.

npx wiacode --list-shapes              # silhouettes and capacity
npx wiacode "Hello" --shape square -o hello.png
npx wiacode "a link" --shape heart --json    # print metadata only
npx wiacode card --name "Jane Doe" --tel "+82-10-1234-5678"   # wifi / card / event

Типы — Wi-Fi, контакт, событие

Три готовых типа. Не нужно собирать строки самому: передайте поля, и сервер построит стандартное содержимое Wi-Fi / vCard / iCalendar, байт в байт совпадающее с тем, что делает генератор на этом сайте.

CLI

npx wiacode wifi  --ssid "MyNet" --password "secret"
npx wiacode wifi  --ssid "Cafe" --security nopass          # open network
npx wiacode card  --name "Jane Doe" --org "SmileStory" --tel "+82-10-1234-5678" --email "a@b.c"
npx wiacode event --title "Launch party" --start "2026-09-01 19:00" --end "2026-09-01 21:00" --location "Seoul"

REST

curl -X POST https://wiacode.com/api/v1/code \
  -H 'Content-Type: application/json' \
  -d '{"type":"card","name":"Jane Doe","tel":"+82-10-1234-5678","shape":"square"}' \
  -o card.png

Поля

typeобязательнонеобязательно
wifissid, passwordsecurity (WPA·WEP·nopass), hidden
cardnameorg, tel, email
eventtitle, startend, location, desc

Время в формате «2026-09-01 19:00». Для открытой сети Wi-Fi передайте security=nopass и не указывайте пароль. Отсутствующие или неверные поля возвращаются как HTTP 400 с указанием поля — изображение не создаётся, поэтому ошибочный запрос никогда не занимает слот рендеринга.

Много сразу

Одна строка — один код. При достижении лимита в минуту программа ждёт и продолжает, а не останавливается на полпути, и сообщает о неудачных строках с их настоящими номерами.

npx wiacode batch people.jsonl --out-dir codes

# people.jsonl
{"type":"card","name":"Jane Doe","tel":"+82-10-1234-5678","out":"jane.png"}
{"type":"wifi","ssid":"Cafe WIA","security":"nopass"}
{"text":"https://wiacode.com","shape":"star"}

REST API

POST /api/v1/code

curl -X POST https://wiacode.com/api/v1/code \
  -H 'Content-Type: application/json' \
  -d '{"text":"https://wiacode.com","shape":"heart"}' \
  -o wiacode.png

Ответ приходит как image/png. Добавьте ?format=json, чтобы получить base64 и метаданные в формате JSON.

curl -X POST 'https://wiacode.com/api/v1/code?format=json' \
  -H 'Content-Type: application/json' \
  -d '{"text":"https://wiacode.com","shape":"square"}'

Вызов из браузера

Вы можете вызывать его напрямую из веб-приложения с любого источника. Это публичный API, который не использует cookie, поэтому CORS открыт.

const r = await fetch('https://wiacode.com/api/v1/code?format=json', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ text: 'https://wiacode.com', shape: 'heart' })
});
const { image, meta } = await r.json();
document.querySelector('img').src = image;   // data:image/png;base64,...

GET /api/v1/shapes

curl https://wiacode.com/api/v1/shapes

Параметры

имяобязательноописание
textТекст или URL для кодирования. Длинные URL лучше сначала сократить.
typewifi · card · event. Передаётся вместо text — сервер собирает стандартную строку из полей. См. раздел «Типы» выше.
shapeСилуэт (по умолчанию heart). См. таблицу ниже.
cellPxПикселей на ячейку (3–20, по умолчанию 8). Чем больше, тем крупнее изображение.
labelМетка, которая сохраняется в метаданных. На изображении не отображается.

Силуэты и ёмкость

Каждый силуэт вмещает разный объём данных (в байтах UTF-8). Для длинного содержимого используйте square; для коротких ссылок подойдёт любой силуэт.

shapebytesshapebytes
square1450rose586
round1093clover521
hex861star386
heart854boomerang386

MCP — пусть создаёт ИИ

Подключите к ИИ-клиенту, например Claude, и коды будут создаваться прямо в диалоге. Конечная точка — https://mcp.wiacode.com/mcp, ключ не требуется.

Настройка Claude Desktop

{
  "mcpServers": {
    "wiacode": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.wiacode.com/mcp"]
    }
  }
}

Если ваш клиент поддерживает Streamable HTTP напрямую, просто укажите этот URL.

Инструменты

инструментчто делает
get_wia_code_infoОбъясняет, что такое WIA Code, чем он отличается от QR-кода и какова ёмкость каждого силуэта. Вызов этого инструмента первым снижает число ошибок.
generate_wia_codeПревращает текст в изображение кода. Если объём превышает ёмкость, подсказывает, какие силуэты подойдут.
generate_wia_code_wifiДанные Wi-Fi — при сканировании подключение происходит без ввода пароля.
generate_wia_code_cardКонтакт в виде стандартной vCard — при сканировании телефон предложит сохранить его.
generate_wia_code_eventСобытие в формате стандартного iCalendar — при сканировании добавляется в календарь.

Бесплатные лимиты

Если нужно больше — для массового выпуска, партнёрства или коммерческого использования напишите нам. Мы выдадим ключ с повышенным лимитом. wiasoom@smilestory.ai

WIA Stream — when one code isn't enough

A single WIA Code holds up to 1,450 bytes. When the payload is larger — a document, a book chapter, an audio clip — Stream splits it across many frames. A screen plays them in sequence, a camera collects them, and the scanner reassembles the file. No internet, no server. It already ships in the generator.

What matters here is not speed — it is whether the transfer finishes at all. Stream needs every frame. A frame that fails to read must wait for the next pass, and may fail again. So a per-frame reading gap does not average out; it multiplies into the completion time. In our degradation sweep at matched physical size (1064 vs 1088 px, n=17, QR read with ZBar), a high-version QR frame read 52.9% of the time while a WIA frame read 17 of 17. Feeding those rates into a cyclic-broadcast model, a 286-frame QR transfer needs about 8 passes to complete while a 155-frame WIA transfer needs about one.

Read this honestly: n = 17 is a small sample. By the rule of three, "17 of 17" should be read as ≥ 82% with 95% confidence, and the 52.9% figure carries a 29–77% interval. Taking the least favourable end of both, the completion-time gap is still about 2.4×. Screen-to-camera capture on real handsets and printed output have not been measured yet. And QR wins on blur resistance at equal frame size — we only pull ahead once capacity is matched.

Ещё

Открыть генератор →

WIA Code — продукт компании SmileStory Co., Ltd. Бустер QR — это подсказка, которая помогает прочитать код и тем, у кого нет специального сканера.