Manual para desarrolladores de CreateQR.app

Automatiza la creación de QR sin las partes aburridas

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.

Ruta base: /api/v1 Autenticación: Authorization: Bearer <key> (recomendado)

Ejemplos de códigos QR generados con nuestra API

El mismo endpoint, diferentes estilos. Mantenlo simple, llévalo al máximo con tu marca o enmárcalo para campañas offline.

Crear códigos QR

Crea un código QR estático o dinámico y guárdalo en tu cuenta.

POST https://createqr.app/api/v1/create

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.

Inicio rápido (cURL)

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

Autenticación y compatibilidad

  • Recomendado: Authorization: Bearer <key>
  • También se acepta: X-API-Key
  • Alternativa en JSON: apikey o api_key
  • Content-Type debe ser application/json
  • Los métodos que no sean POST devuelven 405 method_not_allowed

Parámetros principales

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ámetros de color y forma

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ámetros del marco

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.

Ejemplos de solicitudes de creación

Ejemplo: QR simple

{
    "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"
}
Vista previa del resultado de ejemplo

Ejemplo: Color + Logo

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

Ejemplo: QR de campaña con marco

{
    "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"
}
Vista previa del resultado de ejemplo

Estructura de respuesta exitosa

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

Eliminar códigos QR

Elimina un QR por ID (solo el propietario).

POST https://createqr.app/api/v1/delete

Cuerpo de la solicitud

{
    "apikey": "ck_live_XXXXXXXXXXXXXXXXXXXXXXXX",
    "qrid": "1284"
}

Respuesta

{
    "success": true,
    "data": {
        "deleted": true,
        "qrid": "1284"
    },
    "request_id": "0f8fad5b-d9cb-469f-a165-70867728950e"
}

Listar códigos QR

Lista tus QR en páginas de 100, primero los más recientes.

POST https://createqr.app/api/v1/list

Usa paginación a partir de 1. Los resultados devuelven hasta 100 elementos por página.

Cuerpo de la solicitud

{
    "apikey": "ck_live_XXXXXXXXXXXXXXXXXXXXXXXX",
    "pagination": "1"
}

Respuesta

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

Respuestas de error, límites y reintentos

Cada respuesta incluye request_id. Consérvalo al contactar con soporte para que podamos depurar rápidamente.

Estructura típica de error

{
    "success": false,
    "error": {
        "code": "validation_error",
        "message": "Dynamic QR requires a valid URL in data."
    },
    "request_id": "5f5fbd38-f82f-49ad-bf11-f7f04ca9747a"
}

Estrategia de reintento

  • 429 rate_limited: reintenta con retroceso exponencial más jitter.
  • Respeta Retry-After cuando esté presente.
  • 429 monthly_quota_exceeded: espera a que se restablezca la cuota o usa una clave con cuota disponible.
  • 5xx: reintenta con un número limitado de intentos y luego alerta a tu equipo.
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.

Preguntas frecuentes

Respuestas breves a las preguntas que más vemos en las integraciones.

¿Cuántas solicitudes de API puedo ejecutar?

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.

¿Puedo enviar claves de API en el cuerpo JSON?

Sí. Se recomienda la autenticación basada en encabezados, pero también se aceptan los campos de compatibilidad del cuerpo apikey o api_key.

¿Los QR creados con la API aparecen en mi panel?

Sí. Cada creación correcta se guarda en tu cuenta y puede gestionarse como cualquier otro QR.

¿Qué pasa cuando alcanzo los límites?

Recibirás errores JSON. En las respuestas 429, respeta Retry-After y usa retroceso exponencial con jitter.

¿Puedo eliminar un QR de otra cuenta?

No. Las acciones de eliminar y listar están limitadas al propietario autenticado de la clave de API.

Buenas prácticas de seguridad

  • Nunca expongas claves API sin procesar en JavaScript del navegador, paquetes móviles o repositorios públicos.
  • Usa listas de IP permitidas para claves API para limitar el uso a servidores de confianza.
  • Registra request_id junto con tus propios ID de seguimiento para agilizar la gestión de incidentes.
  • Rota las claves periódicamente y de inmediato después de cualquier filtración de credenciales.
Abrir administrador de claves API