Conecta tu POS o ERP
con fidelización WhatsApp
Connect your POS or ERP
to WhatsApp loyalty
Bizzlink se integra en tu sistema de facturación en minutos. Genera PINs en cada venta, imprímelos como QR en la factura, y deja que el cliente active sus puntos directamente desde WhatsApp — sin apps, sin registro manual. Bizzlink integrates into your billing system in minutes. Generate PINs on each sale, print them as QR codes on the invoice, and let the customer activate their points directly from WhatsApp — no apps, no manual registration.
Bizzlink es una plataforma SaaS multi-tenant de fidelización de clientes vía WhatsApp. La integración con POS y ERPs se limita a dos responsabilidades: generar el PIN al momento de facturar e imprimir el QR en la factura. Todo el proceso de activación, registro de nombre y acumulación de puntos ocurre en WhatsApp — Bizzlink lo maneja de forma autónoma. Bizzlink is a multi-tenant SaaS customer loyalty platform via WhatsApp. The POS/ERP integration has two responsibilities only: generate the PIN at checkout and print the QR on the invoice. The entire activation, name registration, and point accumulation process happens on WhatsApp — Bizzlink handles it autonomously.
Base URLBase URL
Endpoint de generación de PIN (autenticado con API Key):PIN generation endpoint (authenticated with API Key):
https://panel.bizzlink.io/api/v1/integraciones/
Endpoints públicosPublic endpoints
Consulta y canje — sin token:Lookup and redeem — no token:
https://panel.bizzlink.io/api/v1/redimir/
AutenticaciónAuthentication
Generar PIN requiere API key del comercio. Consultas y canjes son públicos.PIN generation requires the merchant API key. Lookups and redemptions are public.
X-API-Key: {API_KEY}
Formato
Todas las peticiones y respuestas usan JSON con UTF-8.All requests and responses use JSON with UTF-8.
Content-Type: application/json
El sistema de fidelización opera en dos mundos separados: el POS genera el PIN y el bot de WhatsApp activa los puntos. No existe comunicación en tiempo real entre ambos — el cliente es el puente. The loyalty system operates in two separate worlds: the POS generates the PIN and the WhatsApp bot activates the points. There's no real-time communication between them — the customer is the bridge.
Desde la perspectiva del sistema de facturación, la integración completa implica los siguientes pasos en cada venta. From the billing system's perspective, the complete integration involves the following steps on each sale.
Cada comercio configura un monto mínimo de compra para ser elegible a recibir un PIN. El POS consulta ese valor y lo compara con el total de la factura. Si no supera el mínimo, no se genera PIN y el flujo termina aquí. Each merchant configures a minimum purchase amount to be eligible for a PIN. The POS checks that value against the invoice total. If below the minimum, no PIN is generated and the flow ends here.
POS / ERP
Si el monto califica, el POS hace una llamada POST a /integraciones/pin/generar con el header X-API-Key. Sin body. Bizzlink genera un PIN de 4 dígitos único, lo asocia al comercio y retorna el PIN con su fecha de expiración.
If the amount qualifies, the POS makes a POST call to /integraciones/pin/generar with the X-API-Key header. No body required. Bizzlink generates a unique 4-digit PIN, associates it to the merchant, and returns the PIN with its expiration date.
Con el PIN recibido, el POS construye un URL de WhatsApp que incluye el número del bot Bizzlink y un mensaje pre-cargado con el PIN. Este URL se convierte en un código QR. With the received PIN, the POS builds a WhatsApp URL that includes the Bizzlink bot number and a pre-loaded message with the PIN. This URL is converted into a QR code.
https://wa.me/{NUMERO_BOT}?text=Quiero+activar+mi+PIN:+{PIN}
# Ejemplo
https://wa.me/50600000000?text=Quiero+activar+mi+PIN:+8432
NUMERO_BOT) se obtiene desde el panel superadmin de Bizzlink y no cambia. Se configura una sola vez en el sistema.The Bizzlink bot number (NUMERO_BOT) is obtained from the Bizzlink superadmin panel and doesn't change. Configure it once in the system.El POS imprime el QR en la factura junto a un texto como "Escaneá para acumular puntos en tu programa de fidelización". El integrador puede usar cualquier librería de generación de QR disponible en su stack. The POS prints the QR on the invoice next to text like "Scan to earn loyalty points". The integrator can use any QR generation library available in their stack.
POS / ERPEl cliente escanea el QR con su teléfono, se abre WhatsApp con el mensaje pre-cargado, y lo envía al bot de Bizzlink. El bot valida el PIN, acredita el punto, solicita el nombre si es la primera vez, y confirma la acumulación. Este proceso es 100% autónomo — el POS no interviene. The customer scans the QR with their phone, WhatsApp opens with the pre-loaded message, and they send it to the Bizzlink bot. The bot validates the PIN, credits the point, requests the name if it's the first time, and confirms the accumulation. This process is 100% autonomous — the POS does not intervene.
WhatsApp Bot — BizzlinkEl POS no necesita saber qué sucedió después de imprimir el QR. Bizzlink maneja toda la lógica de fidelización de forma autónoma. Opcionalmente, el POS puede consultar puntos y ejecutar canjes (ver siguiente sección). The POS doesn't need to know what happened after printing the QR. Bizzlink handles all loyalty logic autonomously. Optionally, the POS can query points and execute redemptions (see next section).
BizzlinkSi el comercio quiere permitir que el cliente canjee sus puntos directamente en el POS (para obtener un descuento o regalía aplicado en la factura), puede implementar el flujo opcional de canje. If the merchant wants to allow customers to redeem points directly at the POS (to get a discount or gift applied on the invoice), they can implement the optional redemption flow.
El cajero solicita el número de WhatsApp del cliente e ingresa al POS.The cashier asks for the customer's WhatsApp number and enters it in the POS.
POS / ERPEl POS consulta GET /redimir/puntos/{wa} para ver los puntos del cliente y las recompensas disponibles para el comercio.The POS queries GET /redimir/puntos/{wa} to see the customer's points and available rewards for the merchant.
Si el cliente tiene puntos suficientes, el POS muestra las opciones de canje disponibles (descuento, regalía, producto gratis, etc.).If the customer has enough points, the POS shows available redemption options (discount, gift, free product, etc.).
POS / ERPEl POS llama POST /redimir/canjear con el WhatsApp, ID del comercio e ID de la promoción. Si el canje es exitoso, el POS aplica el beneficio en la factura (descuento, regalía, etc.).The POS calls POST /redimir/canjear with the WhatsApp, merchant ID, and promotion ID. If redemption is successful, the POS applies the benefit on the invoice (discount, gift, etc.).
POST /canjear, los puntos se descuentan y el canje queda registrado. Confirmar con el cliente antes de ejecutar.
Redemption is irreversible. Once POST /canjear is executed, points are deducted and the redemption is recorded. Confirm with the customer before executing.
Genera un PIN de 4 dígitos asociado al comercio autenticado. Si el monto de la compra no supera el monto mínimo configurado por el comercio, retorna el PIN con su tiempo de expiración. Generates a 4-digit PIN associated to the authenticated merchant. If the purchase amount doesn't exceed the minimum configured by the merchant, returns the PIN with its expiration time.
X-API-Key: {API_KEY}. La API Key se genera desde el panel Bizzlink en Integraciones → Nueva API Key. No expira — se puede revocar desde el panel.
This endpoint requires authentication via API Key in the header X-API-Key: {API_KEY}. The API Key is generated from the Bizzlink panel in Integrations → New API Key. Does not expire — revocable from the panel.
| Header | Tipo / Type | DescripciónDescription |
|---|---|---|
| X-API-Key* | string | API Key del comercio generada desde el panel. Merchant API Key generated from the panel. |
Sin body requerido. No body required.
X-API-Key: bz_live_xxxxxxxxxxxxxxxxxxxx
# Sin body / No body
"ok": true,
"pin": "8432",
"expires_at": "2026-05-07T15:30:00-06:00",
"expires_in": 1800,
"id_comercio": 1
}
https://wa.me/{NUMERO_BOT}?text=Quiero+activar+mi+PIN:+{PIN} y lo convierte en QR para imprimir en la factura. El número del bot se obtiene del panel superadmin y se configura una sola vez.
With the received PIN, the integrator builds the WhatsApp URL: https://wa.me/{BOT_NUMBER}?text=Quiero+activar+mi+PIN:+{PIN} and converts it to a QR to print on the invoice. The bot number is obtained from the superadmin panel and configured once.
Genera un PIN de 4 dígitos desde un sistema externo (POS, agente de impresión, ecommerce). Equivalente al PIN del cajero — el cliente lo ingresa en WhatsApp para acreditar su punto. No requiere body. Generates a 4-digit PIN from an external system (POS, print agent, ecommerce). Equivalent to the cashier PIN — the customer enters it in WhatsApp to earn their point. No body required.
X-API-Key: {API_KEY}. Generada desde el panel en Integraciones → Nueva API Key. No expira — revocable desde el panel.
Requires API Key in the header X-API-Key: {API_KEY}. Generated from the panel in Integrations → New API Key. Does not expire — revocable from the panel.
| Header | Tipo / Type | DescripciónDescription |
|---|---|---|
| X-API-Key* | string | API Key del comercioMerchant API Key |
X-API-Key: bz_live_xxxxxxxxxxxxxxxxxxxx
POST /api/v1/integraciones/pin/generar
"ok": true,
"pin": "4821",
"expires_at": "2026-05-15T22:30:00Z",
"expires_in": 1800,
"id_comercio": 1
}
| HTTP | codigo | CausaCause | AcciónAction |
|---|---|---|---|
| 401 | UNAUTHORIZED | API Key inválida o revocadaInvalid or revoked API Key | Verificar la key en el panelCheck the key in the panel |
| 500 | PIN_GENERATION_FAILED | Error interno al generar el PINInternal error generating the PIN | ReintentarRetry |
Retorna la información del comercio y sus recompensas activas. Útil para mostrar al cajero qué recompensas puede ofrecer al cliente para el canje. Returns merchant information and active rewards. Useful to show the cashier what rewards can be offered to the customer for redemption.
| Parámetro / Parameter | Tipo / Type | DescripciónDescription |
|---|---|---|
| slug* | string | Identificador único del comercio. Ej: "cafe-demo"Unique merchant identifier. Ex: "cafe-demo" |
"ok": true,
"comercio": { "id": 1, "nombre": "Café Demo", "slug": "cafe-demo" },
"promociones": [
{ "id": 3, "titulo": "Café gratis", "descripcion": "Un café americano de cortesía", "puntos_requeridos": 10 }
]
}
Consulta los puntos del cliente en todos sus comercios. No requiere autenticación. El campo + del número debe ir URL-encoded como %2B.
Queries the customer's points across all merchants. No authentication required. The + in the number must be URL-encoded as %2B.
| Parámetro / Parameter | Tipo / Type | DescripciónDescription |
|---|---|---|
| wa* | string | Número WhatsApp URL-encoded. El + como %2B. Ej: %2B50688887777URL-encoded WhatsApp number. + as %2B. Ex: %2B50688887777 |
"ok": true,
"total": 1,
"data": [{
"tipo": "individual", // "individual" o "grupo"
"nombre": "Café Demo",
"id_comercio": 1,
"puntos": 10,
"proxima_recompensa": {
"titulo": "Café gratis",
"puntos_requeridos": 10,
"puntos_faltantes": 0 // 0 = puede canjear ahora
}
}]
}
Ejecuta el canje de una recompensa. Descuenta los puntos del cliente y registra el canje. Acción irreversible — confirmar con el cliente antes de ejecutar. Executes a reward redemption. Deducts the customer's points and records the redemption. Irreversible action — confirm with the customer before executing.
VERIFICACION_REQUERIDA (403). Esto garantiza que el cliente está físicamente presente al momento del canje.
Recent visit verification required. The WhatsApp number must have credited at least 1 point at the same merchant in the last 30 minutes. If no recent accreditation exists, the API returns VERIFICACION_REQUERIDA (403). This ensures the customer is physically present at the time of redemption.
| Campo / Field | Tipo / Type | DescripciónDescription |
|---|---|---|
| whatsapp* | string | Número WhatsApp del cliente con código de país.Customer WhatsApp number with country code. |
| id_comercio* | integer | ID del comercio donde se realiza el canje.ID of the merchant where redemption takes place. |
| id_promocion* | integer | ID de la recompensa a canjear (obtenido de /comercio/{slug}).ID of the reward to redeem (obtained from /comercio/{slug}). |
"ok": true,
"puntos_restantes": 0,
"recompensa": "Café gratis",
"mensaje": "¡Canje exitoso! Aplicá el beneficio en la factura."
}
Todas las respuestas de error incluyen ok: false, codigo y mensaje.All error responses include ok: false, codigo and mensaje.
| HTTP | Código / Code | DescripciónDescription | AcciónAction |
|---|---|---|---|
| 200 | — | ÉxitoSuccess | ok: true |
| 403 | VERIFICACION_REQUERIDA | No hay acreditación reciente (últimos 30 min) en ese comercioNo recent accreditation (last 30 min) at that merchant | El cliente debe activar un PIN primeroCustomer must activate a PIN first |
| 422 | PUNTOS_INSUFICIENTES | No tiene puntos para canjearNot enough points to redeem | Mostrar saldo al clienteShow balance to customer |
| 404 | COMERCIO_NOT_FOUND | Slug del comercio inválidoInvalid merchant slug | Verificar configuraciónVerify configuration |
| 404 | CLIENTE_NOT_FOUND | WhatsApp sin registros de puntosWhatsApp has no point records | El cliente aún no tiene puntosCustomer has no points yet |
| 429 | TOO_MANY_REQUESTS | Rate limit excedidoRate limit exceeded | Backoff exponencialExponential backoff |
| 401 | UNAUTHORIZED | API key inválida o ausenteInvalid or missing API key | Verificar Authorization headerCheck Authorization header |
| 500 | INTERNAL_ERROR | Error interno del servidorInternal server error | Reintentar en 30sRetry in 30s |
Los límites se aplican por IP. Si el POS o ERP corre desde una sola IP, todos los clientes comparten el contador.Limits are applied per IP. If the POS or ERP runs from a single IP, all customers share the counter.
| Endpoint | LímiteLimit | VentanaWindow |
|---|---|---|
| POST /pin/generar | 30 req | 1 min |
| GET /comercio/{slug} | 30 req | 1 min |
| GET /puntos/{wa} | 30 req | 1 min |
| POST /canjear | 30 req | 1 min |