API de enlaces cortos y códigos QR
La API REST de Krealo QR permite crear enlaces cortos, listarlos, cambiar su destino y obtener su código QR desde tus propias herramientas. Está disponible solo en el plan Pro, por 5,99 US$ al mes más impuestos. Generas un token personal en la página de tu cuenta y lo envías en la cabecera Authorization.
Referencia de las rutas
| GET | /domains | api.op.listDomains |
| GET | /me | La cuenta del token (correo, plan) |
| GET | /links | Lista tus enlaces (filtros carpeta, etiqueta, estado; cursor) |
| POST | /links | Crea un enlace (url; slug, título y diseño opcionales, logo incluido) |
| POST | /links/bulk | Crea hasta 100 enlaces, un resultado por elemento |
| GET | /links/{slug} | Un enlace con sus estadísticas |
| PATCH | /links/{slug} | Cambia el destino, el título, el estado o el diseño del QR (colores, estilos, marco, logo) |
| DELETE | /links/{slug} | Archiva el enlace (se borra 30 días después) |
| GET | /links/{slug}/stats | Estadísticas de un periodo (366 días como mucho) |
| GET | /links/{slug}/qr | Código QR en SVG o PNG, con su diseño |
| PUT | /design/default | Guarda un diseño por defecto para los enlaces nuevos (null lo quita) |
| GET | /webhooks | Lista tus webhooks |
| POST | /webhooks | Crea un webhook (secreto visible una vez) |
| DELETE | /webhooks/{id} | Borra un webhook |
Especificación OpenAPI 3.1 (para Postman, Insomnia o un generador de clientes): /api/v1/openapi.json
Sin código
- Zapier: disparadores «Nuevo enlace» y «Nuevo escaneo», acciones «Crear un enlace» y «Cambiar el destino». Añadir la app Krealo QR a tu Zapier
- Claude, ChatGPT y otros asistentes (MCP): añade un conector personalizado con la dirección
https://krlo.ca/mcp - Integraciones
Ejemplos
curl -X POST https://krlo.ca/api/v1/links \
-H "Authorization: Bearer kqr_…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: menu-2026" \
-d '{"url":"https://example.com/menu","slug":"menu"}'const r = await fetch('https://krlo.ca/api/v1/links', {
method: 'POST',
headers: { Authorization: 'Bearer kqr_…', 'Content-Type': 'application/json' },
body: JSON.stringify({ url: 'https://example.com/menu', slug: 'menu' }),
});
const lien = await r.json(); // { slug, short_url, … }import requests
r = requests.post("https://krlo.ca/api/v1/links",
headers={"Authorization": "Bearer kqr_…"},
json={"url": "https://example.com/menu", "slug": "menu"})
print(r.json()["short_url"])curl "https://krlo.ca/api/v1/links/menu/stats?from=2026-09-01&to=2026-09-30" -H "Authorization: Bearer kqr_…"curl -X PATCH https://krlo.ca/api/v1/links/menu -H "Authorization: Bearer kqr_…" -H "Content-Type: application/json" \
-d '{"design":{"color":"#1e3a8a","dots":"rounded","corners":"extra-rounded","logo_url":"https://example.com/logo.png","frame":{"style":"cinta","text":"Menu"}}}'curl "https://krlo.ca/api/v1/links/menu/qr?format=png&size=1024" -H "Authorization: Bearer kqr_…" -o menu.pngcurl -X POST https://krlo.ca/api/v1/webhooks -H "Authorization: Bearer kqr_…" -H "Content-Type: application/json" \
-d '{"url":"https://example.com/hooks/krealo","events":["link.scanned"]}'Códigos de error
| 400 | invalid_request | Dato inválido o destino rechazado. |
| 401 | unauthorized | Token ausente, inválido, revocado o caducado. |
| 402 | pro_required | Hace falta el plan Pro. |
| 403 | forbidden | Acción rechazada en esta cuenta. |
| 403 | insufficient_scope | Token de solo lectura: solo puede leer (GET). |
| 404 | not_found | Ese enlace no existe o no es tuyo. |
| 409 | slug_taken | Ese slug ya está ocupado. |
| 409 | idempotency_in_progress | Idempotency-Key ya usada: petición en curso (409) o con otro contenido (422). |
| 422 | idempotency_mismatch | Idempotency-Key ya usada: petición en curso (409) o con otro contenido (422). |
| 429 | rate_limited | Más de 120 solicitudes por minuto: espera Retry-After segundos. |
| 503 | not_configured | Servicio no disponible por ahora. |
Autenticación
La API es solo para cuentas Pro. Genera tu token personal en la página de tu cuenta y envíalo en la cabecera Authorization: Bearer <token>. La URL base es https://qr.krealomedia.com/api/v1.
Lo que permite la API
- Crear un enlace, o hasta 100 de una vez, con una cabecera Idempotency-Key para no crear nunca dos.
- Listar tus enlaces, filtrados por carpeta, etiqueta o estado, con paginación por cursor.
- Cambiar el destino, el título o el estado de un enlace, y archivarlo.
- Leer las estadísticas de un periodo: escaneos, visitantes únicos, países y dispositivos.
- Configurar el diseño del QR al crear o modificar un enlace: colores, estilo de los puntos y las esquinas, marco con texto y tu logo desde una dirección https pública o en base64 (PNG, JPEG o WEBP, hasta 2 MB).
- Descargar el código QR en SVG o PNG con su diseño: colores, puntos, logo y marco.
- Recibir webhooks firmados cuando un enlace se crea, se edita, se archiva, se bloquea o se escanea.
Límite de uso
El límite es de 120 solicitudes por minuto por cuenta. Cada respuesta indica cómo vas con las cabeceras X-RateLimit-Limit, X-RateLimit-Remaining y X-RateLimit-Reset; por encima, la respuesta 429 indica en Retry-After cuántos segundos esperar.
Destinos aceptados
Solo se aceptan direcciones http y https. Los destinos peligrosos, como javascript: o data:, se bloquean.
Ver también
Preguntas frecuentes
¿Quién puede usar la API?
Las cuentas del plan Pro. El token personal se genera en la página de la cuenta.
¿Cuál es el límite de solicitudes?
Es de 120 solicitudes por minuto.
¿El código QR que devuelve la API puede llevar logo?
Sí. La ruta /links/{slug}/qr devuelve el código QR con el diseño guardado del enlace (colores, estilo de los puntos, logo y marco), en SVG o en PNG de 128 a 2048 píxeles. El diseño se configura en la aplicación, o con el campo design de POST /links y PATCH /links/{slug}, logo incluido.