Simple
Sin adornos, escaneo rápido
Manual para desarrolladores de CreateQR.app
Usa tres endpoints para crear, listar y eliminar códigos QR con control total del estilo. Integración en el mismo día, JSON limpio y tus QR permanecen en tu panel.
/api/v1
Autenticación: Authorization: Bearer <key> (recomendado)
El mismo endpoint, diferentes estilos. Mantenlo simple, llévalo al máximo con tu marca o enmárcalo para campañas offline.
Sin adornos, escaneo rápido
Diseñado para la distancia
Campaña alineada con la marca
Icono de marca de agua predefinido
Listo para póster: "ESCANÉAME"
Más estilo para redes sociales
Crea un código QR estático o dinámico y guárdalo en tu cuenta.
Envía solo JSON. Para la autenticación por clave, el encabezado es la práctica recomendada. Los campos de clave en el cuerpo están ahí por compatibilidad con integraciones existentes.
Esta es la forma más rápida de empezar.
curl -sS -X POST 'https://createqr.app/api/v1/create' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer ck_live_XXXXXXXXXXXXXXXXXXXXXXXX' \
-d '{"data":"https://createqr.app","qrtype":"static"}'
| Parámetro | Tipo | Predeterminado | Descripción |
|---|---|---|---|
apikey |
String | Obligatorio |
Clave secreta de API. Se recomienda usarla en el encabezado Authorization (Bearer). También se acepta apikey/api_key en el cuerpo JSON. |
data |
String | Obligatorio |
Contenido que se va a codificar. Para un QR dinámico, debe ser una URL válida. |
qrtype |
String | static |
Modo del QR: static o dynamic. |
title |
String | Opcional |
Título del QR que se muestra en el panel (se recorta a 120 caracteres). |
folderid |
Number | Opcional |
ID numérico entero positivo de una carpeta que pertenece a tu cuenta. |
| Parámetro | Tipo | Predeterminado | Descripción |
|---|---|---|---|
transparent |
String/Bool | off |
Se aceptan on/off, true/false, 1/0, yes/no. |
backcolor |
String | #FFFFFF |
Color hexadecimal de fondo en formato #RRGGBB. |
frontcolor |
String | #000000 |
Color hexadecimal principal de los puntos en formato #RRGGBB. |
gradient |
String/Bool | off |
Activa un degradado de dos colores en los puntos. |
radial |
String/Bool | off |
Activa el degradado radial (funciona cuando gradient está activado). |
gradient_color |
String | #15A97C |
Segundo color del degradado en #RRGGBB. |
marker_out_color |
String | #000000 |
Color del marcador localizador exterior. |
marker_in_color |
String | #000000 |
Color del marcador localizador interior. |
pattern |
String | default |
Preajuste de estilo de los puntos del cuerpo.
default
circle
star
diamond
sparkle
danger
cross
plus
x
heart
shake
blob
special-circle-orizz
special-circle-vert
special-circle
special-diamond
ribbon
oriental
ellipse
|
marker |
String | default |
Preajuste de estilo del marcador exterior.
default
flurry
sdoz
drop_in
drop
dropeye
dropeyeleft
dropeyeleaf
dropeyeright
squarecircle
circle
rounded
flower
flower_in
leaf
|
marker_in |
String | default |
Preajuste de estilo del marcador interior.
default
flurry
sdoz
drop_in
drop
dropeye
circle
rounded
sun
star
diamond
danger
cross
plus
x
heart
|
optionlogo |
String | none |
none, ruta recomendada a una marca de agua SVG local, ruta heredada a un PNG local o datos de imagen en base64.
none
data:image/*;base64,...
/images/watermarks/v2/01-link.svg
/images/watermarks/v2/02-location.svg
/images/watermarks/v2/03-email.svg
/images/watermarks/v2/04-whatsapp.svg
/images/watermarks/v2/05-wifi.svg
/images/watermarks/v2/06-vcard.svg
/images/watermarks/v2/07-menu.svg
/images/watermarks/v2/08-app.svg
/images/watermarks/v2/09-video.svg
/images/watermarks/v2/10-feedback.svg
/images/watermarks/v2/11-event.svg
/images/watermarks/v2/12-coupon.svg
/images/watermarks/v2/13-music.svg
/images/watermarks/v2/14-social.svg
/images/watermarks/v2/15-paypal.svg
/images/watermarks/v2/16-bitcoin.svg
/images/watermarks/v2/17-scan.svg
|
no_logo_bg |
String/Bool | off |
Desactiva la placa de fondo del logo. |
| Parámetro | Tipo | Predeterminado | Descripción |
|---|---|---|---|
outer_frame |
String | none |
Preajuste de estilo del marco.
none
bottom
top
balloon-bottom
balloon-top
ribbon-bottom
ribbon-top
phone
cine
|
framelabel |
String | SCAN ME |
Texto de la etiqueta del marco (se recorta a 80 caracteres). |
label_font |
String | Arial, Helvetica, sans-serif |
Pila de fuentes para la etiqueta del marco. |
custom_frame_color |
String/Bool | off |
Activa un color personalizado para el marco. |
framecolor |
String | #000000 |
Color hexadecimal del marco en formato #RRGGBB. |
{
"apikey": "ck_live_XXXXXXXXXXXXXXXXXXXXXXXX",
"data": "https://createqr.app",
"qrtype": "static",
"title": "Launch Landing QR",
"transparent": "off",
"backcolor": "#FFFFFF",
"frontcolor": "#000000",
"marker_out_color": "#000000",
"marker_in_color": "#000000",
"pattern": "default",
"marker": "default",
"marker_in": "default",
"optionlogo": "none"
}
{
"apikey": "ck_live_XXXXXXXXXXXXXXXXXXXXXXXX",
"data": "https://createqr.app/features",
"qrtype": "static",
"title": "Feature Tour QR",
"transparent": "off",
"backcolor": "#033895",
"frontcolor": "#FFFFFF",
"marker_out_color": "#669DF4",
"marker_in_color": "#669DF4",
"pattern": "oriental",
"marker": "flower",
"marker_in": "circle",
"optionlogo": "/images/watermarks/v2/01-link.svg"
}
{
"apikey": "ck_live_XXXXXXXXXXXXXXXXXXXXXXXX",
"data": "https://createqr.app/pricing",
"qrtype": "static",
"title": "Pricing Poster QR",
"transparent": "off",
"frontcolor": "#2B0011",
"marker_out_color": "#3B0001",
"marker_in_color": "#3B0001",
"pattern": "ellipse",
"marker": "sdoz",
"marker_in": "sdoz",
"optionlogo": "none",
"outer_frame": "balloon-top",
"framelabel": "SCAN ME",
"label_font": "Arial, Helvetica, sans-serif",
"custom_frame_color": "on",
"framecolor": "#3B0001"
}
{
"success": true,
"data": {
"qrid": "1284",
"svg": "<svg ...>...</svg>",
"type": "static",
"title": "Pricing Poster QR",
"dashboard_url": "https://createqr.app/app/qrs/1284",
"download_url": "https://createqr.app/app/qrs/1284/download/svg"
},
"request_id": "0f8fad5b-d9cb-469f-a165-70867728950e"
}
Elimina un QR por ID (solo el propietario).
{
"apikey": "ck_live_XXXXXXXXXXXXXXXXXXXXXXXX",
"qrid": "1284"
}
{
"success": true,
"data": {
"deleted": true,
"qrid": "1284"
},
"request_id": "0f8fad5b-d9cb-469f-a165-70867728950e"
}
Lista tus QR en páginas de 100, primero los más recientes.
Usa paginación a partir de 1. Los resultados devuelven hasta 100 elementos por página.
{
"apikey": "ck_live_XXXXXXXXXXXXXXXXXXXXXXXX",
"pagination": "1"
}
{
"success": true,
"data": {
"pagination": "1",
"page_size": 100,
"total": 2,
"items": [
{
"qrid": "1284",
"title": "Campaign QR",
"type": "dynamic",
"created_at": "2026-02-17 09:12:30",
"short_url": "https://createqr.app/r/a1b2c3",
"dashboard_url": "https://createqr.app/app/qrs/1284"
},
{
"qrid": "1269",
"title": "Storefront QR",
"type": "static",
"created_at": "2026-02-17 08:02:08",
"dashboard_url": "https://createqr.app/app/qrs/1269"
}
]
},
"request_id": "0f8fad5b-d9cb-469f-a165-70867728950e"
}
Cada respuesta incluye request_id. Consérvalo al contactar con soporte para que podamos depurar rápidamente.
{
"success": false,
"error": {
"code": "validation_error",
"message": "Dynamic QR requires a valid URL in data."
},
"request_id": "5f5fbd38-f82f-49ad-bf11-f7f04ca9747a"
}
| Código de error | HTTP | Cuándo ocurre | Qué hacer |
|---|---|---|---|
invalid_api_key |
401 | Clave de API ausente o no válida | Proporciona una clave válida mediante Bearer, X-API-Key o el campo del cuerpo JSON. |
invalid_content_type |
415 | El cuerpo no es application/json | Envía Content-Type: application/json. |
request_too_large |
413 | La carga útil supera el límite configurado | Reduce el tamaño del cuerpo, especialmente los logos en base64. |
plan_upgrade_required |
403 | El plan no permite usar la API | Actualiza a Business desde Facturación. |
validation_error |
422 | Campos no válidos como URL, color o folderid | Corrige el formato de la carga útil y vuelve a enviarla. |
rate_limited |
429 | Se alcanzó el límite por minuto | Reintenta con retroceso exponencial y respeta Retry-After. |
monthly_quota_exceeded |
429 | Cuota mensual agotada | Espera al restablecimiento o ajusta la cuota y la configuración de la clave. |
qr_not_found |
404 | El objetivo de eliminación no existe o no te pertenece | Verifica la propiedad de qrid y vuelve a intentarlo. |
internal_error |
500 | Problema inesperado del lado del servidor | Reintenta con retroceso y conserva request_id para soporte. |
Respuestas breves a las preguntas que más vemos en las integraciones.
La API está disponible solo para Business. La cuota mensual depende de tu plan activo y de las anulaciones de clave. La base predeterminada de Business es alta, y los administradores pueden ajustarla por clave.
Sí. Se recomienda la autenticación basada en encabezados, pero también se aceptan los campos de compatibilidad del cuerpo apikey o api_key.
Sí. Cada creación correcta se guarda en tu cuenta y puede gestionarse como cualquier otro QR.
Recibirás errores JSON. En las respuestas 429, respeta Retry-After y usa retroceso exponencial con jitter.
No. Las acciones de eliminar y listar están limitadas al propietario autenticado de la clave de API.