Desarrolladores — API · MCP · CLI

Crea un WIA Code en una línea. No hace falta clave dentro de los límites gratuitos.

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.

El QR potenciador siempre está incluido. No hay opción para desactivarlo — lo mismo vale para la API, MCP y CLI. "Cuando el uso acumulado llegue a 100 millones de veces, el potenciador se separará y tu propio logo ocupará su lugar" es una promesa del producto, así que no hicimos ninguna excepción para ninguna vía. Los parámetros de codificación (grid, bpc, bridge) también están fijados en el servidor.

CLI — una línea, sin instalación

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

Se ejecuta directamente en Node 18 o posterior, sin instalación. No tiene dependencias, así que descargarlo tarda unos segundos.

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

Tipos: Wi-Fi, tarjeta de contacto, evento

Tres tipos listos para usar. No tienes que construir las cadenas tú mismo: pasa los campos y el servidor genera contenido estándar de Wi-Fi / vCard / iCalendar, idéntico byte a byte al que produce el generador de este sitio.

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

Campos

typeobligatorioopcional
wifissid, passwordsecurity (WPA·WEP·nopass), hidden
cardnameorg, tel, email
eventtitle, startend, location, desc

Las horas usan el formato «2026-09-01 19:00». Para una red Wi-Fi abierta, pasa security=nopass y omite la contraseña. Los campos que falten o estén mal formados devuelven HTTP 400 con un mensaje que nombra el campo: no se genera ninguna imagen, así que una petición incorrecta nunca ocupa un turno de renderizado.

Muchos a la vez

Una línea por código. Si se alcanza el límite por minuto, espera y continúa en lugar de detenerse a medias, e informa de las líneas fallidas con su número de línea real.

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"}

API REST

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

La respuesta es image/png. Añade ?format=json para obtener base64 y metadatos en JSON.

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

Llamada desde el navegador

Puedes llamarla directamente desde una aplicación web en cualquier origen. Es una API pública que no usa cookies, por lo que CORS está abierto.

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

Parámetros

nombreobligatoriodescripción
textEl texto o la URL a codificar. Es mejor acortar antes las URL largas.
typewifi · card · event. Se envía en lugar de text: el servidor construye la cadena estándar a partir de los campos. Consulta la sección Tipos más arriba.
shapeSilueta (por defecto heart). Ver la tabla de abajo.
cellPxPíxeles por celda (3–20, por defecto 8). Cuanto mayor, más grande la imagen.
labelUna etiqueta que se guarda en los metadatos. No se dibuja en la imagen.

Siluetas y capacidad

Cada silueta admite una cantidad distinta (bytes UTF-8). Usa square para contenido largo; cualquier forma sirve para enlaces cortos.

shapebytesshapebytes
square1450rose586
round1093clover521
hex861star386
heart854boomerang386

MCP — deja que la IA lo haga

Conéctalo a un cliente de IA como Claude y creará códigos directamente en la conversación. El endpoint es https://mcp.wiacode.com/mcp y no requiere clave.

Configuración de Claude Desktop

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

Si tu cliente admite Streamable HTTP directamente, solo dale la URL.

Herramientas

herramientaqué hace
get_wia_code_infoExplica qué es un WIA Code, en qué se diferencia de un código QR y la capacidad de cada silueta. Llamar a esto primero reduce los fallos.
generate_wia_codeConvierte texto en una imagen de código. Si excede la capacidad, indica qué siluetas encajarían.
generate_wia_code_wifiCredenciales de Wi-Fi: al escanear se conecta a la red sin escribir la contraseña.
generate_wia_code_cardUn contacto como vCard estándar: al escanear, el teléfono ofrece guardarlo en la agenda.
generate_wia_code_eventUn evento como iCalendar estándar: al escanear se añade al calendario.

Límites gratuitos

Si necesitas más — para emisión masiva, alianzas o uso comercial, envíanos un correo. Te daremos una clave que aumenta el límite. 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.

Más

Abrir el generador →

WIA Code es un producto de SmileStory Co., Ltd. El QR potenciador es una guía que también ayuda a leerlo a quienes no tienen el escáner dedicado.