# Documentación de Loybox > Loybox es una plataforma de fidelización para marcas: cada marca arma su > propio club de miembros donde los clientes acumulan puntos con cada compra y > los canjean por premios, con niveles VIP, referidos, reseñas, recomendaciones > y campañas. Este archivo es el texto completo de toda la documentación, en el orden en que está organizada: primero las guías del producto, después la referencia de la API. Cada página abre con un `#` seguido de su URL. Índice de páginas y resumen de la API: https://docs.loybox.com.ar/llms.txt Especificación de la API para generar un cliente: https://docs.loybox.com.ar/openapi.json --- # Introducción (https://docs.loybox.com.ar/introduccion) Los anuncios traen clientes. La fidelidad los hace volver. **Loybox es la plataforma para crear tu propio club de miembros**: una app con tu marca para locales físicos, o integrada a tu tienda online, con la que premiás a tus clientes, aumentás la recurrencia y hacés crecer el valor de cada relación. ## El problema que resuelve [#el-problema-que-resuelve] Adquirir un cliente es sólo el primer paso. La rentabilidad real aparece cuando ese cliente vuelve, gasta más y trae a otro. Sin un sistema de fidelización, dependés de seguir pagando para traer una y otra vez al mismo perfil de cliente. ## Cómo funciona, en una frase [#cómo-funciona-en-una-frase] Tus clientes suman puntos con cada compra y los canjean por los premios exclusivos de tu marca. Alrededor de eso, Loybox suma niveles VIP, desafíos, referidos, campañas y comunidad para que la compra se convierta en un hábito. ## Tu club, en todos tus canales [#tu-club-en-todos-tus-canales] ## Por dónde empezar [#por-dónde-empezar] Esta documentación crece herramienta por herramienta. Arrancá por los fundamentos: # Conceptos (https://docs.loybox.com.ar/conceptos) Antes de configurar tu club conviene tener claro el vocabulario. Todo Loybox se construye sobre cuatro piezas. ## Las piezas [#las-piezas] ## El ciclo de fidelidad [#el-ciclo-de-fidelidad] El corazón de Loybox es un ciclo simple que se repite y se refuerza en cada visita: ### El cliente compra [#el-cliente-compra] En tu local o en tu tienda online. Cada compra queda registrada como un consumo. ### Suma puntos [#suma-puntos] El consumo genera puntos automáticamente, según las reglas que definís (ver [Ganar puntos](https://docs.loybox.com.ar/puntos-y-premios/ganar-puntos)). ### Canjea premios [#canjea-premios] Cuando junta suficientes puntos, los cambia por uno de los premios de tu catálogo. ### Vuelve [#vuelve] El premio y el progreso hacia el próximo lo traen de nuevo. La compra se vuelve un hábito. ## Saldo de puntos [#saldo-de-puntos] El saldo de un cliente es el resultado de sumar todos los puntos que ganó (que no estén vencidos) y restar todos los que gastó en canjes. Esto garantiza que el número sea siempre consistente con su historial real. ## Multi-canal [#multi-canal] Una misma marca puede operar su club en locales físicos (app PWA con tu marca) y en su tienda online (integrado al checkout). Las reglas de puntos y el catálogo de premios se comparten: el cliente vive una sola experiencia, sin importar por dónde compre. # Fundamentos (https://docs.loybox.com.ar/puntos-y-premios) El sistema de puntos y premios es el motor de tu club: los clientes acumulan puntos con cada compra y los canjean por las recompensas de tu marca. Es la mecánica que transforma una compra suelta en una relación que vuelve. ## De un vistazo [#de-un-vistazo] ## El flujo, punta a punta [#el-flujo-punta-a-punta] ### Configurás las reglas [#configurás-las-reglas] Definís cuántos puntos vale cada compra y (opcionalmente) cuándo vencen. ### Armás el catálogo de premios [#armás-el-catálogo-de-premios] Creás los premios con su costo en puntos, stock y vigencia. ### El cliente acumula [#el-cliente-acumula] Cada compra suma puntos a su saldo automáticamente. ### El cliente canjea [#el-cliente-canjea] Cambia sus puntos por un premio y tu equipo lo valida con un código. Cada marca define sus propias reglas de puntos, sus modos de vencimiento y su catálogo de premios. Nada está fijo: el sistema se adapta a cómo querés premiar a tus clientes. # Ganar puntos (https://docs.loybox.com.ar/puntos-y-premios/ganar-puntos) Cada compra genera puntos automáticamente. Cómo se traduce el monto de la compra en puntos lo definís vos. ## La regla principal: dinero por punto [#la-regla-principal-dinero-por-punto] La forma más directa de configurar tu programa es definir cuánto dinero equivale a un punto. Con esa regla, el cálculo es: ``` puntos = piso( monto de la compra ÷ dinero por punto ) ``` Si configurás $100 = 1 punto, una compra de $1.750 otorga 17 puntos (1750 ÷ 100 = 17,5, redondeado hacia abajo). Los centavos que sobran no se pierden: quedan para la próxima compra en la práctica, porque siempre se calcula sobre el monto real. Es un solo valor para ajustar: bajás el "dinero por punto" para que los puntos se acumulen más rápido, o lo subís para que cuesten más. ## Conversión automática por moneda [#conversión-automática-por-moneda] Si no definís una regla de dinero por punto, Loybox usa una conversión por defecto según la moneda de tu marca, para que todo funcione desde el primer día: | Moneda | Regla por defecto | | -------------------- | ------------------------------------------------------------------------------- | | Euro (EUR) | 50 puntos por cada € | | Peso mexicano (MXN) | 1 punto cada 50 MXN | | Resto de las monedas | Se convierte el monto a dólares (cotización MEP) y se otorgan 50 puntos por USD | La cotización del dólar MEP se actualiza automáticamente de forma periódica, así que las monedas que dependen de ella siempre usan un valor al día. En cuanto definís tu propia regla de "dinero por punto", esta conversión deja de aplicar. ## Multiplicadores [#multiplicadores] Sobre el cálculo base, dos ajustes pueden aumentar los puntos de una compra: Primero se calcula el punto base (según tu regla de dinero por punto o la conversión por moneda), después se aplican los puntos dobles si están activos y, por último, el bonus porcentual del nivel del cliente. El bonus de nivel se aplica según el nivel que el cliente tiene en el momento de la compra. ## Otras formas de sumar puntos [#otras-formas-de-sumar-puntos] La compra es la fuente principal, pero no la única. Loybox puede otorgar puntos también por: # Vencimiento de puntos (https://docs.loybox.com.ar/puntos-y-premios/expiracion) El vencimiento de puntos es una herramienta para generar urgencia: un saldo que vence es un motivo para volver antes de perderlo. Loybox te deja elegir cómo funciona, o desactivarlo por completo. ## Los tres modos [#los-tres-modos] ## El período de vencimiento [#el-período-de-vencimiento] Cuando activás el vencimiento, definís un período en días. Los puntos de una compra vencen una vez transcurrido ese período desde que se ganaron. El vencimiento sólo se aplica si el modo es "acumulado" o "por transacción" y el período de días es mayor que cero. Con el período en cero, los puntos no vencen aunque el modo esté activo. ## Acumulado vs. por transacción [#acumulado-vs-por-transacción] La diferencia clave es qué pasa cuando el cliente vuelve a comprar: Acumulado premia la constancia y es más amable: sólo pierde puntos quien se va del todo. Por transacción empuja a canjear seguido. Si recién arrancás y no querés fricción, empezá sin vencimiento y sumá una regla más adelante. ## Cómo lo ve el cliente [#cómo-lo-ve-el-cliente] Los puntos vencidos simplemente dejan de contar para el saldo: no se "borran" del historial, sino que no se suman cuando se calcula cuántos puntos tiene disponibles el cliente. Así, el saldo que ve siempre es el saldo que puede usar. # Premios (https://docs.loybox.com.ar/puntos-y-premios/premios) Los premios son las recompensas que tus clientes obtienen a cambio de puntos. Tu catálogo de premios es lo que le da sentido a acumular: cuanto más deseable sea, más fuerte es el incentivo para volver. Catálogo de premios en el panel de Loybox Seguí la guía paso a paso: [Crear un premio](https://docs.loybox.com.ar/puntos-y-premios/crear-un-premio). ## Qué configurás en un premio [#qué-configurás-en-un-premio] Cada premio se define con un puñado de campos: No hace falta escribir un título ni una descripción: el texto que ve el cliente se genera automáticamente a partir del tipo y el valor que elegís. Menos campos, menos fricción. ## Tipos de premio [#tipos-de-premio] Un premio puede entregar distintos tipos de recompensa: ## El estado de un premio [#el-estado-de-un-premio] En cada momento, un premio está en uno de estos estados según su configuración: | Estado | Qué significa | | ------------ | -------------------------------------- | | **Activo** | Disponible para canjear. | | **Inactivo** | Pausado manualmente desde el catálogo. | | **Vencido** | Pasó su fecha de vencimiento. | | **Agotado** | Alcanzó su límite total de canjes. | Sólo los premios activos (vigentes, con stock y sin pausar) aparecen disponibles para que el cliente los canjee. ## Premios para ocasiones especiales [#premios-para-ocasiones-especiales] Además de los premios de catálogo general, podés reservar premios para momentos concretos del recorrido del cliente: # Crear un premio (https://docs.loybox.com.ar/puntos-y-premios/crear-un-premio) Crear un premio toma menos de un minuto. En esta guía lo hacemos de punta a punta desde el panel. Modal Nuevo premio en el panel de Loybox ## Paso a paso [#paso-a-paso] ### Entrá a **Premios** [#entrá-a-premios] En el menú lateral, dentro de **Fidelización**, tocá **Premios**. Vas a ver tu **Catálogo de premios**. ### Tocá **Nuevo premio** [#tocá-nuevo-premio] El botón está arriba a la derecha del catálogo. Se abre una ventana para armar el premio. (Si todavía no tenés ninguno, el botón dice **Crear premio**.) ### Elegí el **Tipo de premio** [#elegí-el-tipo-de-premio] En el desplegable **Tipo de premio**, elegí qué va a recibir el cliente: | Tipo | Qué entrega | | ---------------------------- | ------------------------------------------------ | | **Producto gratis** | Un producto de tu catálogo, sin cargo. | | **Vale de dinero ($)** | Un monto fijo de descuento. | | **Descuento porcentual (%)** | Un porcentaje de descuento. | | **2x1** | Una promoción dos por uno. | | **Envío gratis** | El envío sin costo. | | **Otro** | Cualquier beneficio que definas con texto libre. | ### Completá el valor del premio [#completá-el-valor-del-premio] Según el tipo, aparece un campo distinto: * **Vale de dinero** → **Monto del vale ($)** (por ejemplo, `10.000`). * **Descuento porcentual** → **Porcentaje de descuento** (de 1 a 100). * **Producto gratis**, **2x1** u **Otro** → un campo **Detalle** para describirlo (hasta 40 caracteres). * **Envío gratis** → no necesita valor. En los tipos con monto o porcentaje podés sumar un **Detalle (opcional)** para afinar el texto que ve el cliente (por ejemplo, “en tu próxima compra”). ### Subí una imagen *(opcional)* [#subí-una-imagen-opcional] En **Imagen del premio (opcional)** podés subir una foto (PNG, JPG o WEBP, hasta 5 MB). Si no subís ninguna, Loybox usa un ícono según el tipo de premio. ### Poné el **Precio (puntos)** [#poné-el-precio-puntos] Es cuántos puntos cuesta canjear el premio. Es obligatorio y tiene que ser mayor a cero: hasta que lo completes, el botón de guardar queda deshabilitado. ### Ajustá los límites *(opcional)* [#ajustá-los-límites-opcional] * **Límite de canjes (opcional)**: cuántas veces puede canjearse en total. Dejalo en `0` para que sea ilimitado. * **Vencimiento (opcional)**: la fecha hasta la que está disponible. * **Otras restricciones (opcional)**: una aclaración libre (por ejemplo, “No acumulable con otras promociones”). ### Revisá la **Vista previa** [#revisá-la-vista-previa] A un costado vas a ver una **Vista previa** que muestra el premio tal como lo verá el cliente en su app, y se actualiza a medida que completás los campos. ### Tocá **Crear premio** [#tocá-crear-premio] Listo: el premio se guarda y aparece en tu **Catálogo de premios**, disponible para canje. Podés crear todos los que quieras. ## Dos cosas que conviene saber [#dos-cosas-que-conviene-saber] No hay un campo de nombre ni de descripción. El título y el texto del premio se generan automáticamente a partir del tipo y el valor que elegís, y podés verlos en la vista previa. No hay un interruptor de “activo” al crear. Si el premio está disponible, agotado o vencido surge de su configuración (precio, límite de canjes y vencimiento). Podés ver el estado de cada premio en el catálogo. ## Si tenés Tiendanube conectado [#si-tenés-tiendanube-conectado] Si tu tienda de Tiendanube está conectada, al crear un premio aparece un interruptor **Cupón Tiendanube**. Al activarlo, el premio genera un cupón real en tu tienda cuando el cliente lo canjea, y elegís el **Tipo de cupón** (descuento porcentual, monto fijo, envío gratis o producto gratis) y, según el caso, la **Categoría** a la que aplica. Con el cupón de Tiendanube activado, el premio usa la configuración del cupón en lugar de la imagen y el detalle libres. Es la opción ideal para que el canje se aplique solo en el checkout de tu tienda online. # Canje (https://docs.loybox.com.ar/puntos-y-premios/canje) El canje es el momento en que los puntos se convierten en valor real para el cliente. Loybox lo maneja de punta a punta: descuenta los puntos, le entrega el premio y le da a tu equipo una forma simple de validarlo. ## El flujo, paso a paso [#el-flujo-paso-a-paso] ### El cliente elige un premio [#el-cliente-elige-un-premio] Desde la app ve el catálogo de premios disponibles y cuánto cuesta cada uno en puntos. ### Loybox valida el saldo [#loybox-valida-el-saldo] El canje sólo procede si el cliente tiene puntos suficientes para cubrir el costo del premio. Si no llega, se le avisa cuántos le faltan. ### Se descuentan los puntos [#se-descuentan-los-puntos] Al confirmar, se registra el canje y el costo del premio se resta del saldo. El cliente queda con el premio a su nombre y un código de validación. ### Tu equipo valida el código [#tu-equipo-valida-el-código] En el local (o en el checkout de tu tienda), tu equipo ingresa el código para confirmar el premio y marcarlo como usado. ## El código de validación [#el-código-de-validación] Cada premio canjeado lleva un código corto y único que el cliente presenta al momento de usarlo. El código está asociado a tu marca y a ese canje puntual. Tu equipo lo busca, confirma que está pendiente de uso y lo marca como utilizado. Una vez usado, no se puede volver a validar: evita que el mismo premio se use dos veces. ## Canje y saldo [#canje-y-saldo] Recordá que el saldo del cliente se calcula: siempre es la suma de los puntos ganados vigentes menos los canjeados. Por eso, apenas se registra un canje, el saldo baja de forma consistente, sin ajustes manuales. ## Vigencia del premio canjeado [#vigencia-del-premio-canjeado] Un premio ya canjeado mantiene la fecha de vigencia del premio original: el cliente lo tiene reservado, pero debe usarlo antes de que venza. Esto mantiene el catálogo sano y evita premios "eternos" acumulados sin usar. # Fundamentos (https://docs.loybox.com.ar/niveles) Los niveles son la herramienta con la que reconocés a tus mejores clientes: a medida que consumen, avanzan de un nivel al siguiente y acceden a mejores beneficios. Es una forma de premiar la fidelidad sostenida, más allá de cada compra puntual. Sección Niveles en el panel de Loybox ## Qué es un nivel [#qué-es-un-nivel] Un nivel es un escalón dentro de tu club. A medida que el cliente consume, avanza de un nivel al siguiente y desbloquea mejores beneficios. Cada nivel tiene: ## El nivel base [#el-nivel-base] Todo cliente que se suma a tu club entra en el nivel base (el primer escalón, sin requisitos). Desde ahí empieza a escalar. El nivel base siempre existe y no vence: es el punto de partida de todos. ## Cómo funciona, de un vistazo [#cómo-funciona-de-un-vistazo] ### El cliente se suma [#el-cliente-se-suma] Entra automáticamente en el nivel base. ### Acumula y avanza [#acumula-y-avanza] Con cada compra suma hacia el umbral del próximo nivel. Al alcanzarlo, sube. ### Desbloquea beneficios [#desbloquea-beneficios] Cada nivel mejora lo que recibe: más puntos por compra, premios exclusivos y reconocimiento. ### Mantiene su estatus [#mantiene-su-estatus] Mientras siga activo, conserva (y sigue subiendo) su nivel. Además del valor de los beneficios, alcanzar un nivel funciona como un logro: mantenerlo y seguir subiendo es un motivo concreto para que el cliente vuelva. # Cómo suben de nivel (https://docs.loybox.com.ar/niveles/como-suben-de-nivel) Cada nivel tiene un umbral: lo que el cliente necesita acumular para alcanzarlo. Vos elegís en qué se mide ese umbral. ## Dos formas de medir el avance [#dos-formas-de-medir-el-avance] Cada nivel se mide con su propio criterio, así que podés combinar ambos dentro de la misma escalera si tiene sentido para tu marca. ## Se mide sobre el historial completo [#se-mide-sobre-el-historial-completo] Este es el punto clave: el avance se calcula sobre lo que el cliente acumuló a lo largo de toda su relación con tu marca, no sobre su saldo actual. Cuando un cliente gasta sus puntos en un premio, su saldo baja, pero su nivel no. El nivel refleja todo lo que ganó o gastó de por vida, así que canjear nunca lo hace retroceder. Puede disfrutar sus premios sin miedo a perder su estatus. ## Cómo se calcula el nivel [#cómo-se-calcula-el-nivel] Después de cada compra, Loybox revisa el historial del cliente y lo ubica en el nivel más alto cuyo umbral ya alcanzó. Si con esa compra cruzó el umbral del siguiente escalón, sube en el momento. Un nivel superior nunca puede tener un umbral más bajo que uno inferior. La escalera va de menor a mayor exigencia, de forma que subir siempre signifique avanzar de verdad. # Beneficios de cada nivel (https://docs.loybox.com.ar/niveles/beneficios-de-nivel) Cada nivel puede mejorar lo que el cliente recibe de tres formas. ## Multiplicador de puntos [#multiplicador-de-puntos] Cada nivel puede otorgar un porcentaje extra de puntos en cada compra. Es la recompensa que más se nota, porque acelera todo el resto. El multiplicador es un bonus porcentual: 0 % = sin bonus, 10 % = +10 %, 100 % = el doble de puntos. Un cliente “Oro” con +20 % que hace una compra de 100 puntos, se lleva 120. Se aplica según el nivel que el cliente tiene en el momento de la compra, y sólo mientras ese nivel esté activo. Es un motivo concreto para escalar: cuanto más alto el nivel, más rápido crece el saldo. ## Premio al alcanzar el nivel [#premio-al-alcanzar-el-nivel] Podés otorgar un premio de bienvenida cada vez que un cliente sube a un nivel: un empujón de puntos, un beneficio exclusivo, un regalo. Es el momento de mayor entusiasmo del cliente, y conviene reconocerlo. El premio de bienvenida a un nivel se da una única vez por cliente, la primera vez que lo alcanza. Aunque más adelante baje y vuelva a subir, no se repite. ## Recompensas exclusivas del nivel [#recompensas-exclusivas-del-nivel] Además del premio de llegada, un nivel puede tener recompensas que sólo disfrutan quienes están en él: ## Más allá de los puntos [#más-allá-de-los-puntos] Un nivel no tiene por qué basarse sólo en más puntos. También podés sumar beneficios que no dependen de un descuento: Una buena práctica es usar el multiplicador de puntos para acelerar la acumulación y los beneficios exclusivos para que cada nivel se distinga del anterior. Así el progreso se nota tanto en el saldo como en la experiencia. # Vencimiento y descenso (https://docs.loybox.com.ar/niveles/vencimiento-de-niveles) Un nivel puede ser para siempre o algo que hay que mantener. Las dos opciones son válidas; sirven para cosas distintas. ## Niveles que se mantienen [#niveles-que-se-mantienen] Podés darle a un nivel una vigencia en días. Si el cliente lo alcanza y después deja de tener actividad durante ese período, baja un escalón. De esta forma el nivel se mantiene con actividad, en lugar de conservarse para siempre tras alcanzarlo una vez. Cuando un nivel vence, el cliente no cae hasta abajo: baja un solo nivel, y el reloj vuelve a arrancar desde ahí. El descenso es gradual y siempre da margen para reaccionar. ## Se puede volver a subir [#se-puede-volver-a-subir] El descenso responde a la inactividad, no a un castigo permanente. Como el avance se calcula sobre el historial completo del cliente, si vuelve a comprar y su acumulado todavía alcanza para el nivel superior, vuelve a subir en la siguiente compra. En la práctica, el vencimiento sólo “pega” en quienes se alejaron del todo. ## Dónde aplica [#dónde-aplica] El vencimiento sólo tiene sentido en los niveles VIP (los que están por encima del base) medidos por puntos. El nivel base (el punto de partida de todos) no vence nunca: nadie queda afuera del club por inactividad. ## Cuándo conviene [#cuándo-conviene] Un período demasiado corto puede hacer que un cliente pierda el nivel por una pausa normal entre compras. Conviene empezar con un plazo holgado y ajustarlo según la frecuencia de compra real de tus clientes. # Armá tus niveles (https://docs.loybox.com.ar/niveles/armar-tus-niveles) Diseñar tus niveles es definir la escalera de tu club: cuántos hay, qué se pide para subir y qué ofrece cada uno. No hay una fórmula única, pero sí buenas prácticas. Esta es la guía. ## Los pasos [#los-pasos] ### Definí el nivel base [#definí-el-nivel-base] Es el escalón de entrada, sin requisitos: todos empiezan ahí. No lleva umbral ni vencimiento. ### Agregá tus niveles VIP [#agregá-tus-niveles-vip] Creá los escalones que van por encima. Para la mayoría de las marcas, tres a cuatro niveles en total es el punto justo: suficientes para dar progreso, sin volverse confusos. ### Elegí cómo se mide cada uno [#elegí-cómo-se-mide-cada-uno] Definí si el umbral es por puntos acumulados o por monto gastado, y el valor a alcanzar. Recordá: cada nivel superior debe pedir más que el anterior. ### Cargá los beneficios [#cargá-los-beneficios] Para cada nivel, definí el multiplicador de puntos, el premio al alcanzarlo y las recompensas exclusivas. Que cada escalón se sienta mejor que el anterior. ### Ponele nombre e ícono [#ponele-nombre-e-ícono] El nombre comunica estatus (Plata, Oro, Platino… o algo propio de tu marca) y el ícono lo hace visible en la app. ## Reglas que conviene tener en cuenta [#reglas-que-conviene-tener-en-cuenta] ## Niveles propios o los de Loybox [#niveles-propios-o-los-de-loybox] Podés usar una escalera de niveles propia, diseñada a medida de tu marca, o partir de la configuración por defecto de Loybox para arrancar rápido. Cuando definís tus propios niveles, tu marca usa esa escalera completa en lugar de la default. Un nombre descriptivo se entiende mejor que uno genérico: “Oro” comunica más que “Nivel 3”. Elegí una progresión clara y fácil de recordar. ## Un consejo para empezar [#un-consejo-para-empezar] No hace falta lanzar con la escalera perfecta. Empezá con dos o tres niveles claros, con beneficios genuinamente deseables, y ajustá con el tiempo según cómo se mueven tus clientes reales entre escalones. Seguí la guía paso a paso: [Crear un nivel](https://docs.loybox.com.ar/niveles/crear-un-nivel). # Crear un nivel (https://docs.loybox.com.ar/niveles/crear-un-nivel) Los niveles se arman como una escalera: primero el nivel base y después los niveles que van por encima. En esta guía creamos uno de punta a punta desde el panel. Modal Nuevo nivel en el panel de Loybox ## Paso a paso [#paso-a-paso] ### Entrá a **Niveles** [#entrá-a-niveles] En el menú lateral, dentro de **Fidelización**, tocá **Niveles**. ### Tocá **Nuevo nivel** [#tocá-nuevo-nivel] Se abre una ventana para configurar el nivel. Si todavía no tenés ninguno, empezá por el nivel base (por ejemplo, *Bronce*): es el punto de partida de todos los clientes. ### Poné el **Nombre** [#poné-el-nombre] El nombre que ve el cliente, por ejemplo *Oro*. ### Elegí un **Ícono** [#elegí-un-ícono] Buscá y seleccioná un ícono para el nivel. Es el distintivo visual que se muestra en la app. ### Elegí la **Métrica** [#elegí-la-métrica] Cómo se mide el avance hacia el nivel: * **Puntos**: por puntos acumulados. * **Monto ($)**: por monto gastado. ### Definí el **Umbral** [#definí-el-umbral] Cuánto necesita acumular el cliente para alcanzar el nivel (en puntos o en dinero, según la métrica). El nivel base no tiene umbral ni expiración: es el escalón de entrada, así que estos campos no aparecen al configurarlo. ### Ajustá la **Expiración (días)** *(opcional)* [#ajustá-la-expiración-días-opcional] Si querés que el nivel se mantenga con actividad, indicá en cuántos días vence. Dejalo vacío para que el nivel no venza. ### Cargá los **Premios** del nivel [#cargá-los-premios-del-nivel] Podés combinar los que quieras: * **Multiplicador (%)**: el porcentaje extra de puntos por compra (0 = sin bonus, 10 = +10 %, 100 = el doble). * **Puntos de regalo**: puntos que se otorgan una sola vez, al alcanzar el nivel por primera vez. * **Premios del catálogo**: premios existentes que se entregan al llegar al nivel. ### Tocá **Crear nivel** [#tocá-crear-nivel] El nivel se guarda y aparece en tu escalera de niveles. ## Ordenar los niveles [#ordenar-los-niveles] En la lista, arrastrá los niveles para ordenarlos. El primero siempre es el nivel base, y de ahí hacia arriba los umbrales tienen que ir de menor a mayor. ## Tres cosas que conviene saber [#tres-cosas-que-conviene-saber] Puntos o monto es una elección de toda la escalera, no de un nivel suelto. Si cambiás la métrica, se aplica a todos los niveles y los umbrales se reinician a cero: revisalos antes de guardar. Los premios exclusivos del nivel (al alcanzarlo o por evento, como cumpleaños) se cargan una vez que el nivel está guardado. Creá el nivel primero y después editalo para sumarlos. No hace falta lanzar con la escalera completa. Con el nivel base y dos o tres niveles por encima alcanza para arrancar; siempre podés sumar más y reordenar. # Fundamentos (https://docs.loybox.com.ar/referidos) Los referidos son la herramienta con la que tus propios clientes invitan a gente nueva a tu club. Cuando un invitado hace su primera compra, tanto quien invitó como el invitado ganan puntos. Es un canal de adquisición en el que tus clientes hacen la recomendación por vos, y el premio recién se paga cuando esa recomendación se convierte en una compra real. ## Cómo funciona [#cómo-funciona] ### Activás el programa [#activás-el-programa] Definís cuántos puntos se otorgan por cada referido efectivo. ### Cada cliente comparte su enlace [#cada-cliente-comparte-su-enlace] Desde su app, cada cliente tiene un enlace de invitación propio para compartir con quien quiera. ### Un nuevo cliente se suma [#un-nuevo-cliente-se-suma] La persona invitada abre el enlace y se suma a tu club. ### Ambos ganan puntos [#ambos-ganan-puntos] Cuando ese invitado hace su primera compra, los puntos se acreditan a los dos: a quien invitó y al invitado. ## Los puntos del referido [#los-puntos-del-referido] Configurás un solo valor: los mismos puntos se otorgan a quien invita y al invitado. Se acreditan una sola vez, en la primera compra del invitado (no al registrarse), de modo que el premio siempre acompaña a una venta real. ## Las reglas [#las-reglas] Para que un referido sume, Loybox valida algunas condiciones: # Activar los referidos (https://docs.loybox.com.ar/referidos/activar-referidos) Activar los referidos toma menos de un minuto. Se configura desde la página de **Premios**, junto al resto de las recompensas automáticas. Configuración del premio por invitar amigos en el panel de Loybox ## Paso a paso [#paso-a-paso] ### Entrá a **Premios** [#entrá-a-premios] En el menú lateral, dentro de **Fidelización**, tocá **Premios**. ### Bajá a **Premios especiales** [#bajá-a-premios-especiales] Debajo del catálogo vas a encontrar la sección **Premios especiales**, con las recompensas automáticas. ### En **Invitar amigos**, tocá **Configurar** [#en-invitar-amigos-tocá-configurar] Es el recuadro que dice *“Cuando un amigo invitado compra por primera vez, ambos ganan puntos.”* Si todavía no lo configuraste, aparece como **Sin configurar**. ### Definí los **Puntos para cada uno** [#definí-los-puntos-para-cada-uno] Ingresá cuántos puntos gana cada referido. Ese mismo valor se otorga a quien invita y al invitado, cuando el invitado hace su primera compra. ### Tocá **Guardar** [#tocá-guardar] Listo: el programa queda activo y tus clientes empiezan a ganar puntos por invitar. ## Editar o desactivar [#editar-o-desactivar] El valor que cargás es el mismo para ambas partes: no se configuran por separado los puntos de quien invita y los del invitado. # Fundamentos (https://docs.loybox.com.ar/resenas) Las reseñas son la herramienta con la que Loybox le pide a tus clientes, automáticamente y por WhatsApp, que dejen una reseña después de comprar. Sirve para juntar prueba social: reseñas de tu negocio en Google y reseñas de tus productos. Las reseñas se apoyan en los pedidos de tu tienda online: la solicitud se dispara cuando se entrega una compra. Por eso la herramienta requiere tu tienda conectada. ## Los tipos de reseña [#los-tipos-de-reseña] ## Cómo funciona el pedido [#cómo-funciona-el-pedido] ### El cliente recibe su compra [#el-cliente-recibe-su-compra] El pedido de reseña se apoya en la entrega de una compra de tu tienda. ### Loybox espera la demora que definiste [#loybox-espera-la-demora-que-definiste] Configurás cuántas horas esperar desde la entrega (por ejemplo, 24 = un día después de recibir el pedido). ### Se envía la solicitud por WhatsApp [#se-envía-la-solicitud-por-whatsapp] El cliente recibe el mensaje para reseñar tu negocio y/o los productos que compró. ### El cliente responde [#el-cliente-responde] Deja su reseña: en Google, en tu propio sistema, o respondiendo el WhatsApp con estrellas y un comentario (reseñas nativas). ## La reseña nativa [#la-reseña-nativa] Cuando usás las reseñas nativas de Loybox, el cliente califica de 1 a 5 estrellas y puede dejar un comentario opcional, todo dentro de la conversación de WhatsApp. Loybox guarda esas reseñas y las marca como verificadas, porque provienen de una compra real. ## Sin spam: la ventana de repetición [#sin-spam-la-ventana-de-repetición] Para no cansar a tus clientes, Loybox no vuelve a pedir la misma reseña una y otra vez: # Configurar reseñas (https://docs.loybox.com.ar/resenas/configurar-resenas) Configurar las reseñas es cuestión de activar lo que quieras usar. Los cambios se guardan solos a medida que los hacés. La sección **Reseñas** requiere tu tienda online conectada, porque los pedidos de reseña se disparan con la entrega de cada compra. Sección Reseñas en el panel de Loybox ## Reseñas del negocio (Google) [#reseñas-del-negocio-google] ### Entrá a **Reseñas** [#entrá-a-reseñas] En el menú lateral, tocá **Reseñas**. ### Activá **Pedir reseña en Google** [#activá-pedir-reseña-en-google] Con el interruptor encendido, después de cada compra se invita al cliente a dejar una reseña de tu negocio en Google. ### Conectá tu ficha de Google [#conectá-tu-ficha-de-google] Buscá y seleccioná tu negocio. Hasta que lo elijas, Loybox no puede enviar el pedido de reseña. ### Ajustá la **Demora del envío (horas)** [#ajustá-la-demora-del-envío-horas] Cuántas horas esperar desde la entrega antes de pedir la reseña (por ejemplo, `24` = un día después). ## Reseñas de productos [#reseñas-de-productos] ### Activá **Pedir reseña de productos** [#activá-pedir-reseña-de-productos] Con esto, se le pide al cliente que reseñe los productos que compró. ### Elegí el **Tipo de reseña** [#elegí-el-tipo-de-reseña] ### Ajustá la **Demora del envío (horas)** [#ajustá-la-demora-del-envío-horas-1] Igual que en Google: cuánto esperar desde la entrega para pedir la reseña. ### Si elegiste **Externas**, cargá los links [#si-elegiste-externas-cargá-los-links] En la sección **Links de reseña por producto**, buscá cada producto y pegá su link de reseña. Es lo que Loybox le va a mandar al cliente. No hay un botón de guardar: cada cambio (interruptores, tipo de reseña, demora) se aplica al instante. Podés previsualizar cómo le llega el WhatsApp al cliente en **Así le llega al cliente**. # Fundamentos (https://docs.loybox.com.ar/recomendaciones) Las recomendaciones son la herramienta con la que Loybox sugiere productos relevantes a cada cliente en tu tienda online, usando IA. En lugar de armar reglas producto por producto, el sistema aprende del catálogo y del comportamiento de compra para mostrar el producto indicado en el momento indicado. Las recomendaciones funcionan sobre tu tienda online conectada: se muestran en sus páginas (carrito, ficha de producto, checkout) y se envían por WhatsApp. ## Los tipos de recomendación [#los-tipos-de-recomendación] ## Dónde aparecen [#dónde-aparecen] Elegís en qué puntos de la tienda se muestran: ## Recomendaciones por WhatsApp [#recomendaciones-por-whatsapp] Además de la tienda, las recomendaciones pueden llegar por WhatsApp en dos momentos: ## Cómo se mide el impacto [#cómo-se-mide-el-impacto] Loybox atribuye las ventas que vienen de una recomendación: si el cliente compra dentro de la ventana de atribución después de ver una sugerencia, esa venta se cuenta como generada por las recomendaciones. Así podés ver el retorno real de la herramienta. ## Qué necesitás configurar [#qué-necesitás-configurar] Muy poco: la IA hace el trabajo de elegir qué mostrar. Vos definís si está activa, en qué lugares aparece y qué notificaciones enviar. # Configurar recomendaciones (https://docs.loybox.com.ar/recomendaciones/configurar-recomendaciones) La configuración está organizada en tres pestañas: **General**, **Ubicaciones** y **Notificaciones**. La sección **Recomendaciones** requiere tu tienda online conectada. ## General [#general] ### Entrá a **Recomendaciones** [#entrá-a-recomendaciones] En el menú lateral, tocá **Recomendaciones**. ### Activá **Recomendaciones activas** [#activá-recomendaciones-activas] Habilita el sistema de recomendaciones en toda la tienda. ### Ajustá **Upsell: % máximo más caro** [#ajustá-upsell--máximo-más-caro] Cuando se sugiere un producto superior, hasta qué porcentaje más caro que el producto base puede costar. Por ejemplo, `50%` sugiere productos de hasta un 50% más caros. ## Ubicaciones [#ubicaciones] En la pestaña **Ubicaciones** elegís en qué puntos de la tienda se muestran las recomendaciones: ## Notificaciones [#notificaciones] En la pestaña **Notificaciones** configurás los envíos por WhatsApp: ### Recomendación post-compra [#recomendación-post-compra] Activala para que, después de una compra, se le envíen al cliente productos que combinan con lo que compró. Definí la **Demora post-compra (horas)** para no ser invasivo. ### Reactivación de inactivos [#reactivación-de-inactivos] Activala para enviarles recomendaciones a los clientes que dejaron de comprar. Definí los **Días para considerar inactivo** a partir de los cuales aplica. ### Ventana de atribución (horas) [#ventana-de-atribución-horas] Si el cliente compra dentro de esta ventana después de ver una recomendación, esa venta se atribuye a la herramienta. Es lo que te permite medir el impacto. ## Guardar [#guardar] Cuando termines, tocá **Guardar configuración**. Los cambios quedan aplicados en tu tienda. # Fundamentos (https://docs.loybox.com.ar/carrito) Las herramientas de carrito trabajan sobre el momento de la compra en tu tienda online, con dos objetivos: recuperar las compras que quedaron a medias y empujar el ticket con recompensas por monto. Ambas herramientas requieren tu tienda online conectada. ## Dos herramientas [#dos-herramientas] ## Cuándo usar cada una [#cuándo-usar-cada-una] # Recuperar carritos abandonados (https://docs.loybox.com.ar/carrito/recuperar-carritos) Cuando un cliente deja productos en el carrito y no compra, Loybox le puede enviar recordatorios por WhatsApp para recuperar esa venta. Así se configura. ## Paso a paso [#paso-a-paso] ### Entrá a **Carrito** [#entrá-a-carrito] En el menú lateral, tocá **Carrito**. Arriba vas a ver **Carrito abandonado**. ### Activá los **Recordatorios** [#activá-los-recordatorios] Encendé **Recordatorios activos**. Con esto, si un cliente abandona su carrito, le llega un recordatorio por WhatsApp. ### Definí los tiempos de envío [#definí-los-tiempos-de-envío] En **Recordatorios (horas desde el abandono)** indicás cuántas horas después de abandonar el carrito se envía cada recordatorio. Podés poner varios: por ejemplo, `1, 24, 72` = a la hora, al día y a los 3 días. ### Sumá un cupón *(opcional)* [#sumá-un-cupón-opcional] Si querés dar un incentivo extra, agregá un cupón de descuento (porcentaje sobre el total o monto fijo) y definí su validez en horas. ### Guardá [#guardá] Los cambios quedan aplicados y los recordatorios empiezan a enviarse. Los recordatorios viajan por WhatsApp, así que necesitás WhatsApp Business conectado en Integraciones. Con dos o tres alcanza. El primero, temprano (a la hora o al día), suele ser el más efectivo; los siguientes sirven para reactivar a quien no respondió, sin volverse molesto. # Recompensas en el carrito (https://docs.loybox.com.ar/carrito/recompensas-en-carrito) Las recompensas en el carrito son reglas que desbloquean un regalo cuando la compra supera un monto. Sirven para empujar el ticket: “te falta poco para tu regalo”. Así se crea una regla. ## Paso a paso [#paso-a-paso] ### Entrá a **Carrito** [#entrá-a-carrito] En el menú lateral, tocá **Carrito**. Bajá hasta la sección de recompensas. ### Tocá **Nueva regla** [#tocá-nueva-regla] Se abre una ventana para configurar la regla. ### Poné un **Nombre** [#poné-un-nombre] Para identificarla en tu panel. Por ejemplo, *Regalo a partir de $20.000*. ### Definí el **Monto mínimo del carrito** [#definí-el-monto-mínimo-del-carrito] El subtotal a partir del cual se desbloquea la recompensa. ### Elegí el **Tipo de recompensa** [#elegí-el-tipo-de-recompensa] Según el tipo, completás el producto o el valor del descuento. ### Escribí el **Mensaje al cliente** [#escribí-el-mensaje-al-cliente] Es lo que ve en la tienda cuando desbloquea la recompensa (por ejemplo, “¡Ya podés acceder a tu regalo!”). Opcionalmente podés definir el texto del descuento en el checkout. ### Dejala **Activa** y tocá **Crear regla** [#dejala-activa-y-tocá-crear-regla] Solo las reglas activas se aplican en la tienda. Podés tener varias. Poné el monto mínimo un poco por encima de tu ticket promedio: lo suficiente para que el cliente sume un producto más, pero alcanzable como para que valga la pena intentarlo. # Fundamentos (https://docs.loybox.com.ar/segmentacion) La segmentación agrupa automáticamente a tus clientes según sus patrones de compra, para que sepas quién es quién en tu base y puedas accionar distinto con cada grupo. Loybox arma los segmentos por vos: no hay que definir reglas a mano. La segmentación se calcula sobre los pedidos de tu tienda online conectada. ## Cómo se arma: el modelo RFM [#cómo-se-arma-el-modelo-rfm] Cada cliente se clasifica según tres señales de su comportamiento de compra: Combinando estas tres señales, Loybox ubica a cada cliente en un segmento con una persona y un insight que explican quiénes son y qué conviene hacer. ## Los segmentos [#los-segmentos] Los segmentos siguen el estándar RFM. Algunos de los más comunes: | Segmento | Quiénes son | | ---------------------- | ---------------------------------------------------------------- | | **Champions** | Tus mejores clientes: compran seguido, hace poco y gastan mucho. | | **Leales** | Clientes habituales y constantes. | | **Leales en potencia** | Compradores recientes con buen ritmo, camino a ser leales. | | **Necesitan atención** | Buenos clientes que empezaron a espaciar sus compras. | | **En riesgo** | Solían comprar y se están alejando. | | **Hibernando** | Hace tiempo que no compran. | | **Perdidos** | Dejaron de comprar hace mucho. | Cada segmento muestra su regla RFM, cuántos clientes agrupa, su peso en la base y en las ventas, y promedios de recencia, frecuencia y ticket. ## Además: la salud de tu negocio [#además-la-salud-de-tu-negocio] El panel también resume el estado general de tu base con métricas clave: # Usar tus segmentos (https://docs.loybox.com.ar/segmentacion/usar-tus-segmentos) La segmentación no es solo un diagnóstico: sirve para accionar distinto con cada grupo de clientes. Así se usa el panel. ## Paso a paso [#paso-a-paso] ### Entrá a **Segmentación** [#entrá-a-segmentación] En el menú lateral, tocá **Segmentación**. ### Revisá la salud de tu negocio [#revisá-la-salud-de-tu-negocio] Arriba vas a ver el diagnóstico general y los KPIs (clientes activos, órdenes, ticket promedio, repeat rate y la concentración del top 20%). ### Explorá cada segmento [#explorá-cada-segmento] Cada segmento se muestra como una tarjeta con su persona, su insight, cuántos clientes agrupa y sus promedios (recencia, frecuencia, ticket) y la regla RFM que lo define. ### Mirá los clientes de un segmento [#mirá-los-clientes-de-un-segmento] Abrí un segmento para ver la lista de clientes que lo componen. Podés ordenarla por mayor o menor monto gastado, más o menos compras y por fecha de compra (más antigua o más reciente). ### Accioná con una campaña [#accioná-con-una-campaña] Desde un segmento podés lanzar una campaña por WhatsApp dirigida a ese grupo, para hablarle distinto a cada tipo de cliente. Para crear campañas por WhatsApp necesitás tener WhatsApp Business conectado en Integraciones. ## Cómo pensar cada segmento [#cómo-pensar-cada-segmento] La gracia está en tratar a cada grupo según lo que necesita: La segmentación se recalcula de forma periódica, así que los grupos se mantienen al día a medida que cambian los hábitos de tus clientes. # Fundamentos (https://docs.loybox.com.ar/campanas) Las campañas te permiten enviar un mensaje a un grupo de clientes por WhatsApp o email. Se apoyan en la [segmentación](https://docs.loybox.com.ar/segmentacion): en vez de escribirle a toda tu base, le hablás distinto a cada grupo según su comportamiento. El punto de partida de una campaña es un segmento: se lanzan desde el detalle de un segmento en **Segmentación**. Así la audiencia queda definida por el comportamiento de compra. ## Cómo funciona [#cómo-funciona] ### Elegís la audiencia [#elegís-la-audiencia] Un segmento (por ejemplo, *En riesgo*) o un cliente individual. ### Elegís el canal [#elegís-el-canal] WhatsApp o email, según cómo quieras llegar. ### Escribís el mensaje [#escribís-el-mensaje] Con variables de personalización como `{{first_name}}` para que cada cliente lo reciba con su nombre. ### Programás o enviás [#programás-o-enviás] Elegís fecha y hora, o lo enviás en el momento. ### Seguís los resultados [#seguís-los-resultados] Cada campaña muestra su estado y sus métricas. ## Los estados de una campaña [#los-estados-de-una-campaña] | Estado | Qué significa | | -------------- | ------------------------------------ | | **Borrador** | En preparación, todavía no se envió. | | **Programada** | Con fecha y hora de envío agendadas. | | **Enviando** | En proceso de envío. | | **Enviada** | Ya salió a la audiencia. | | **Cancelada** | Se detuvo antes de enviarse. | | **Falló** | Hubo un problema en el envío. | ## Personalización [#personalización] Los mensajes admiten variables que se completan con los datos de cada cliente (por ejemplo `{{first_name}}`), de modo que un mismo mensaje llega personalizado a cada persona. Para enviar por WhatsApp necesitás WhatsApp Business conectado en Integraciones. # Crear una campaña (https://docs.loybox.com.ar/campanas/crear-una-campana) Las campañas se crean a partir de un segmento, así que arrancan en la sección **Segmentación**. Así se hace de punta a punta. ## Paso a paso [#paso-a-paso] ### Abrí un segmento en **Segmentación** [#abrí-un-segmento-en-segmentación] Entrá a **Segmentación** y abrí el segmento al que le querés hablar (por ejemplo, *En riesgo* o *Champions*). ### Creá la campaña para ese grupo [#creá-la-campaña-para-ese-grupo] Desde el detalle del segmento, iniciá una campaña. La audiencia queda definida por ese segmento. ### Elegí el canal [#elegí-el-canal] WhatsApp o email. Para usar WhatsApp necesitás tener [WhatsApp Business conectado](https://docs.loybox.com.ar/integraciones/whatsapp) en Integraciones. ### Escribí el **Mensaje** [#escribí-el-mensaje] Redactá el texto. Usá variables como `{{first_name}}` para personalizarlo con el nombre de cada cliente. ### Previsualizá [#previsualizá] Revisá cómo va a llegar el mensaje antes de enviarlo. ### Programá el envío [#programá-el-envío] En **Fecha y hora**, elegí cuándo sale (tiene que ser a futuro) y tocá **Programar envío**. También podés guardarla como borrador. ### Seguí los resultados [#seguí-los-resultados] En **Campañas** vas a ver todas tus campañas con su estado (Borrador, Programada, Enviando, Enviada…) y sus métricas. La ventaja de partir de un segmento es poder ajustar el tono: a los *Champions* agradecerles y premiarlos; a los *En riesgo* darles un motivo concreto para volver. El mismo esfuerzo rinde más cuando el mensaje encaja con quién lo recibe. # Integraciones (https://docs.loybox.com.ar/integraciones) Loybox se conecta con las herramientas que ya usás para que tu programa de fidelidad funcione sin fricción: tu tienda online, WhatsApp y tu email marketing. Todas las integraciones se gestionan desde la sección **Integraciones** del panel. ## Disponibles [#disponibles] Muchas herramientas de Loybox, como las reseñas y las recomendaciones, se apoyan en tu tienda online conectada. Conectar Tiendanube es el primer paso para aprovecharlas. # Tiendanube (https://docs.loybox.com.ar/integraciones/tiendanube) La integración con Tiendanube conecta tu tienda online con Loybox. Es la base de la mayoría de las herramientas: los pedidos, los productos y los clientes de tu tienda se sincronizan automáticamente. ## Qué habilita [#qué-habilita] ## Cómo conectarla [#cómo-conectarla] ### Entrá a **Integraciones** [#entrá-a-integraciones] En el menú lateral del panel, abrí **Integraciones**. ### En **Tiendanube**, tocá **Conectar** [#en-tiendanube-tocá-conectar] Te redirige a Tiendanube para autorizar la conexión con tu tienda. ### Autorizá el acceso [#autorizá-el-acceso] Confirmá el permiso en Tiendanube. Al volver, la tienda queda conectada y empieza la sincronización. Conectar Tiendanube es el primer paso para usar puntos automáticos, canje en el checkout, reseñas y recomendaciones. # WhatsApp Business (https://docs.loybox.com.ar/integraciones/whatsapp) La integración con WhatsApp Business le permite a Loybox enviar mensajes a tus clientes por WhatsApp: notificaciones de puntos, pedidos de reseña, recomendaciones y campañas. ## Qué habilita [#qué-habilita] ## Cómo conectarla [#cómo-conectarla] ### Entrá a **Integraciones** [#entrá-a-integraciones] En el panel, abrí la sección **Integraciones**. ### En **WhatsApp Business**, tocá **Conectar** [#en-whatsapp-business-tocá-conectar] Se abre el flujo de Meta para vincular tu cuenta de WhatsApp Business. ### Completá la conexión con Meta [#completá-la-conexión-con-meta] Seguí los pasos de Meta para autorizar. Al terminar, WhatsApp Business queda conectado. La conexión se hace a través de Meta (Facebook), el proveedor oficial de la API de WhatsApp Business. # Perfit (https://docs.loybox.com.ar/integraciones/perfit) La integración con Perfit sincroniza los contactos de tu club con tu cuenta de Perfit, para que puedas sumar el email marketing a tu estrategia de fidelización. ## Qué habilita [#qué-habilita] ## Cómo conectarla [#cómo-conectarla] ### Entrá a **Integraciones** [#entrá-a-integraciones] En el panel, abrí la sección **Integraciones**. ### En **Perfit**, tocá **Conectar** [#en-perfit-tocá-conectar] Vinculá tu cuenta de Perfit siguiendo los pasos en pantalla. ### Listo [#listo] Al conectarse, Loybox empieza a sincronizar tus contactos con Perfit. # Referencia técnica (https://docs.loybox.com.ar/referencia-tecnica) Esta página resume, en un solo lugar, cómo funciona Loybox a nivel técnico: las entidades, las fórmulas y las reglas que gobiernan cada mecanismo. Cada sección enlaza a la guía correspondiente si necesitás el detalle completo. ## Entidades [#entidades] Todo el modelo se apoya en cinco piezas ([Conceptos](https://docs.loybox.com.ar/conceptos)): | Entidad | Qué representa | | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------- | | **Marca** | La empresa dentro de Loybox. Define moneda, reglas de puntos, catálogo de premios e identidad de la app. Puede tener una o varias sucursales. | | **Cliente** | La persona sumada al club. Tiene una relación con la marca, con saldo de puntos e historial propios. | | **Consumo** | El registro de una compra, en local o en la tienda online. Es lo que dispara el cálculo de puntos. | | **Punto** | La unidad de fidelidad. Se gana con consumos y otras acciones, y se gasta canjeando premios. | | **Premio** | La recompensa que el cliente obtiene a cambio de puntos. | ## Cálculo de puntos [#cálculo-de-puntos] La regla principal es dinero por punto ([Ganar puntos](https://docs.loybox.com.ar/puntos-y-premios/ganar-puntos)): ``` puntos = piso( monto de la compra ÷ dinero por punto ) ``` El redondeo es siempre hacia abajo. Con `$100 = 1 punto`, una compra de `$1.750` otorga `17` puntos. ### Conversión por defecto según moneda [#conversión-por-defecto-según-moneda] Si la marca no define una regla de dinero por punto, se aplica una conversión por moneda: | Moneda | Regla por defecto | | ------------------- | -------------------------------------------------------------------------------------------------- | | Euro (EUR) | 50 puntos por cada € | | Peso mexicano (MXN) | 1 punto cada 50 MXN | | Resto | Se convierte a dólares (cotización MEP, actualizada periódicamente) y se otorgan 50 puntos por USD | En cuanto la marca define su propia regla, esta conversión deja de aplicar. ### Orden de los multiplicadores [#orden-de-los-multiplicadores] El orden importa, porque los ajustes se aplican en cascada: ### Punto base [#punto-base] Según la regla de dinero por punto, o la conversión por moneda. ### Puntos dobles [#puntos-dobles] Si la promoción está vigente, duplica el resultado anterior. ### Bonus porcentual del nivel [#bonus-porcentual-del-nivel] Se aplica al final, según el nivel que el cliente tiene en el momento de la compra ([Beneficios de nivel](https://docs.loybox.com.ar/niveles/beneficios-de-nivel)). ### Otras fuentes de puntos [#otras-fuentes-de-puntos] Además del consumo, otorgan puntos los referidos (al concretarse la primera compra del invitado), el cumpleaños, la bienvenida al club y el hecho de alcanzar un nivel por primera vez. ## Saldo [#saldo] El saldo de un cliente es siempre `puntos ganados vigentes − puntos canjeados`. No existe un contador persistido que haya que reconciliar, así que el número es consistente con el historial real por construcción. Los puntos vencidos no se borran del historial: dejan de sumar cuando se calcula el saldo disponible. ## Vencimiento de puntos [#vencimiento-de-puntos] Hay tres modos ([Vencimiento de puntos](https://docs.loybox.com.ar/puntos-y-premios/expiracion)): | Modo | Comportamiento | | ------------------- | -------------------------------------------------------------------------------------------- | | **Sin vencimiento** | Los puntos no vencen nunca. Es el modo por defecto. | | **Acumulado** | Todo el saldo comparte una única fecha de vencimiento, que se renueva con cada compra nueva. | | **Por transacción** | Los puntos de cada consumo vencen a su propio ritmo, sin importar las compras posteriores. | El vencimiento se aplica sólo si el modo es `acumulado` o `por transacción` y el período en días es mayor que cero. Con el período en cero, los puntos no vencen aunque el modo esté activo. ## Niveles [#niveles] El nivel de un cliente se resuelve por umbrales ([Cómo suben de nivel](https://docs.loybox.com.ar/niveles/como-suben-de-nivel)): * Cada nivel se mide por puntos acumulados o por monto gastado, y cada nivel puede usar su propio criterio dentro de la misma escalera. * El avance se calcula sobre el historial completo de la relación, no sobre el saldo actual. Por eso canjear nunca baja de nivel: el saldo baja, el nivel no. * Después de cada compra, el cliente queda en el nivel más alto cuyo umbral ya alcanzó. * Los umbrales son siempre crecientes: un nivel superior no puede exigir menos que uno inferior. El nivel base es el escalón de entrada: no tiene umbral ni expiración, y no vence nunca ([Vencimiento y descenso](https://docs.loybox.com.ar/niveles/vencimiento-de-niveles)). El vencimiento de niveles sólo aplica a los niveles VIP medidos por puntos. ## Premios [#premios] Un premio se define por tipo y valor, costo en puntos, límite de canjes, vencimiento e imagen opcional ([Premios](https://docs.loybox.com.ar/puntos-y-premios/premios)). El texto que ve el cliente se genera a partir del tipo y el valor. Tipos: producto gratis, vale de dinero (`$`), descuento porcentual (`%`), 2x1, envío gratis y libre (texto propio). Estados posibles, derivados de la configuración: | Estado | Condición | | ------------ | ---------------------------------- | | **Activo** | Disponible para canjear. | | **Inactivo** | Pausado manualmente. | | **Vencido** | Pasó su fecha de vencimiento. | | **Agotado** | Alcanzó su límite total de canjes. | Sólo los premios activos aparecen disponibles para el cliente. Un límite de canjes en cero significa ilimitado. ## Canje [#canje] El flujo valida saldo antes de descontar ([Canje](https://docs.loybox.com.ar/puntos-y-premios/canje)): ### Validación de saldo [#validación-de-saldo] El canje procede sólo si el cliente cubre el costo en puntos del premio. ### Descuento y emisión [#descuento-y-emisión] Se registra el canje, el costo se resta del saldo y el premio queda a nombre del cliente con un código de validación corto y único. ### Validación del código [#validación-del-código] El código está asociado a la marca y a ese canje puntual. Una vez marcado como usado no puede volver a validarse, lo que evita el doble uso. Un premio ya canjeado conserva la fecha de vigencia del premio original. ## Segmentación [#segmentación] Los clientes se agrupan automáticamente con el modelo RFM ([Segmentación](https://docs.loybox.com.ar/segmentacion)), sobre tres señales: recencia (hace cuánto compró), frecuencia (cuántas veces) y monto (cuánto gastó en total). Los segmentos siguen el estándar RFM: Champions, Leales, Leales en potencia, Necesitan atención, En riesgo, Hibernando y Perdidos. Cada uno expone su regla RFM, su volumen de clientes, su peso en la base y en las ventas, y promedios de recencia, frecuencia y ticket. La segmentación se calcula sobre los pedidos de la tienda online conectada. ## Canales e integraciones [#canales-e-integraciones] Una misma marca puede operar el club en locales físicos (app PWA con su marca) y en su tienda online (integrada al checkout). Las reglas de puntos y el catálogo de premios se comparten entre canales. Integraciones disponibles ([Integraciones](https://docs.loybox.com.ar/integraciones)): Tiendanube (pedidos, productos y clientes), WhatsApp Business (notificaciones y mensajes) y Perfit (sincronización de contactos para email). Las reseñas y las recomendaciones dependen de tener la tienda online conectada. # Sobre la API (https://docs.loybox.com.ar/api-reference) La API de Loybox sirve para lo mismo que el panel, pero desde tu código: registrar compras que suman puntos, mostrar el catálogo de premios, canjear códigos y consultar el estado de un cliente. Es una API **REST sobre HTTPS**. Todo va y vuelve en JSON, los nombres de los campos están en `snake_case` y las fechas en formato ISO 8601 con zona horaria (`2026-03-14T18:30:00Z`). ## URL base [#url-base] Todas las rutas de esta referencia cuelgan de: ``` https://loybox-public-api-752998171300.southamerica-west1.run.app ``` La versión va en el primer segmento de la ruta (`/v1/...`). Cuando un endpoint cambia de forma no compatible aparece una versión nueva al lado de la anterior, y la anterior sigue funcionando: es el caso de [consultar un código](https://docs.loybox.com.ar/api-reference/beneficios/consultar-codigo) y su [versión 2](https://docs.loybox.com.ar/api-reference/beneficios/consultar-codigo-v2). ## Los ejemplos [#los-ejemplos] Cada página de endpoint trae la llamada entera en `curl`, lista para pegar en una terminal. Tres cosas son variables y valen para todos los ejemplos: | En el ejemplo | Qué poner | | ------------------- | --------------------------------------------------------------------------------------------------------------------- | | `$LOYBOX_API_KEY` | Tu [API key](https://docs.loybox.com.ar/api-reference/credenciales#api-key-del-comercio). Exportala en el ambiente, no la pegues en el comando. | | `$ACCESS_TOKEN` | El [token del usuario](https://docs.loybox.com.ar/api-reference/credenciales#token-del-usuario-final) que devolvió el login. | | `X-Commerce-Id: 87` | El id de **tu** comercio. | ## Formato de máquina [#formato-de-máquina] La API también está publicada como especificación, para generar un cliente en lugar de escribirlo: ``` https://docs.loybox.com.ar/openapi.json ``` Es OpenAPI 3.1 y cubre los 25 endpoints, los esquemas de respuesta y las dos credenciales. Si estás integrando con la ayuda de un agente, pasale esa URL. ## Las dos formas de integrarse [#las-dos-formas-de-integrarse] Esta es la decisión más importante y conviene tomarla antes de escribir código, porque cambia la credencial, los endpoints disponibles y dónde corre tu código. Cada sección de esta referencia usa una de las dos, y cada página de endpoint lo dice arriba: | Sección | Credencial | Para qué | | --------------------------------------------- | ----------------- | -------------------------------------- | | [Consumos](https://docs.loybox.com.ar/api-reference/consumos) | API key | Registrar compras que suman puntos | | [Clientes](https://docs.loybox.com.ar/api-reference/clientes) | API key | Consultar clientes y sus beneficios | | [Beneficios](https://docs.loybox.com.ar/api-reference/beneficios) | API key | Catálogo, consulta de códigos y canje | | [Autenticación](https://docs.loybox.com.ar/api-reference/autenticacion) | — | Login del usuario final por email | | [Mi cuenta](https://docs.loybox.com.ar/api-reference/mi-cuenta) | Token del usuario | Puntos, canjes e historial del usuario | | [Público](https://docs.loybox.com.ar/api-reference/publico) | — | Marca y catálogo, sin login | La API key del comercio da acceso a los datos de **todos** tus clientes. Vive sólo en tu servidor. Lo que sí puede vivir en el browser es el token de acceso del usuario final, que sólo ve lo suyo. ## Cómo se ven las respuestas [#cómo-se-ven-las-respuestas] Las respuestas no llevan sobre: el objeto viene en la raíz, y los listados vienen como array directo. ```json // GET /v1/clients/12345 { "code": 12345, "username": "Ana Pérez", "email": "ana@example.com", "points": 340 } ``` Los campos opcionales vienen presentes y en `null`, no ausentes. Podés leerlos sin chequear si existen, pero sí hay que chequear si son `null`. ## Paginación [#paginación] Hay dos esquemas, y cada uno vive en un solo endpoint: ### Límite y desplazamiento [#límite-y-desplazamiento] [Listar clientes](https://docs.loybox.com.ar/api-reference/clientes/listar) usa `limit` y `offset`, y devuelve el total para que puedas armar los números de página. ```json // GET /v1/clients/list?limit=20&offset=40 { "items": [], "total": 1875, "limit": 20, "offset": 40 } ``` `limit` va de 1 a 100 y por defecto es 20. `offset` arranca en 0. ### Cursor [#cursor] [Mi historial](https://docs.loybox.com.ar/api-reference/mi-cuenta/historial) usa cursor, porque es una lista que crece por arriba y los números de página se desacomodan. Se pide la página siguiente pasando el `next_cursor` de la respuesta anterior en `?cursor=`. ```json // GET /v1/me/activity { "results": [], "next_cursor": "eyJkIjoiMjAyNi0wMy0xNCJ9", "previous_cursor": null } ``` Cuando `next_cursor` viene en `null`, no hay más páginas. ## Por dónde empezar [#por-dónde-empezar] # Primeros pasos (https://docs.loybox.com.ar/api-reference/primeros-pasos) Esta página es la integración completa de punta a punta. Si venís a implementar y querés leer una sola página antes de escribir código, es esta. Hay **dos caminos** y no son excluyentes: casi todas las integraciones empiezan por el primero y agregan el segundo cuando quieren que el cliente vea sus puntos por su cuenta. | Camino | Qué resuelve | Credencial | | ------------------------------------------------------------- | --------------------------------------------------------------------- | ------------------------------------------------------------------------ | | [Desde tu servidor](#camino-1-sumar-puntos-desde-tu-servidor) | Que las compras sumen puntos y que los códigos se canjeen en la venta | [API key](https://docs.loybox.com.ar/api-reference/credenciales#api-key-del-comercio) | | [Desde tu frontend](#camino-2-el-club-en-tu-frontend) | Que el cliente vea sus puntos, canjee y muestre su código | [Token del usuario](https://docs.loybox.com.ar/api-reference/credenciales#token-del-usuario-final) | ## Antes de empezar [#antes-de-empezar] Necesitás dos cosas, y las dos te las damos nosotros: escribinos a [hola@loybox.com.ar](mailto:hola@loybox.com.ar). La API key del comercio. Va sólo en tu servidor. El id de tu comercio. Es el que viaja en el header `X-Commerce-Id` y puede ir en el frontend. Los ejemplos de acá en adelante usan las [convenciones de la referencia](https://docs.loybox.com.ar/api-reference#los-ejemplos): `$LOYBOX_API_KEY` para la API key, `$ACCESS_TOKEN` para el token del usuario y `87` como `commerce_id`. ## Camino 1: sumar puntos desde tu servidor [#camino-1-sumar-puntos-desde-tu-servidor] Es la integración mínima de un programa de fidelidad: una sola llamada, en el lugar donde tu sistema confirma una venta. ### Registrá la compra [#registrá-la-compra] En el checkout online ya tenés el email, así que [por email](https://docs.loybox.com.ar/api-reference/consumos/crear-por-email) es el camino corto: funciona incluso si el cliente todavía no tiene cuenta en Loybox. ```bash curl -X POST https://loybox-public-api-752998171300.southamerica-west1.run.app/v1/consumptions/email \ -H "Authorization: Bearer $LOYBOX_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "client_email": "ana@example.com", "amount": 1750 }' ``` En una caja física, donde el cliente da su número, es la misma llamada [por código](https://docs.loybox.com.ar/api-reference/consumos/crear-por-codigo) con `client_code`. `amount` son unidades enteras de la moneda del comercio. Una compra de `$1.750,50` se manda como `1750`. Cuántos puntos suma no lo decide tu llamada: lo decide la configuración del comercio. Mandás el monto y Loybox aplica la regla de dinero por punto, los puntos dobles si están vigentes y el bonus del nivel, en ese orden ([la fórmula](https://docs.loybox.com.ar/referencia-tecnica#cálculo-de-puntos)). ### Mostrale el saldo [#mostrale-el-saldo] La respuesta del consumo no dice cuántos puntos sumó. El saldo se [consulta aparte](https://docs.loybox.com.ar/api-reference/clientes/obtener): ```bash curl https://loybox-public-api-752998171300.southamerica-west1.run.app/v1/clients/12345 \ -H "Authorization: Bearer $LOYBOX_API_KEY" ``` Con esto ya tenés un programa funcionando: las compras suman y el cliente tiene un saldo. ### Consultá el código que trae el cliente [#consultá-el-código-que-trae-el-cliente] Cuando el cliente llega con un código de canje (su `client_benefit_code`), lo primero es ver qué es. Usá [la v2](https://docs.loybox.com.ar/api-reference/beneficios/consultar-codigo-v2), que trae el valor del descuento en la raíz: ```bash curl https://loybox-public-api-752998171300.southamerica-west1.run.app/v2/benefits/preview/887766 \ -H "Authorization: Bearer $LOYBOX_API_KEY" ``` Con el `type` y el `value` de la respuesta aplicás el descuento en tu venta: | `type` | Qué hacer | | --------------------- | --------------------------------- | | `percentage_discount` | Aplicar el porcentaje de `value`. | | `absolute_discount` | Descontar el monto de `value`. | | `free_product` | Agregar el producto de `product`. | Un `400` acá significa que el código ya se usó: no apliques nada. ### Canjealo cuando la venta se cerró [#canjealo-cuando-la-venta-se-cerró] [El canje](https://docs.loybox.com.ar/api-reference/beneficios/canjear) quema el código y no tiene vuelta atrás: ```bash curl -X POST https://loybox-public-api-752998171300.southamerica-west1.run.app/v1/benefits/redeem \ -H "Authorization: Bearer $LOYBOX_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "client_benefit_code": 887766 }' ``` Consultar es inofensivo y se puede repetir; canjear es definitivo. Si canjeás antes de cerrar la venta y la venta se cae, el cliente perdió el premio y no hay forma de devolvérselo por API. ## Camino 2: el club en tu frontend [#camino-2-el-club-en-tu-frontend] Acá Loybox funciona como motor de fidelidad debajo de tu producto: el usuario inicia sesión con un código que le llega por email y desde ahí ve sus puntos, compra beneficios y muestra sus códigos. Todo esto puede correr en el browser. Ninguna llamada de este camino lleva la API key: da acceso a los datos de todos tus clientes. Lo que viaja es el token del usuario, que sólo ve lo suyo, más el `X-Commerce-Id`, que no es secreto. ### Pedile el código [#pedile-el-código] ```bash curl -X POST https://loybox-public-api-752998171300.southamerica-west1.run.app/v1/auth/otp/request \ -H "X-Commerce-Id: 87" \ -H "Content-Type: application/json" \ -d '{ "email": "ana@example.com" }' ``` Responde `200` siempre, incluso si ese email no tiene cuenta. En la UI mostrás siempre el mismo mensaje ("te mandamos un código a tu email"), porque no podés saber si la cuenta existía. ### Verificalo y guardá la sesión [#verificalo-y-guardá-la-sesión] ```bash curl -X POST https://loybox-public-api-752998171300.southamerica-west1.run.app/v1/auth/otp/verify \ -H "X-Commerce-Id: 87" \ -H "Content-Type: application/json" \ -d '{ "email": "ana@example.com", "otp": "418302" }' ``` Devuelve `access` y `refresh`. Guardá los dos: el `access` vence a los `expires_in` segundos y el `refresh` sirve para [renovarlo](https://docs.loybox.com.ar/api-reference/autenticacion/renovar-token) sin pedirle otro código al usuario. Si el email no tenía cuenta, se crea, y en ambos casos el usuario queda adherido a tu programa. ### Pintá la pantalla con una sola llamada [#pintá-la-pantalla-con-una-sola-llamada] [`GET /v1/me`](https://docs.loybox.com.ar/api-reference/mi-cuenta/obtener) trae de una los puntos, la marca del comercio y los puntos por vencer: ```js const res = await fetch( 'https://loybox-public-api-752998171300.southamerica-west1.run.app/v1/me', { headers: { Authorization: `Bearer ${accessToken}`, 'X-Commerce-Id': '87', }, }, ); const me = await res.json(); // me.points -> el saldo grande de la pantalla // me.commerce -> logo, nombre y color para la marca del programa // me.subscribed -> si viene false, mostrá el llamado a adherirse ``` Un `401` acá quiere decir que el `access` venció: [renovalo](https://docs.loybox.com.ar/api-reference/autenticacion/renovar-token) y reintentá la llamada. ### Mostrá el catálogo y comprá [#mostrá-el-catálogo-y-comprá] [El catálogo](https://docs.loybox.com.ar/api-reference/mi-cuenta/beneficios-disponibles) viene sin filtrar por saldo: comparás el `cost` de cada beneficio con los `points` del usuario y decidís qué mostrar como alcanzable y qué como "te faltan N puntos". ```bash curl -X POST https://loybox-public-api-752998171300.southamerica-west1.run.app/v1/me/benefits/exchange \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "X-Commerce-Id: 87" \ -H "Idempotency-Key: 8f14e45f-ea0f-4d1c-9a1b-2c3d4e5f6a7b" \ -H "Content-Type: application/json" \ -d '{ "benefit_id": "b_9f2a" }' ``` Comprar cambia puntos por un beneficio, y lo hace el usuario desde tu frontend. Canjear usa ese beneficio en la venta, y lo hace tu servidor con la API key ([paso 4 del camino 1](#camino-1-sumar-puntos-desde-tu-servidor)). ### Mostrale el código [#mostrale-el-código] La compra devuelve un `client_benefit_code`. Ese número es el código de canje y también el código de cupón: en una tienda online es lo que el usuario pega en el checkout, y en un local es lo que muestra en el mostrador. Mostralo grande, con un botón de copiar y el `due_date` al lado. La lista completa de los que tiene está en [mis beneficios](https://docs.loybox.com.ar/api-reference/mi-cuenta/mis-beneficios). ## El circuito completo [#el-circuito-completo] Los dos caminos se cierran así, y es el modelo mental que conviene tener antes de escribir código: ``` compra ──▶ POST /v1/consumptions/email (tu servidor, API key) │ ▼ puntos al cliente │ ▼ POST /v1/me/benefits/exchange (tu frontend, token del usuario) │ ▼ client_benefit_code │ ▼ GET /v2/benefits/preview/{code} (tu servidor, API key) │ ▼ POST /v1/benefits/redeem (tu servidor, API key) ``` ## Antes de salir a producción [#antes-de-salir-a-producción] * La **API key vive sólo en tu servidor**. Si se filtró, escribinos y la rotamos. * **Nunca reintentes un `400`** a ciegas: es el beneficio ya usado, el vencido o los puntos que no alcanzan. Leé el `message` y cortá. * **Comprar un beneficio lleva `Idempotency-Key`**. Es lo que evita cobrar los puntos dos veces cuando se corta la red. * Un **`401`** en Mi cuenta es la señal de renovar el token, no de sacar al usuario de la sesión. * El **`404` de [mi nivel](https://docs.loybox.com.ar/api-reference/mi-cuenta/nivel)** es el caso normal de un cliente nuevo: esconder la sección de niveles, no mostrar un error. * **`points_expiration` no viene en `null`** cuando los puntos no vencen: viene con `mode: "none"`. Chequeá el `mode` antes de mostrar el aviso. ## Si estás implementando con un agente [#si-estás-implementando-con-un-agente] La API está publicada en formato de máquina: * [`/openapi.json`](https://docs.loybox.com.ar/openapi.json): la especificación OpenAPI 3.1 completa, con los 25 endpoints, los esquemas y las dos credenciales. Sirve para generar un cliente tipado. * [`/llms.txt`](https://docs.loybox.com.ar/llms.txt) y [`/llms-full.txt`](https://docs.loybox.com.ar/llms-full.txt): la doc entera en texto, pensada para pasarle como contexto. * Cualquier página de la doc en Markdown crudo agregándole `.md` a la URL, por ejemplo [`/api-reference/credenciales.md`](https://docs.loybox.com.ar/api-reference/credenciales.md). # Credenciales (https://docs.loybox.com.ar/api-reference/credenciales) La API tiene **dos credenciales distintas**, y no son intercambiables. Cuál usás depende de dónde corre tu código y de qué datos necesita ver. ## API key del comercio [#api-key-del-comercio] Es la integración clásica: tu backend opera sobre todos los clientes del comercio. La API key va en el header `Authorization`: ``` Authorization: Bearer {api-key} ``` Con esta credencial funcionan [Consumos](https://docs.loybox.com.ar/api-reference/consumos), [Beneficios](https://docs.loybox.com.ar/api-reference/beneficios) y [Clientes](https://docs.loybox.com.ar/api-reference/clientes). No hace falta ningún otro header: la key ya identifica al comercio. La API key da acceso a los datos de **todos** tus clientes. No la pongas nunca en el frontend, en una app móvil, ni en un repositorio. Si se filtró, escribinos a [hola@loybox.com.ar](mailto:hola@loybox.com.ar) para rotarla. ## Token del usuario final [#token-del-usuario-final] Pensada para conectar Loybox directo al frontend y usarlo como motor de fidelidad: el usuario inicia sesión con un código que le llega por email y a partir de ahí consulta sus puntos, compra beneficios y ve su historial. Van dos headers: ``` Authorization: Bearer {access-token-del-usuario} X-Commerce-Id: {tu-commerce-id} ``` Con esta credencial funcionan [Autenticación](https://docs.loybox.com.ar/api-reference/autenticacion), [Mi cuenta](https://docs.loybox.com.ar/api-reference/mi-cuenta) y [Público](https://docs.loybox.com.ar/api-reference/publico). Este token **sí puede vivir en el browser**: sólo ve los datos de ese usuario en tu comercio. ## El header X-Commerce-Id [#el-header-x-commerce-id] Id del comercio que integra la API. Todas las respuestas quedan limitadas a este comercio. Es obligatorio en **todos** los endpoints de Autenticación, Mi cuenta y Público, incluso en los que no llevan token. Es el header que acota la respuesta a tu programa: un mismo usuario puede estar en varios programas de Loybox y con este header ve sólo el tuyo. No es un secreto: va en el frontend sin problema. Lo que hace es delimitar, no autorizar. ## El flujo de login [#el-flujo-de-login] ### Pedir el código [#pedir-el-código] [`POST /v1/auth/otp/request`](https://docs.loybox.com.ar/api-reference/autenticacion/pedir-codigo) con el email del usuario. Le llega un código de 6 dígitos. ### Verificarlo [#verificarlo] [`POST /v1/auth/otp/verify`](https://docs.loybox.com.ar/api-reference/autenticacion/verificar-codigo) con el email y el código. Devuelve un token de acceso (`access`) y uno de refresco (`refresh`). Si el email no tenía cuenta en Loybox se crea, y en ambos casos el usuario queda adherido al programa de tu comercio. ### Usar la sesión [#usar-la-sesión] A partir de ahí, las llamadas a [Mi cuenta](https://docs.loybox.com.ar/api-reference/mi-cuenta) van con `Authorization: Bearer {access}`. ### Renovarla [#renovarla] Cuando el `access` vence, [`POST /v1/auth/refresh`](https://docs.loybox.com.ar/api-reference/autenticacion/renovar-token) devuelve uno nuevo a partir del `refresh`, sin pedirle otro código al usuario. El código vence a los **10 minutos** y admite **5 intentos**. Pedir un código nuevo invalida el anterior. ## Resumen [#resumen] | | API key del comercio | Token del usuario final | | -------------- | --------------------------------- | -------------------------------------------------- | | **Header** | `Authorization: Bearer {api-key}` | `Authorization: Bearer {access}` + `X-Commerce-Id` | | **Dónde vive** | Sólo en tu servidor | Puede vivir en el browser | | **Qué ve** | Todos los clientes del comercio | Sólo ese usuario, sólo en tu comercio | | **Vence** | No | Sí, se renueva con el `refresh` | | **Secciones** | Consumos, Beneficios, Clientes | Autenticación, Mi cuenta, Público | # Objetos (https://docs.loybox.com.ar/api-reference/objetos) Esta página es el diccionario de la API: cada objeto que aparece en una respuesta, con todos sus campos. Las páginas de endpoint enlazan acá en lugar de repetir las listas. ## Los tres códigos [#los-tres-códigos] Antes que nada, esto: la API maneja tres identificadores parecidos y confundirlos es el error más común al integrarse. | Código | Qué identifica | Dónde se usa | | --------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | | `client_code` | Un **cliente**. Es el número que tiene cada persona registrada en Loybox. | [Registrar un consumo](https://docs.loybox.com.ar/api-reference/consumos/crear-por-codigo), [consultar un cliente](https://docs.loybox.com.ar/api-reference/clientes/obtener) | | `benefit_id` | Un **beneficio del catálogo**, el que creó el comercio. | [Consultar un beneficio](https://docs.loybox.com.ar/api-reference/beneficios/obtener), [comprarlo](https://docs.loybox.com.ar/api-reference/mi-cuenta/comprar-beneficio) | | `client_benefit_code` | Un **beneficio ya comprado** por un cliente concreto. | [Consultar el código](https://docs.loybox.com.ar/api-reference/beneficios/consultar-codigo), [canjearlo](https://docs.loybox.com.ar/api-reference/beneficios/canjear) | El comercio crea **beneficios**, y cada uno tiene un `benefit_id`. Cuando un cliente compra uno con sus puntos recibe un **beneficio canjeable** con su propio `client_benefit_code`. El `benefit_id` sirve sólo para consultar información. El `client_benefit_code` sirve para consultar **y para canjear**: es el código que el cliente presenta en el local, o pega en el checkout de la tienda online. ## Cliente [#cliente] Aparece en [listar clientes](https://docs.loybox.com.ar/api-reference/clientes/listar) y [consultar un cliente](https://docs.loybox.com.ar/api-reference/clientes/obtener). El código del cliente. Nombre del cliente. Email del cliente. Puntos que tiene en el comercio. ## Beneficio [#beneficio] El beneficio del catálogo. Aparece en casi todas las respuestas de [Beneficios](https://docs.loybox.com.ar/api-reference/beneficios), [Clientes](https://docs.loybox.com.ar/api-reference/clientes), [Mi cuenta](https://docs.loybox.com.ar/api-reference/mi-cuenta) y [Público](https://docs.loybox.com.ar/api-reference/publico). El `benefit_id`. Qué clase de premio es: `percentage_discount`, `absolute_discount` o `free_product`. Descripción del beneficio. Cuántos puntos cuesta comprarlo. Hasta cuándo está vigente. `null` si no vence. `normal` para los del catálogo; `welcome`, `birthday`, `monthly_top` o `level` para las recompensas especiales. Por defecto, `normal`. Color de marca del comercio, en hexadecimal. Cantidad total de canjes permitidos para este beneficio. `0` significa sin límite. El detalle del premio. Ver [Premio](#premio). El cupón, si el beneficio se aplica en una tienda de Tiendanube. Ver [Cupón de Tiendanube](#cupón-de-tiendanube). ### Beneficio (v2) [#beneficio-v2] [`GET /v2/benefits/preview/{client_benefit_code}`](https://docs.loybox.com.ar/api-reference/beneficios/consultar-codigo-v2) devuelve una versión con tres campos más, que evitan tener que entrar a `prize` para lo básico: Título del beneficio. En la v1 sólo estaba dentro de `prize`. El valor del descuento: el porcentaje si es `percentage_discount`, el monto si es `absolute_discount`. El producto, si es `free_product`. Ver [Producto](#producto). El resto de los campos son los mismos que en [Beneficio](#beneficio). ## Beneficio canjeable [#beneficio-canjeable] Un beneficio que un cliente ya compró. Aparece en [beneficios comprados](https://docs.loybox.com.ar/api-reference/clientes/beneficios-comprados), [mis beneficios](https://docs.loybox.com.ar/api-reference/mi-cuenta/mis-beneficios) y como respuesta de [comprar un beneficio](https://docs.loybox.com.ar/api-reference/mi-cuenta/comprar-beneficio). El código de canje. Es lo que el cliente presenta en el comercio, y también el código de cupón en una tienda online. Cuándo lo compró. Hasta cuándo puede canjearlo. `null` si no vence. Si ya fue canjeado. Por defecto, `false`. El beneficio comprado. Ver [Beneficio](#beneficio). ## Premio [#premio] El detalle de lo que gana el cliente. Va dentro de `prize`. `percentage_discount`, `absolute_discount` o `free_product`. Título del premio. Descripción del premio. El porcentaje o el monto del descuento, según el `type`. El producto de regalo. Ver [Producto](#producto). Vencimiento del premio. URL de la imagen del premio. ## Producto [#producto] Id del producto en Loybox. Nombre del producto. Id del producto en el sistema del comercio. ## Comercio [#comercio] Los datos de marca del programa. Aparece en [datos del comercio](https://docs.loybox.com.ar/api-reference/publico/comercio) y dentro de [mi cuenta](https://docs.loybox.com.ar/api-reference/mi-cuenta/obtener). El `commerce_id`, el mismo que va en el header `X-Commerce-Id`. Nombre del comercio. URL del logo. Color de marca en hexadecimal, para la UI del programa. Rubro del comercio, por ejemplo `Tienda de comics`. Moneda del comercio. ## Mi cuenta [#mi-cuenta] La respuesta de [`GET /v1/me`](https://docs.loybox.com.ar/api-reference/mi-cuenta/obtener). Nombre del usuario. Email del usuario. Teléfono del usuario. Puntos del usuario en este comercio. Por defecto, `0`. Si el usuario está adherido al programa de este comercio. Por defecto, `false`. Datos del comercio, para pintar la marca del programa. Ver [Comercio](#comercio). Puntos que están por vencer. Ver [Vencimiento de puntos](#vencimiento-de-puntos). ## Vencimiento de puntos [#vencimiento-de-puntos] Puntos que están por vencer. Por defecto, `0`. Cuándo vencen. Días que faltan. Meses que faltan. Cómo vencen los puntos en este comercio: `none`, `rolling` o `accumulated`. `none` significa que no vencen. Si el comercio no hace vencer los puntos, el objeto viene con `mode: "none"` y `points: 0`, no en `null`. Ver [Vencimiento de puntos](https://docs.loybox.com.ar/puntos-y-premios/expiracion) para el detalle de los modos. ## Nivel [#nivel] La respuesta de [`GET /v1/me/level`](https://docs.loybox.com.ar/api-reference/mi-cuenta/nivel). Nombre del nivel. Posición del nivel en la escalera. Multiplicador de puntos que da el nivel. URL del icono del nivel. Cuándo alcanzó el nivel. Cuándo vence el nivel. Si el nivel ya venció. El nivel siguiente y qué falta para alcanzarlo. Ver [Próximo nivel](#próximo-nivel). Puntos ganados en total, el acumulado histórico. Monto gastado en total. Cantidad de consumos registrados. ### Próximo nivel [#próximo-nivel] Nombre del próximo nivel. Posición del próximo nivel. Con qué se mide el umbral: por puntos acumulados o por monto gastado. El valor del umbral a alcanzar. ## Movimiento [#movimiento] Cada item de [mi historial](https://docs.loybox.com.ar/api-reference/mi-cuenta/historial). Qué pasó: `consumption` (una compra que sumó puntos), `benefit_exchange` (compró un beneficio con puntos), `benefit_usage` (canjeó un beneficio) o `points_special_reward` (una recompensa automática le dio puntos). Cuándo pasó. Puntos que sumó o restó el movimiento. El beneficio involucrado, en los movimientos de beneficio. Ver [Beneficio](#beneficio). Monto de la compra, en los movimientos de tipo `consumption`. El evento que disparó la recompensa, en los `points_special_reward`. Nota adicional del movimiento. ## Recompensa automática [#recompensa-automática] Cada item de [recompensas del programa](https://docs.loybox.com.ar/api-reference/mi-cuenta/recompensas). Evento que la dispara: `welcome`, `birthday` o `monthly_top`. `benefit` si entrega un beneficio, `points` si entrega puntos. El beneficio que entrega, cuando `reward_type` es `benefit`. Ver [Beneficio](#beneficio). Los puntos que entrega, cuando `reward_type` es `points`. ## Sesión [#sesión] La respuesta de [verificar el código](https://docs.loybox.com.ar/api-reference/autenticacion/verificar-codigo). Token de acceso. Se manda como `Authorization: Bearer {access}` en los endpoints de Mi cuenta. Token de refresco, para obtener un nuevo `access` sin volver a pedir un código. Segundos de validez del token de acceso. Id del usuario. Nombre del usuario. Email del usuario. Teléfono del usuario. ## Cupón de Tiendanube [#cupón-de-tiendanube] Va dentro de `tiendanube_coupon` cuando el beneficio se aplica en una tienda de [Tiendanube](https://docs.loybox.com.ar/integraciones/tiendanube). `percentage`, `absolute` o `shipping`. El valor del cupón. Id de la categoría de Tiendanube a la que aplica el cupón. Nombre de esa categoría. Hasta cuándo vale el cupón. El producto al que aplica el cupón, si aplica a uno solo. Ver [Producto de Tiendanube](#producto-de-tiendanube). ### Producto de Tiendanube [#producto-de-tiendanube] Id del producto en Tiendanube. Nombre del producto. URL del producto en la tienda. Si hay stock. Si está publicado en la tienda. Marca del producto. Categorías del producto, cada una con `id` y `name`. Por defecto, vacío. # Errores (https://docs.loybox.com.ar/api-reference/errores) Cuando algo sale mal, la API responde con un código de estado HTTP y un cuerpo con un solo campo: ```json { "message": "Client not found" } ``` El `message` es un texto para el desarrollador, no para mostrarle al usuario: puede cambiar sin aviso. Lo que conviene mirar en el código es **el código de estado**. ## Códigos de estado [#códigos-de-estado] | Código | Qué significa | Qué hacer | | ------ | --------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | `200` | Salió bien. | — | | `201` | Se creó el recurso. Lo devuelven los dos endpoints de [Consumos](https://docs.loybox.com.ar/api-reference/consumos). | — | | `400` | El pedido no se pudo procesar: el beneficio ya se usó, no está vigente, o al usuario no le alcanzan los puntos. | Leer el `message` para saber cuál de los casos es. No reintentar igual. | | `401` | La credencial falta, venció o no sirve para este endpoint. | Con API key, revisar que sea la correcta. Con token de usuario, [renovarlo](https://docs.loybox.com.ar/api-reference/autenticacion/renovar-token). | | `403` | El cliente existe pero no puede tener consumos. | No reintentar. | | `404` | El recurso no existe: cliente, beneficio o comercio. | Revisar el código o el id que mandaste. | | `422` | El cuerpo o los headers no pasaron la validación. | Ver [Errores de validación](#errores-de-validación). | ## Errores de validación [#errores-de-validación] El `422` es distinto a los demás: no trae `message` sino un `detail` con la lista de todo lo que está mal, un item por campo. ```json { "detail": [ { "loc": ["body", "amount"], "msg": "Input should be a valid integer", "type": "int_parsing" } ] } ``` Dónde está el problema. El primer elemento dice en qué parte del pedido (`body`, `query`, `header`, `path`) y el resto es el camino hasta el campo. Qué tiene de malo. El tipo de error de validación. La causa más frecuente de un `422` no es el cuerpo: es **el header `X-Commerce-Id` que falta**. Es obligatorio en todos los endpoints de [Autenticación](https://docs.loybox.com.ar/api-reference/autenticacion), [Mi cuenta](https://docs.loybox.com.ar/api-reference/mi-cuenta) y [Público](https://docs.loybox.com.ar/api-reference/publico). ## Dos casos que no son errores [#dos-casos-que-no-son-errores] [`POST /v1/auth/otp/request`](https://docs.loybox.com.ar/api-reference/autenticacion/pedir-codigo) responde `200` incluso si el email no tiene cuenta en Loybox. Es a propósito: si respondiera distinto, cualquiera podría usar el endpoint para averiguar qué emails están registrados. No lo uses para validar si un usuario existe. [`GET /v1/me/level`](https://docs.loybox.com.ar/api-reference/mi-cuenta/nivel) devuelve `404` cuando el usuario todavía no tiene nivel, o cuando el comercio no usa niveles. Es el caso normal de un cliente nuevo, no una falla: en la UI corresponde esconder la sección de niveles, no mostrar un error. ## Reintentos [#reintentos] Comprar un beneficio mueve puntos, así que un reintento a ciegas puede cobrarlos dos veces. Para eso [`POST /v1/me/benefits/exchange`](https://docs.loybox.com.ar/api-reference/mi-cuenta/comprar-beneficio) acepta el header `Idempotency-Key`: si mandás el mismo valor otra vez, la compra no se repite. ``` Idempotency-Key: 8f14e45f-ea0f-4d1c-9a1b-2c3d4e5f6a7b ``` Usá un valor distinto por cada compra que el usuario inicia (un UUID alcanza) y el mismo en todos los reintentos de esa compra. # Consumos (https://docs.loybox.com.ar/api-reference/consumos) Un **consumo** es el registro de una compra. Es lo que dispara el cálculo de puntos: cada vez que un cliente compra, tu sistema avisa a Loybox y Loybox le suma los puntos que correspondan. Es la integración mínima de un programa de fidelidad. Si sólo vas a llamar un endpoint de toda esta API, es alguno de estos dos. ## Los dos endpoints [#los-dos-endpoints] Hacen lo mismo y se diferencian sólo en cómo identifican al cliente: | | Por código | Por email | | ----------------------------- | ---------------------------------------- | ---------------------------------------------- | | **Identifica al cliente con** | Su `client_code` | Su email | | **Si el cliente no existe** | Devuelve `404` | Registra el consumo igual y lo invita por mail | | **Cuándo usarlo** | Caja o app donde el cliente da su código | Checkout online, donde ya tenés el email | ## Cuántos puntos suma [#cuántos-puntos-suma] Eso no lo decide la llamada: lo decide la configuración del comercio. Vos mandás el **monto** de la compra y Loybox aplica la regla de dinero por punto, los puntos dobles si están vigentes y el bonus del nivel del cliente, en ese orden. La fórmula y el orden de los multiplicadores están en [Referencia técnica](https://docs.loybox.com.ar/referencia-tecnica#cálculo-de-puntos). El campo `amount` es un `integer`: son unidades de la moneda del comercio, sin decimales. Una compra de `$1.750,50` se manda como `1750`. ## Credencial [#credencial] Los dos endpoints van desde tu servidor, con la [API key del comercio](https://docs.loybox.com.ar/api-reference/credenciales#api-key-del-comercio): ``` Authorization: Bearer {api-key} ``` # Crear consumo por código (https://docs.loybox.com.ar/api-reference/consumos/crear-por-codigo) Registra un nuevo consumo usando el código del cliente. Es la llamada que suma los puntos de una compra. El cliente tiene que existir: si el código no corresponde a ningún cliente, la llamada devuelve `404` y no se registra nada. Si preferís que el consumo se registre igual, usá [crear consumo por email](https://docs.loybox.com.ar/api-reference/consumos/crear-por-email). ## Cuerpo [#cuerpo] El código del cliente que hizo la compra. Monto de la compra, en unidades enteras de la moneda del comercio. Id de la caja donde se hizo la compra. Id de la sucursal donde se hizo la compra. ## Ejemplo [#ejemplo] ```bash curl -X POST https://loybox-public-api-752998171300.southamerica-west1.run.app/v1/consumptions/client-code \ -H "Authorization: Bearer $LOYBOX_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "client_code": 12345, "amount": 1750, "counter_id": 2, "id_suc": 1 }' ``` ```json // 201 Created { "message": "Consumption created successfully" } ``` La respuesta no dice cuántos puntos sumó. Para verlo, consultá al cliente con [`GET /v1/clients/{client_code}`](https://docs.loybox.com.ar/api-reference/clientes/obtener). ## Errores [#errores] | Código | Cuándo | | ------ | -------------------------------------------------------------------------------------------------------------------------------- | | `400` | No se pudo crear el consumo. | | `403` | El cliente existe pero no es elegible para tener consumos. | | `404` | El cliente no existe. | | `422` | Falta un campo del cuerpo o tiene el tipo equivocado. Ver [Errores de validación](https://docs.loybox.com.ar/api-reference/errores#errores-de-validación). | # Crear consumo por email (https://docs.loybox.com.ar/api-reference/consumos/crear-por-email) Registra un nuevo consumo usando el email del cliente. Es el que conviene en un checkout online, donde el email ya lo tenés y pedirle un código al cliente sobraría. Si el email no corresponde a ninguna cuenta de Loybox, el consumo **se crea igual** y automáticamente le llega un mail invitándolo a registrarse. Cuando se registra, los puntos de esa compra ya están esperándolo. Es la forma de que el programa empiece a acumular valor antes de que el cliente se sume. ## Cuerpo [#cuerpo] Email del cliente que hizo la compra. Monto de la compra, en unidades enteras de la moneda del comercio. ## Ejemplo [#ejemplo] ```bash curl -X POST https://loybox-public-api-752998171300.southamerica-west1.run.app/v1/consumptions/email \ -H "Authorization: Bearer $LOYBOX_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "client_email": "ana@example.com", "amount": 1750 }' ``` ```json // 201 Created { "message": "Consumption created successfully" } ``` ## Errores [#errores] | Código | Cuándo | | ------ | ----------------------------------------------------------------------------------------------------------------------------------------- | | `400` | No se pudo crear el consumo. | | `403` | El cliente existe pero no es elegible para tener consumos. | | `404` | El cliente no existe. | | `422` | Falta un campo del cuerpo, o el email no tiene formato válido. Ver [Errores de validación](https://docs.loybox.com.ar/api-reference/errores#errores-de-validación). | # Clientes (https://docs.loybox.com.ar/api-reference/clientes) Un **cliente** es una persona sumada al club del comercio. Tiene un `client_code`, un saldo de puntos y un historial propios. Esta sección es de sólo lectura: sirve para mostrar el estado de un cliente en tu sistema: en la pantalla de caja, en el perfil de la tienda online, en un CRM. Los puntos se mueven registrando [consumos](https://docs.loybox.com.ar/api-reference/consumos) y [canjeando beneficios](https://docs.loybox.com.ar/api-reference/beneficios/canjear), no desde acá. ## Los dos listados de beneficios [#los-dos-listados-de-beneficios] Hay dos endpoints de beneficios por cliente y conviene no confundirlos: | Endpoint | Qué trae | | ----------------------------------------------------------------------- | --------------------------------------------------------------------- | | [`/available-benefits`](https://docs.loybox.com.ar/api-reference/clientes/beneficios-disponibles) | Los que el cliente **puede comprar** con los puntos que tiene | | [`/benefits`](https://docs.loybox.com.ar/api-reference/clientes/beneficios-comprados) | Los que **ya compró** y todavía puede canjear, cada uno con su código | ## Credencial [#credencial] Toda la sección va desde tu servidor, con la [API key del comercio](https://docs.loybox.com.ar/api-reference/credenciales#api-key-del-comercio): ``` Authorization: Bearer {api-key} ``` Estos endpoints exponen nombre, email y puntos de las personas del club. No los llames desde el frontend: si necesitás que el propio usuario vea sus datos, para eso está [Mi cuenta](https://docs.loybox.com.ar/api-reference/mi-cuenta), que sólo muestra lo suyo. # Listar clientes (https://docs.loybox.com.ar/api-reference/clientes/listar) Trae el listado de clientes del comercio, paginado en formato límite y desplazamiento. ## Parámetros [#parámetros] Cuántos clientes traer por página. De `1` a `100`. Por defecto, `20`. Desde qué posición arrancar. Por defecto, `0`. ## Respuesta [#respuesta] Los clientes de esta página. Ver [Cliente](https://docs.loybox.com.ar/api-reference/objetos#cliente). Cantidad total de clientes del comercio, sin paginar. El límite aplicado. El desplazamiento aplicado. ## Ejemplo [#ejemplo] ```bash curl https://loybox-public-api-752998171300.southamerica-west1.run.app/v1/clients/list?limit=2&offset=0 \ -H "Authorization: Bearer $LOYBOX_API_KEY" ``` ```json // 200 OK { "items": [ { "code": 12345, "username": "Ana Pérez", "email": "ana@example.com", "points": 340 }, { "code": 12346, "username": "Bruno Díaz", "email": "bruno@example.com", "points": 0 } ], "total": 1875, "limit": 2, "offset": 0 } ``` Para recorrer todo el listado, andá sumando `limit` al `offset` hasta que la suma llegue a `total`. ## Errores [#errores] | Código | Cuándo | | ------ | ---------------------------------------------------------------- | | `401` | La API key es inválida: no tiene un comercio asociado. | | `422` | `limit` está fuera del rango de 1 a 100, o `offset` es negativo. | # Obtener un cliente (https://docs.loybox.com.ar/api-reference/clientes/obtener) Busca un cliente por su código. El `client_code` es el número que tiene cada persona registrada en Loybox: es el que el cliente da en la caja y el que se usa para [registrar un consumo](https://docs.loybox.com.ar/api-reference/consumos/crear-por-codigo). ## Parámetros [#parámetros] El código del cliente. ## Respuesta [#respuesta] Un objeto [Cliente](https://docs.loybox.com.ar/api-reference/objetos#cliente). ```bash curl https://loybox-public-api-752998171300.southamerica-west1.run.app/v1/clients/12345 \ -H "Authorization: Bearer $LOYBOX_API_KEY" ``` ```json // 200 OK { "code": 12345, "username": "Ana Pérez", "email": "ana@example.com", "points": 340 } ``` El campo `points` es el saldo disponible: puntos ganados vigentes menos puntos canjeados. Los puntos vencidos no cuentan. Ver [Saldo](https://docs.loybox.com.ar/referencia-tecnica#saldo). ## Errores [#errores] | Código | Cuándo | | ------ | ------------------------------------- | | `404` | El cliente no existe. | | `422` | El código no tiene un formato válido. | # Beneficios que puede comprar (https://docs.loybox.com.ar/api-reference/clientes/beneficios-disponibles) Busca los beneficios disponibles para un cliente: los que se le muestran en su panel de beneficios, es decir los que **puede comprar** con sus puntos. Es la contracara de [beneficios comprados](https://docs.loybox.com.ar/api-reference/clientes/beneficios-comprados), que trae los que ya canjeó puntos por ellos. ## Parámetros [#parámetros] El código del cliente. ## Respuesta [#respuesta] Un array de [Beneficio](https://docs.loybox.com.ar/api-reference/objetos#beneficio). ```bash curl https://loybox-public-api-752998171300.southamerica-west1.run.app/v1/clients/12345/available-benefits \ -H "Authorization: Bearer $LOYBOX_API_KEY" ``` ```json // 200 OK [ { "id": "b_9f2a", "type": "percentage_discount", "description": "20% de descuento en toda la tienda", "cost": 250, "expiration": "2026-12-31T23:59:59Z", "benefit_type": "normal", "color": "#f1a10d", "buy_limit": 0, "prize": { "type": "percentage_discount", "title": "20% off", "description": "Válido en toda la tienda", "value": 20, "product": null, "expiration": "2026-12-31T23:59:59Z", "image": null }, "tiendanube_coupon": null } ] ``` El `cost` de cada beneficio es lo que cuesta en puntos. Para saber cuáles le alcanzan, comparalo con el `points` de [obtener un cliente](https://docs.loybox.com.ar/api-reference/clientes/obtener). ## Errores [#errores] | Código | Cuándo | | ------ | ------------------------------------- | | `404` | El cliente no existe. | | `422` | El código no tiene un formato válido. | # Beneficios comprados (https://docs.loybox.com.ar/api-reference/clientes/beneficios-comprados) Trae los beneficios que el cliente **ya compró** con sus puntos y todavía puede canjear en el comercio. Es la contracara de [beneficios que puede comprar](https://docs.loybox.com.ar/api-reference/clientes/beneficios-disponibles): ahí van los que le alcanzan con sus puntos, acá los que ya son suyos. El `client_benefit_code` de cada item es el código que se usa para [consultar el beneficio](https://docs.loybox.com.ar/api-reference/beneficios/consultar-codigo) y para [canjearlo](https://docs.loybox.com.ar/api-reference/beneficios/canjear). Es el número que el cliente presenta en el local o pega en el checkout. ## Parámetros [#parámetros] El código del cliente. Sin especificar trae **sólo los canjeables**: sin usar y sin vencer. `true` trae los ya canjeados y `false` los no canjeados, en ambos casos sin filtrar por vencimiento. El comportamiento por defecto es el que sirve para operar: mostrarle al cliente qué puede usar hoy. El parámetro `used` es para consultar el historial. ## Respuesta [#respuesta] Un array de [Beneficio canjeable](https://docs.loybox.com.ar/api-reference/objetos#beneficio-canjeable). ```bash curl https://loybox-public-api-752998171300.southamerica-west1.run.app/v1/clients/12345/benefits \ -H "Authorization: Bearer $LOYBOX_API_KEY" ``` ```json // 200 OK [ { "client_benefit_code": 887766, "issue_date": "2026-03-01T14:22:00Z", "due_date": "2026-04-01T14:22:00Z", "used": false, "benefit": { "id": "b_9f2a", "type": "percentage_discount", "description": "20% de descuento en toda la tienda", "cost": 250, "expiration": "2026-12-31T23:59:59Z", "benefit_type": "normal", "color": "#f1a10d", "buy_limit": 0, "prize": null, "tiendanube_coupon": null } } ] ``` ## Errores [#errores] | Código | Cuándo | | ------ | ----------------------------------------------------------------- | | `401` | La API key es inválida: no tiene un comercio asociado. | | `404` | El cliente no existe. | | `422` | El código no tiene un formato válido, o `used` no es un booleano. | # Beneficios (https://docs.loybox.com.ar/api-reference/beneficios) Esta sección tiene las dos mitades de la vida de un premio: **el catálogo** que armó el comercio, y **el canje** de un código que un cliente trae para usar. El comercio crea **beneficios**, y cada uno tiene un `benefit_id`. Cuando un cliente compra uno con sus puntos recibe un **beneficio canjeable** con su propio `client_benefit_code`. El `benefit_id` sirve sólo para consultar información. El `client_benefit_code` sirve para consultar **y para canjear**. ## El flujo del canje [#el-flujo-del-canje] Así se ve del lado de tu sistema cuando un cliente llega con un código: ### El cliente da su código [#el-cliente-da-su-código] Lo tiene en su app de Loybox. Es el `client_benefit_code`. ### Consultás qué es [#consultás-qué-es] [`GET /v1/benefits/preview/{client_benefit_code}`](https://docs.loybox.com.ar/api-reference/beneficios/consultar-codigo) te dice qué premio es y, si corresponde, qué descuento aplicar. Todavía no canjea nada. ### Aplicás el descuento [#aplicás-el-descuento] En tu caja, tu e-commerce o donde corra la venta, con los datos del paso anterior. ### Lo marcás como usado [#lo-marcás-como-usado] [`POST /v1/benefits/redeem`](https://docs.loybox.com.ar/api-reference/beneficios/canjear). A partir de acá el código queda quemado y no se puede volver a usar. Consultar es inofensivo y se puede repetir; canjear es definitivo. Si canjeás antes de cerrar la venta y la venta se cae, el cliente perdió el premio. ## Los endpoints [#los-endpoints] ## Credencial [#credencial] Toda la sección va desde tu servidor, con la [API key del comercio](https://docs.loybox.com.ar/api-reference/credenciales#api-key-del-comercio): ``` Authorization: Bearer {api-key} ``` # Listar beneficios (https://docs.loybox.com.ar/api-reference/beneficios/listar) Trae una lista de todos los beneficios creados por el comercio. Es el catálogo completo, sin filtrar por vigencia ni por cliente. No lleva parámetros ni paginación. ## Respuesta [#respuesta] Un array de [Beneficio](https://docs.loybox.com.ar/api-reference/objetos#beneficio). ```bash curl https://loybox-public-api-752998171300.southamerica-west1.run.app/v1/benefits/list \ -H "Authorization: Bearer $LOYBOX_API_KEY" ``` ```json // 200 OK [ { "id": "b_9f2a", "type": "percentage_discount", "description": "20% de descuento en toda la tienda", "cost": 250, "expiration": "2026-12-31T23:59:59Z", "benefit_type": "normal", "color": "#f1a10d", "buy_limit": 0, "prize": null, "tiendanube_coupon": null }, { "id": "b_4c81", "type": "free_product", "description": "Café de regalo", "cost": 100, "expiration": null, "benefit_type": "welcome", "color": "#f1a10d", "buy_limit": 1, "prize": null, "tiendanube_coupon": null } ] ``` El campo `benefit_type` distingue los beneficios del catálogo (`normal`) de las recompensas que el comercio entrega solas: `welcome`, `birthday`, `monthly_top` y `level`. Si querés mostrar sólo lo que el cliente puede comprar con puntos, filtrá por `normal`, o usá [beneficios que puede comprar](https://docs.loybox.com.ar/api-reference/clientes/beneficios-disponibles), que ya viene filtrado. ## Errores [#errores] Este endpoint no declara errores propios más allá de los [generales](https://docs.loybox.com.ar/api-reference/errores). # Obtener un beneficio (https://docs.loybox.com.ar/api-reference/beneficios/obtener) Trae información sobre un beneficio del catálogo usando su id. El `benefit_id` identifica un beneficio del **catálogo**, no el de un cliente concreto. Para consultar el beneficio que un cliente trae para usar, el identificador es el `client_benefit_code` y el endpoint es [consultar un código](https://docs.loybox.com.ar/api-reference/beneficios/consultar-codigo). ## Parámetros [#parámetros] El id del beneficio. ## Respuesta [#respuesta] Un objeto [Beneficio](https://docs.loybox.com.ar/api-reference/objetos#beneficio). ```bash curl https://loybox-public-api-752998171300.southamerica-west1.run.app/v1/benefits/b_9f2a \ -H "Authorization: Bearer $LOYBOX_API_KEY" ``` ```json // 200 OK { "id": "b_9f2a", "type": "percentage_discount", "description": "20% de descuento en toda la tienda", "cost": 250, "expiration": "2026-12-31T23:59:59Z", "benefit_type": "normal", "color": "#f1a10d", "buy_limit": 0, "prize": { "type": "percentage_discount", "title": "20% off", "description": "Válido en toda la tienda", "value": 20, "product": null, "expiration": "2026-12-31T23:59:59Z", "image": null }, "tiendanube_coupon": null } ``` ## Errores [#errores] | Código | Cuándo | | ------ | ------------------------------------------------------ | | `401` | La API key es inválida: no tiene un comercio asociado. | | `404` | El beneficio no existe. | | `422` | El id no tiene un formato válido. | # Consultar un código (https://docs.loybox.com.ar/api-reference/beneficios/consultar-codigo) Trae información sobre un beneficio usando el código que el cliente tiene para canjearlo. Sirve para saber **qué acciones tomar** antes de canjear: qué clase de premio es, cuánto descuento aplicar, si es un producto de regalo. Con eso tu sistema puede aplicar el beneficio en la venta y sólo después [marcarlo como usado](https://docs.loybox.com.ar/api-reference/beneficios/canjear). Consultar no canjea: podés llamarlo las veces que necesites. [La v2](https://docs.loybox.com.ar/api-reference/beneficios/consultar-codigo-v2) devuelve lo mismo más el `title`, el `value` del descuento y el `product` al nivel de arriba, sin tener que entrar a `prize`. Para una integración nueva conviene esa. ## Parámetros [#parámetros] El código de canje que tiene el cliente. ## Respuesta [#respuesta] Un objeto [Beneficio](https://docs.loybox.com.ar/api-reference/objetos#beneficio). ```bash curl https://loybox-public-api-752998171300.southamerica-west1.run.app/v1/benefits/preview/887766 \ -H "Authorization: Bearer $LOYBOX_API_KEY" ``` ```json // 200 OK { "id": "b_9f2a", "type": "percentage_discount", "description": "20% de descuento en toda la tienda", "cost": 250, "expiration": "2026-12-31T23:59:59Z", "benefit_type": "normal", "color": "#f1a10d", "buy_limit": 0, "prize": { "type": "percentage_discount", "title": "20% off", "description": "Válido en toda la tienda", "value": 20, "product": null, "expiration": "2026-12-31T23:59:59Z", "image": null }, "tiendanube_coupon": null } ``` Qué mirar según el `type`: | `type` | Qué hacer | | --------------------- | --------------------------------------- | | `percentage_discount` | Aplicar el porcentaje de `prize.value`. | | `absolute_discount` | Descontar el monto de `prize.value`. | | `free_product` | Agregar el producto de `prize.product`. | ## Errores [#errores] | Código | Cuándo | | ------ | ------------------------------------------------------ | | `400` | El beneficio ya fue usado. | | `401` | La API key es inválida: no tiene un comercio asociado. | | `404` | El beneficio no existe. | | `422` | El código no tiene un formato válido. | Un `400` acá ya te dice que no sigas: el código está quemado y no hay que aplicar ningún descuento. # Consultar un código (v2) (https://docs.loybox.com.ar/api-reference/beneficios/consultar-codigo-v2) Hace lo mismo que [la versión 1](https://docs.loybox.com.ar/api-reference/beneficios/consultar-codigo), que trae información sobre el beneficio a partir del código que el cliente tiene para canjearlo, pero devuelve tres campos más en la raíz del objeto. Para una integración nueva, usá esta. ## Qué cambia [#qué-cambia] | Campo | En la v1 | En la v2 | | --------- | ---------------------- | ------------------------------ | | `title` | Sólo dentro de `prize` | En la raíz, y siempre presente | | `value` | Sólo dentro de `prize` | En la raíz | | `product` | Sólo dentro de `prize` | En la raíz | En la práctica: para aplicar el descuento ya no hace falta entrar a `prize` ni chequear que exista. El resto de los campos son los mismos. ## Parámetros [#parámetros] El código de canje que tiene el cliente. ## Respuesta [#respuesta] Un objeto [Beneficio (v2)](https://docs.loybox.com.ar/api-reference/objetos#beneficio-v2). ```bash curl https://loybox-public-api-752998171300.southamerica-west1.run.app/v2/benefits/preview/887766 \ -H "Authorization: Bearer $LOYBOX_API_KEY" ``` ```json // 200 OK { "id": "b_9f2a", "type": "percentage_discount", "value": 20, "title": "20% off", "description": "Válido en toda la tienda", "product": null, "cost": 250, "expiration": "2026-12-31T23:59:59Z", "benefit_type": "normal", "color": "#f1a10d", "buy_limit": 0, "prize": null, "tiendanube_coupon": null } ``` Qué mirar según el `type`: | `type` | Qué hacer | | --------------------- | --------------------------------- | | `percentage_discount` | Aplicar el porcentaje de `value`. | | `absolute_discount` | Descontar el monto de `value`. | | `free_product` | Agregar el producto de `product`. | ## Cómo se canjea [#cómo-se-canjea] Igual que en la v1: con [`POST /v1/benefits/redeem`](https://docs.loybox.com.ar/api-reference/beneficios/canjear). El canje no tiene versión 2: el mismo código sirve para las dos. ## Errores [#errores] | Código | Cuándo | | ------ | ------------------------------------------------------ | | `400` | El beneficio ya fue usado. | | `401` | La API key es inválida: no tiene un comercio asociado. | | `404` | El beneficio no existe. | | `422` | El código no tiene un formato válido. | # Canjear un beneficio (https://docs.loybox.com.ar/api-reference/beneficios/canjear) Canjea el beneficio usando el código que tiene el cliente. Es el último paso del flujo: a partir de acá el código queda quemado y no se puede volver a usar. Llamá a este endpoint recién cuando la venta esté cerrada y el descuento aplicado. Si lo llamás antes y la venta se cae, el cliente pierde el premio y no hay forma de devolvérselo por API. Para ver qué premio es sin quemarlo, usá [consultar un código](https://docs.loybox.com.ar/api-reference/beneficios/consultar-codigo). ## Cuerpo [#cuerpo] El código de canje que tiene el cliente. ## Ejemplo [#ejemplo] ```bash curl -X POST https://loybox-public-api-752998171300.southamerica-west1.run.app/v1/benefits/redeem \ -H "Authorization: Bearer $LOYBOX_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "client_benefit_code": 887766 }' ``` ```json // 200 OK { "message": "Benefit redeemed successfully" } ``` ## Errores [#errores] | Código | Cuándo | | ------ | ---------------------------------- | | `400` | El beneficio ya fue usado. | | `404` | El beneficio no existe. | | `422` | Falta el campo, o no es un entero. | Es lo que pasa cuando alguien intenta usar el mismo código dos veces. No es un error de tu integración: conviene mostrarle al cajero un mensaje claro de "este código ya se usó" en lugar de un error genérico. # Autenticación (https://docs.loybox.com.ar/api-reference/autenticacion) Login del **usuario final** con un código de un solo uso enviado por email. Es la sección que habilita integrar Loybox directamente en el frontend de tu web, sin pasar por tu servidor. No hay contraseñas: el usuario pone su email, recibe un código de 6 dígitos y con eso queda logueado. ## El flujo [#el-flujo] ### Pedir el código [#pedir-el-código] [`POST /v1/auth/otp/request`](https://docs.loybox.com.ar/api-reference/autenticacion/pedir-codigo) con el email del usuario. Le llega un código de 6 dígitos. El endpoint responde `200` siempre, incluso si ese email no tiene cuenta. ### Verificarlo [#verificarlo] [`POST /v1/auth/otp/verify`](https://docs.loybox.com.ar/api-reference/autenticacion/verificar-codigo) con el email y el código. Devuelve un token de acceso (`access`) y uno de refresco (`refresh`). Si el email no tenía cuenta en Loybox, se crea; en ambos casos el usuario queda adherido al programa de tu comercio. ### Usar la sesión [#usar-la-sesión] A partir de ahí, las llamadas a [Mi cuenta](https://docs.loybox.com.ar/api-reference/mi-cuenta) van con el header `Authorization: Bearer {access}`. ### Renovarla [#renovarla] Cuando el `access` vence, [`POST /v1/auth/refresh`](https://docs.loybox.com.ar/api-reference/autenticacion/renovar-token) devuelve uno nuevo a partir del `refresh`, sin pedirle otro código al usuario. ## Reglas del código [#reglas-del-código] * Vence a los **10 minutos**. * Admite **5 intentos**. * Pedir un código nuevo **invalida el anterior**. ## El header X-Commerce-Id [#el-header-x-commerce-id] Todos los endpoints de esta sección y de [Mi cuenta](https://docs.loybox.com.ar/api-reference/mi-cuenta) requieren el header `X-Commerce-Id` con el id de tu comercio: ``` X-Commerce-Id: {tu-commerce-id} ``` Ese header es el que limita la respuesta a tu programa: el usuario nunca ve datos de otros comercios. La **API key** del comercio es secreta y va únicamente en tu servidor. El **token de acceso del usuario** es el que puede vivir en el browser. No mandes nunca la API key desde el frontend. Ver [Credenciales](https://docs.loybox.com.ar/api-reference/credenciales). ## Los endpoints [#los-endpoints] # Pedir un código (https://docs.loybox.com.ar/api-reference/autenticacion/pedir-codigo) Envía por email un código de 6 dígitos para que el usuario final inicie sesión. Si el email no tiene cuenta en Loybox, la cuenta se crea al [verificar el código](https://docs.loybox.com.ar/api-reference/autenticacion/verificar-codigo), no acá. Responde `200` incluso si el email no existe. Es **a propósito**: si respondiera distinto, cualquiera podría usar este endpoint para averiguar qué emails están registrados. En la UI esto significa que después de pedir el código mostrás siempre el mismo mensaje ("te mandamos un código a tu email") sin poder saber si la cuenta existía. ## Headers [#headers] Id del comercio que integra la API. Todas las respuestas quedan limitadas a este comercio. No lleva `Authorization`: es el endpoint con el que arranca la sesión. ## Cuerpo [#cuerpo] Email del usuario. Tiene que tener formato de email válido. ## Ejemplo [#ejemplo] ```bash curl -X POST https://loybox-public-api-752998171300.southamerica-west1.run.app/v1/auth/otp/request \ -H "X-Commerce-Id: 87" \ -H "Content-Type: application/json" \ -d '{ "email": "ana@example.com" }' ``` ```json // 200 OK { "message": "Código enviado" } ``` ## Reglas del código [#reglas-del-código] * Vence a los **10 minutos**. * Admite **5 intentos**. * Pedir un código nuevo **invalida el anterior**. ## Errores [#errores] | Código | Cuándo | | ------ | -------------------------------------------------------- | | `422` | Falta el header `X-Commerce-Id`, o el email es inválido. | # Verificar el código (https://docs.loybox.com.ar/api-reference/autenticacion/verificar-codigo) Valida el código enviado por email y devuelve los tokens de sesión del usuario final. Si el email no tenía cuenta, **la crea**. En ambos casos deja al usuario adherido al programa del comercio indicado en `X-Commerce-Id`. El `access` que devuelve es el que se usa como `Authorization: Bearer {access}` en todos los endpoints de [Mi cuenta](https://docs.loybox.com.ar/api-reference/mi-cuenta). ## Headers [#headers] Id del comercio que integra la API. Todas las respuestas quedan limitadas a este comercio. ## Cuerpo [#cuerpo] El mismo email con el que se [pidió el código](https://docs.loybox.com.ar/api-reference/autenticacion/pedir-codigo). Código de 6 dígitos recibido por email. Exactamente 6 caracteres. ## Respuesta [#respuesta] Un objeto [Sesión](https://docs.loybox.com.ar/api-reference/objetos#sesión). ```bash curl -X POST https://loybox-public-api-752998171300.southamerica-west1.run.app/v1/auth/otp/verify \ -H "X-Commerce-Id: 87" \ -H "Content-Type: application/json" \ -d '{ "email": "ana@example.com", "otp": "418302" }' ``` ```json // 200 OK { "access": "eyJhbGciOiJIUzI1NiIs...", "refresh": "eyJhbGciOiJIUzI1NiIs...", "expires_in": 3600, "user_id": 4821, "username": "Ana Pérez", "email": "ana@example.com", "phone": null } ``` Guardá los dos tokens. El `access` vence a los `expires_in` segundos; el `refresh` es el que después sirve para [renovarlo](https://docs.loybox.com.ar/api-reference/autenticacion/renovar-token) sin volver a pedirle un código al usuario. No hace falta llamar a [adherirme al programa](https://docs.loybox.com.ar/api-reference/mi-cuenta/adherirme) después de esto: el usuario ya queda adherido. Ese endpoint es para volver a adherirse después de una baja. ## Errores [#errores] | Código | Cuándo | | ------ | --------------------------------------------------------- | | `400` | El código es inválido o venció. | | `422` | Falta el header `X-Commerce-Id`, o el cuerpo es inválido. | Después de 5 intentos fallidos el código deja de servir y hay que [pedir uno nuevo](https://docs.loybox.com.ar/api-reference/autenticacion/pedir-codigo). # Renovar el token (https://docs.loybox.com.ar/api-reference/autenticacion/renovar-token) Devuelve un nuevo token de acceso a partir del token de refresco obtenido al [verificar el código](https://docs.loybox.com.ar/api-reference/autenticacion/verificar-codigo), sin necesidad de pedirle al usuario un código nuevo. Es lo que hace que la sesión se sienta continua: cuando una llamada a [Mi cuenta](https://docs.loybox.com.ar/api-reference/mi-cuenta) devuelve `401`, renovás y reintentás. ## Headers [#headers] Id del comercio que integra la API. Todas las respuestas quedan limitadas a este comercio. ## Cuerpo [#cuerpo] El token de refresco que devolvió [verificar el código](https://docs.loybox.com.ar/api-reference/autenticacion/verificar-codigo). ## Respuesta [#respuesta] El token de acceso nuevo. Segundos de validez del token nuevo. ```bash curl -X POST https://loybox-public-api-752998171300.southamerica-west1.run.app/v1/auth/refresh \ -H "X-Commerce-Id: 87" \ -H "Content-Type: application/json" \ -d '{ "refresh": "eyJhbGciOiJIUzI1NiIs..." }' ``` ```json // 200 OK { "access": "eyJhbGciOiJIUzI1NiIs...", "expires_in": 3600 } ``` La respuesta trae sólo el `access`. El `refresh` que ya tenías sigue siendo el válido: guardalo y seguí usándolo. ## Errores [#errores] | Código | Cuándo | | ------ | ------------------------------------------------------------ | | `401` | El token de refresco es inválido o venció. | | `422` | Falta el header `X-Commerce-Id`, o falta el campo `refresh`. | Un `401` acá quiere decir que la sesión terminó de verdad: hay que volver a [pedir un código](https://docs.loybox.com.ar/api-reference/autenticacion/pedir-codigo). # Mi cuenta (https://docs.loybox.com.ar/api-reference/mi-cuenta) Endpoints del **usuario final**, autenticados con el token de acceso que devuelve [verificar el código](https://docs.loybox.com.ar/api-reference/autenticacion/verificar-codigo): ``` Authorization: Bearer {access} X-Commerce-Id: {tu-commerce-id} ``` Todo lo que devuelven está limitado al comercio del header `X-Commerce-Id`: puntos, beneficios, historial y nivel son los de ese programa y nada más. Un mismo usuario puede estar en varios programas de Loybox y cada uno ve sólo el suyo. ## El circuito típico [#el-circuito-típico] Así se arma una web de fidelidad con estos endpoints: ### El primer render [#el-primer-render] [`GET /v1/me`](https://docs.loybox.com.ar/api-reference/mi-cuenta/obtener) trae de una los puntos, la marca del comercio y los puntos por vencer. Con una sola llamada pintás el header y el saldo. ### El catálogo [#el-catálogo] [`GET /v1/me/benefits/available`](https://docs.loybox.com.ar/api-reference/mi-cuenta/beneficios-disponibles) para mostrar qué puede canjear. ### El canje [#el-canje] [`POST /v1/me/benefits/exchange`](https://docs.loybox.com.ar/api-reference/mi-cuenta/comprar-beneficio) cambia puntos por un beneficio. ### Los códigos [#los-códigos] [`GET /v1/me/benefits`](https://docs.loybox.com.ar/api-reference/mi-cuenta/mis-beneficios) para mostrarle los códigos que tiene para presentar en el comercio. ## Al armar la UI [#al-armar-la-ui] Tres cosas que ahorran vueltas: * El `client_benefit_code` de cada beneficio del usuario es **a la vez el código de cupón**: en una tienda online es lo que el usuario pega en el checkout. * Los beneficios traen `benefit_type`, que distingue los del catálogo (`normal`) de las recompensas especiales (`welcome`, `birthday`, `monthly_top`, `level`), y `color`, el color de marca del comercio. * **Cuánto le falta** al usuario para un beneficio se calcula con el `cost` del beneficio menos los `points` de [`GET /v1/me`](https://docs.loybox.com.ar/api-reference/mi-cuenta/obtener). ## Comprar y canjear no son lo mismo [#comprar-y-canjear-no-son-lo-mismo] | | Comprar | Canjear | | ------------------ | ----------------------------------------------------------------------------- | --------------------------------------------------------------- | | **Qué hace** | Cambia puntos por un beneficio | Usa el beneficio en el comercio | | **Quién lo llama** | El usuario, desde tu web | Tu servidor, en la venta | | **Endpoint** | [`POST /v1/me/benefits/exchange`](https://docs.loybox.com.ar/api-reference/mi-cuenta/comprar-beneficio) | [`POST /v1/benefits/redeem`](https://docs.loybox.com.ar/api-reference/beneficios/canjear) | | **Credencial** | Token del usuario | API key del comercio | ## Los endpoints [#los-endpoints] ## El 401 en toda la sección [#el-401-en-toda-la-sección] Todos estos endpoints devuelven `401` cuando el token de acceso falta, venció o no corresponde a un usuario final. Es el caso normal cuando pasó el tiempo: [renovalo](https://docs.loybox.com.ar/api-reference/autenticacion/renovar-token) y reintentá la llamada. # Mi cuenta (https://docs.loybox.com.ar/api-reference/mi-cuenta/obtener) Todo lo que necesita el frontend en el primer render: los datos del usuario, sus puntos y adhesión en el programa del comercio indicado en `X-Commerce-Id`, los datos de marca del comercio (nombre, logo, color, rubro) y los puntos que están por vencer. Es la llamada con la que arranca la app. No hace falta pedir los datos del comercio aparte: vienen dentro. ## Headers [#headers] Id del comercio que integra la API. Todas las respuestas quedan limitadas a este comercio. ## Respuesta [#respuesta] Un objeto [Mi cuenta](https://docs.loybox.com.ar/api-reference/objetos#mi-cuenta). ```bash curl https://loybox-public-api-752998171300.southamerica-west1.run.app/v1/me \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "X-Commerce-Id: 87" ``` ```json // 200 OK { "username": "Ana Pérez", "email": "ana@example.com", "phone": null, "points": 340, "subscribed": true, "commerce": { "id": 87, "name": "Tienda Central", "logo": "https://cdn.loybox.com.ar/logos/87.png", "color": "#f1a10d", "category_name": "Tienda de comics", "currency": "ARS" }, "points_expiration": { "points": 120, "expiration_date": "2026-09-30T23:59:59Z", "days_left": 37, "months_left": 1, "mode": "accumulated" } } ``` Qué hacer con cada pieza: | Campo | Para qué | | ------------------- | --------------------------------------------------------------------------------------------------------------- | | `points` | El saldo grande de la pantalla. Es con lo que se compara el `cost` de cada beneficio. | | `subscribed` | Si viene en `false`, mostrá el llamado a [adherirse](https://docs.loybox.com.ar/api-reference/mi-cuenta/adherirme) en lugar del catálogo. | | `commerce` | Logo, nombre y color para pintar la marca del programa. | | `points_expiration` | El aviso de "te vencen X puntos en Y días". | `points_expiration` no viene en `null`: viene con `mode: "none"` y `points: 0`. Chequeá el `mode` antes de mostrar el aviso de vencimiento. ## Errores [#errores] | Código | Cuándo | | ------ | --------------------------------------------------------------------- | | `401` | El token de acceso falta, venció o no corresponde a un usuario final. | | `422` | Falta el header `X-Commerce-Id`. | # Beneficios que puedo comprar (https://docs.loybox.com.ar/api-reference/mi-cuenta/beneficios-disponibles) Catálogo de beneficios vigentes del comercio, que el usuario puede comprar con sus puntos. Para saber cuáles le alcanzan, comparar el `cost` de cada beneficio con los `points` de [`GET /v1/me`](https://docs.loybox.com.ar/api-reference/mi-cuenta/obtener). La API no filtra por saldo: devuelve el catálogo y la UI decide qué mostrar como alcanzable y qué como "te faltan N puntos". ## Headers [#headers] Id del comercio que integra la API. Todas las respuestas quedan limitadas a este comercio. ## Respuesta [#respuesta] Un array de [Beneficio](https://docs.loybox.com.ar/api-reference/objetos#beneficio). ```bash curl https://loybox-public-api-752998171300.southamerica-west1.run.app/v1/me/benefits/available \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "X-Commerce-Id: 87" ``` ```json // 200 OK [ { "id": "b_9f2a", "type": "percentage_discount", "description": "20% de descuento en toda la tienda", "cost": 250, "expiration": "2026-12-31T23:59:59Z", "benefit_type": "normal", "color": "#f1a10d", "buy_limit": 0, "prize": { "type": "percentage_discount", "title": "20% off", "description": "Válido en toda la tienda", "value": 20, "product": null, "expiration": "2026-12-31T23:59:59Z", "image": null }, "tiendanube_coupon": null } ] ``` El `id` de cada item es lo que se manda como `benefit_id` a [comprar un beneficio](https://docs.loybox.com.ar/api-reference/mi-cuenta/comprar-beneficio). Para mostrarle el catálogo a un visitante que todavía no inició sesión hay [`GET /v1/public/benefits`](https://docs.loybox.com.ar/api-reference/publico/beneficios), que no necesita token. ## Errores [#errores] | Código | Cuándo | | ------ | --------------------------------------------------------------------- | | `401` | El token de acceso falta, venció o no corresponde a un usuario final. | | `422` | Falta el header `X-Commerce-Id`. | # Comprar un beneficio (https://docs.loybox.com.ar/api-reference/mi-cuenta/comprar-beneficio) Cambia los puntos del usuario por un beneficio del catálogo. Devuelve el beneficio comprado con su `client_benefit_code`, que es el código con el que después se canjea en el comercio. Es la única llamada de [Mi cuenta](https://docs.loybox.com.ar/api-reference/mi-cuenta) que mueve puntos. ## Headers [#headers] Id del comercio que integra la API. Todas las respuestas quedan limitadas a este comercio. Clave para que un reintento no cobre los puntos dos veces. Si la red se corta después de que el servidor procesó la compra, tu reintento puede cobrar los puntos otra vez. Con el `Idempotency-Key`, mandar la misma clave de nuevo no repite la compra. Generá un valor por cada compra que el usuario inicia (un UUID alcanza) y usá el mismo en todos los reintentos de esa compra. ## Cuerpo [#cuerpo] Id del beneficio a comprar, tal como lo devuelve [beneficios que puedo comprar](https://docs.loybox.com.ar/api-reference/mi-cuenta/beneficios-disponibles). ## Respuesta [#respuesta] Un objeto [Beneficio canjeable](https://docs.loybox.com.ar/api-reference/objetos#beneficio-canjeable). ```bash curl -X POST https://loybox-public-api-752998171300.southamerica-west1.run.app/v1/me/benefits/exchange \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "X-Commerce-Id: 87" \ -H "Idempotency-Key: 8f14e45f-ea0f-4d1c-9a1b-2c3d4e5f6a7b" \ -H "Content-Type: application/json" \ -d '{ "benefit_id": "b_9f2a" }' ``` ```json // 200 OK { "client_benefit_code": 887766, "issue_date": "2026-08-24T13:05:00Z", "due_date": "2026-09-23T13:05:00Z", "used": false, "benefit": { "id": "b_9f2a", "type": "percentage_discount", "description": "20% de descuento en toda la tienda", "cost": 250, "expiration": "2026-12-31T23:59:59Z", "benefit_type": "normal", "color": "#f1a10d", "buy_limit": 0, "prize": null, "tiendanube_coupon": null } } ``` El `client_benefit_code` es lo que hay que mostrarle al usuario: es su código de canje y también el código de cupón en una tienda online. Después de comprar, conviene refrescar los `points` con [`GET /v1/me`](https://docs.loybox.com.ar/api-reference/mi-cuenta/obtener). ## Errores [#errores] | Código | Cuándo | | ------ | -------------------------------------------------------------------------------- | | `400` | El beneficio no existe, no está vigente, o al usuario no le alcanzan los puntos. | | `401` | El token de acceso falta, venció o no corresponde a un usuario final. | | `422` | Falta el header `X-Commerce-Id`, o falta el `benefit_id`. | El `400` junta los tres casos, así que conviene prevenirlos en la UI: no ofrezcas comprar un beneficio cuyo `cost` supere los puntos del usuario. # Mis beneficios (https://docs.loybox.com.ar/api-reference/mi-cuenta/mis-beneficios) Beneficios que el usuario ya compró con sus puntos en este comercio y todavía puede canjear. El `client_benefit_code` de cada item es el código que el usuario presenta en el comercio para canjearlo. ## Headers [#headers] Id del comercio que integra la API. Todas las respuestas quedan limitadas a este comercio. ## Respuesta [#respuesta] Un array de [Beneficio canjeable](https://docs.loybox.com.ar/api-reference/objetos#beneficio-canjeable). ```bash curl https://loybox-public-api-752998171300.southamerica-west1.run.app/v1/me/benefits \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "X-Commerce-Id: 87" ``` ```json // 200 OK [ { "client_benefit_code": 887766, "issue_date": "2026-08-24T13:05:00Z", "due_date": "2026-09-23T13:05:00Z", "used": false, "benefit": { "id": "b_9f2a", "type": "percentage_discount", "description": "20% de descuento en toda la tienda", "cost": 250, "expiration": "2026-12-31T23:59:59Z", "benefit_type": "normal", "color": "#f1a10d", "buy_limit": 0, "prize": null, "tiendanube_coupon": null } } ] ``` En una tienda online, el `client_benefit_code` es lo que el usuario pega en el checkout. Conviene mostrarlo grande y con un botón de copiar, y al lado el `due_date` para que sepa hasta cuándo lo puede usar. ## Errores [#errores] | Código | Cuándo | | ------ | --------------------------------------------------------------------- | | `401` | El token de acceso falta, venció o no corresponde a un usuario final. | | `422` | Falta el header `X-Commerce-Id`. | # Mi historial (https://docs.loybox.com.ar/api-reference/mi-cuenta/historial) Movimientos del usuario en el programa del comercio: consumos que sumaron puntos, compras de beneficios, canjes y recompensas especiales. Paginado por cursor: para traer la página siguiente se pasa el `next_cursor` de la respuesta anterior en `?cursor=`. ## Headers [#headers] Id del comercio que integra la API. Todas las respuestas quedan limitadas a este comercio. ## Parámetros [#parámetros] Cursor de la página a traer. Se obtiene del `next_cursor` de la respuesta anterior. Sin especificar, trae la primera página. ## Respuesta [#respuesta] Los movimientos de esta página. Ver [Movimiento](https://docs.loybox.com.ar/api-reference/objetos#movimiento). Se pasa como `?cursor=` para traer la página siguiente. `null` cuando no hay más. El cursor de la página anterior. ## Ejemplo [#ejemplo] ```bash curl https://loybox-public-api-752998171300.southamerica-west1.run.app/v1/me/activity \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "X-Commerce-Id: 87" ``` ```json // 200 OK { "results": [ { "type": "consumption", "date": "2026-08-20T18:42:00Z", "points": 17, "benefit": null, "amount": 1750, "event": null, "additional_note": null }, { "type": "benefit_exchange", "date": "2026-08-24T13:05:00Z", "points": -250, "benefit": { "id": "b_9f2a", "type": "percentage_discount", "description": "20% de descuento en toda la tienda", "cost": 250, "expiration": "2026-12-31T23:59:59Z", "benefit_type": "normal", "color": "#f1a10d", "buy_limit": 0, "prize": null, "tiendanube_coupon": null }, "amount": null, "event": null, "additional_note": null } ], "next_cursor": "eyJkIjoiMjAyNi0wOC0yMCJ9", "previous_cursor": null } ``` ## Los cuatro tipos de movimiento [#los-cuatro-tipos-de-movimiento] | `type` | Qué pasó | Campos que trae | | ----------------------- | --------------------------------------- | ------------------------------ | | `consumption` | Una compra que sumó puntos | `amount`, `points` | | `benefit_exchange` | Compró un beneficio con puntos | `benefit`, `points` (negativo) | | `benefit_usage` | Canjeó un beneficio en el comercio | `benefit` | | `points_special_reward` | Una recompensa automática le dio puntos | `event`, `points` | Como los campos que vienen cargados dependen del `type`, conviene armar la fila del historial con un `switch` sobre `type` y no leer todos los campos siempre. ## Errores [#errores] | Código | Cuándo | | ------ | --------------------------------------------------------------------- | | `401` | El token de acceso falta, venció o no corresponde a un usuario final. | | `422` | Falta el header `X-Commerce-Id`. | # Mi nivel (https://docs.loybox.com.ar/api-reference/mi-cuenta/nivel) Nivel actual del usuario en este comercio, con su multiplicador de puntos, el progreso acumulado y cuál es el próximo nivel. ## Headers [#headers] Id del comercio que integra la API. Todas las respuestas quedan limitadas a este comercio. ## Respuesta [#respuesta] Un objeto [Nivel](https://docs.loybox.com.ar/api-reference/objetos#nivel). ```bash curl https://loybox-public-api-752998171300.southamerica-west1.run.app/v1/me/level \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "X-Commerce-Id: 87" ``` ```json // 200 OK { "name": "Plata", "rank": 2, "points_multiplier": 1.25, "icon_url": "https://cdn.loybox.com.ar/levels/plata.png", "reached_at": "2026-05-11T10:00:00Z", "expiration_date": "2027-05-11T10:00:00Z", "is_expired": false, "next_level": { "name": "Oro", "rank": 3, "threshold_type": "points", "threshold": 5000 }, "total_earned_points": 3120, "total_spent_amount": 312000, "total_consumptions_count": 48 } ``` ## Cómo armar la barra de progreso [#cómo-armar-la-barra-de-progreso] El progreso se calcula contra el acumulado histórico, no contra el saldo. Según el `threshold_type` del próximo nivel: | `threshold_type` | Compararlo con | | ----------------- | --------------------- | | Por puntos | `total_earned_points` | | Por monto gastado | `total_spent_amount` | El nivel se mide sobre el historial completo de la relación, así que gastar puntos baja el saldo pero nunca el nivel. Ver [Cómo suben de nivel](https://docs.loybox.com.ar/niveles/como-suben-de-nivel). ## Errores [#errores] | Código | Cuándo | | ------ | ------------------------------------------------------------------------------------------ | | `401` | El token de acceso falta, venció o no corresponde a un usuario final. | | `404` | El usuario todavía no tiene nivel asignado en este comercio, o el comercio no usa niveles. | | `422` | Falta el header `X-Commerce-Id`. | No lo trates como una falla. Cuando el usuario todavía no tiene nivel, o el comercio no usa niveles, corresponde **esconder la sección de niveles** en la UI, no mostrar un error. # Recompensas del programa (https://docs.loybox.com.ar/api-reference/mi-cuenta/recompensas) Recompensas que el comercio entrega solas cuando pasa algo: la de bienvenida al adherirse, la de cumpleaños, la de cliente del mes. Cada una indica si da un beneficio o puntos. Sirve para mostrarle al usuario qué gana **además** de canjear puntos. ## Headers [#headers] Id del comercio que integra la API. Todas las respuestas quedan limitadas a este comercio. ## Respuesta [#respuesta] Un array de [Recompensa automática](https://docs.loybox.com.ar/api-reference/objetos#recompensa-automática). ```bash curl https://loybox-public-api-752998171300.southamerica-west1.run.app/v1/me/rewards \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "X-Commerce-Id: 87" ``` ```json // 200 OK [ { "event": "welcome", "reward_type": "benefit", "benefit": { "id": "b_4c81", "type": "free_product", "description": "Café de regalo", "cost": 0, "expiration": null, "benefit_type": "welcome", "color": "#f1a10d", "buy_limit": 1, "prize": null, "tiendanube_coupon": null }, "points": null }, { "event": "birthday", "reward_type": "points", "benefit": null, "points": 200 } ] ``` ## Los tres eventos [#los-tres-eventos] | `event` | Cuándo se entrega | | ------------- | ----------------------------------- | | `welcome` | Al adherirse al programa | | `birthday` | En el cumpleaños del cliente | | `monthly_top` | Al cliente que más compró en el mes | El `reward_type` dice dónde mirar: si es `benefit`, el premio está en `benefit`; si es `points`, está en `points`. El otro campo viene en `null`. Devuelve las recompensas **configuradas** por el comercio, no las que el usuario ya recibió. Para eso está [mi historial](https://docs.loybox.com.ar/api-reference/mi-cuenta/historial), donde las recompensas de puntos aparecen como movimientos de tipo `points_special_reward`. ## Errores [#errores] | Código | Cuándo | | ------ | --------------------------------------------------------------------- | | `401` | El token de acceso falta, venció o no corresponde a un usuario final. | | `404` | El comercio no existe. | | `422` | Falta el header `X-Commerce-Id`. | # Adherirme al programa (https://docs.loybox.com.ar/api-reference/mi-cuenta/adherirme) Adhiere al usuario al programa de fidelidad del comercio. Si el comercio configuró una recompensa de bienvenida, se devuelve en `welcome_benefit` o `welcome_points`. [Verificar un código](https://docs.loybox.com.ar/api-reference/autenticacion/verificar-codigo) ya deja al usuario adherido, así que este endpoint sirve **sobre todo para volver a adherirse después de una baja**. ## Headers [#headers] Id del comercio que integra la API. Todas las respuestas quedan limitadas a este comercio. No lleva cuerpo. ## Respuesta [#respuesta] Resultado de la operación. Beneficio de bienvenida, si el comercio configuró uno y el usuario recién se adhirió. Ver [Beneficio](https://docs.loybox.com.ar/api-reference/objetos#beneficio). Puntos de bienvenida, si el comercio configuró puntos en vez de un beneficio. ```bash curl -X POST https://loybox-public-api-752998171300.southamerica-west1.run.app/v1/me/subscription \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "X-Commerce-Id: 87" ``` ```json // 200 OK { "message": "Subscribed successfully", "welcome_benefit": { "id": "b_4c81", "type": "free_product", "description": "Café de regalo", "cost": 0, "expiration": null, "benefit_type": "welcome", "color": "#f1a10d", "buy_limit": 1, "prize": null, "tiendanube_coupon": null }, "welcome_points": null } ``` Los dos campos de bienvenida son excluyentes: viene uno o el otro, según lo que el comercio haya configurado. Si no configuró nada, vienen los dos en `null`. Es un buen momento para mostrar una pantalla de bienvenida: si vino `welcome_benefit`, el premio; si vino `welcome_points`, los puntos que acaba de ganar. ## Errores [#errores] | Código | Cuándo | | ------ | --------------------------------------------------------------------- | | `401` | El token de acceso falta, venció o no corresponde a un usuario final. | | `404` | El comercio no existe. | | `422` | Falta el header `X-Commerce-Id`. | # Darme de baja (https://docs.loybox.com.ar/api-reference/mi-cuenta/darme-de-baja) Da de baja al usuario del programa del comercio. Los puntos acumulados quedan donde están: si el usuario [vuelve a adherirse](https://docs.loybox.com.ar/api-reference/mi-cuenta/adherirme), siguen estando. Vale la pena decírselo en la pantalla de confirmación: es la diferencia entre una baja y un borrado, y saberlo hace que dar de baja no dé miedo. ## Headers [#headers] Id del comercio que integra la API. Todas las respuestas quedan limitadas a este comercio. No lleva cuerpo. ## Respuesta [#respuesta] `200 OK`. La respuesta no tiene una forma definida: alcanza con mirar el código de estado. ```bash curl -X DELETE https://loybox-public-api-752998171300.southamerica-west1.run.app/v1/me/subscription \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "X-Commerce-Id: 87" ``` Después de la baja, [`GET /v1/me`](https://docs.loybox.com.ar/api-reference/mi-cuenta/obtener) devuelve `subscribed: false`. ## Errores [#errores] | Código | Cuándo | | ------ | --------------------------------------------------------------------- | | `401` | El token de acceso falta, venció o no corresponde a un usuario final. | | `404` | El comercio no existe, o el usuario no estaba adherido. | | `422` | Falta el header `X-Commerce-Id`. | El `404` cubre también el caso de una baja repetida: si el usuario ya no estaba adherido, no hay nada que dar de baja. # Público (https://docs.loybox.com.ar/api-reference/publico) Endpoints que **no requieren ningún token**, sólo el header `X-Commerce-Id`. Sirven para mostrarle tu programa de fidelidad a un visitante que todavía no inició sesión: la marca en el header y el catálogo de premios, para que vea qué gana si se suma. ``` X-Commerce-Id: {tu-commerce-id} ``` ## Los endpoints [#los-endpoints] ## Después del login, no hace falta volver a pedirlos [#después-del-login-no-hace-falta-volver-a-pedirlos] Una vez que el usuario inicia sesión, los mismos datos vienen por los endpoints de [Mi cuenta](https://docs.loybox.com.ar/api-reference/mi-cuenta): | Sin login | Con login | | -------------------------------------------------------------- | ---------------------------------------------------------------------------------- | | [`GET /v1/public/commerce`](https://docs.loybox.com.ar/api-reference/publico/comercio) | Viene dentro de [`GET /v1/me`](https://docs.loybox.com.ar/api-reference/mi-cuenta/obtener) | | [`GET /v1/public/benefits`](https://docs.loybox.com.ar/api-reference/publico/beneficios) | [`GET /v1/me/benefits/available`](https://docs.loybox.com.ar/api-reference/mi-cuenta/beneficios-disponibles) | En la práctica: usá los públicos para la pantalla de bienvenida, y cambiá a los de Mi cuenta en cuanto haya sesión. Va en el frontend sin problema. Lo que hace es delimitar la respuesta a tu comercio, no autorizar el acceso. # Datos del comercio (https://docs.loybox.com.ar/api-reference/publico/comercio) Nombre, logo, color de marca y rubro del comercio, **sin necesidad de token**. Sirve para pintar el header del programa antes de que el usuario inicie sesión. ## Headers [#headers] Id del comercio que integra la API. Todas las respuestas quedan limitadas a este comercio. ## Respuesta [#respuesta] Un objeto [Comercio](https://docs.loybox.com.ar/api-reference/objetos#comercio). ```bash curl https://loybox-public-api-752998171300.southamerica-west1.run.app/v1/public/commerce \ -H "X-Commerce-Id: 87" ``` ```json // 200 OK { "id": 87, "name": "Tienda Central", "logo": "https://cdn.loybox.com.ar/logos/87.png", "color": "#f1a10d", "category_name": "Tienda de comics", "currency": "ARS" } ``` Una vez logueado, los mismos datos vienen dentro de [`GET /v1/me`](https://docs.loybox.com.ar/api-reference/mi-cuenta/obtener) en el campo `commerce`, así que no hace falta volver a pedirlos. ## Errores [#errores] | Código | Cuándo | | ------ | -------------------------------- | | `400` | No se pudo obtener el comercio. | | `422` | Falta el header `X-Commerce-Id`. | # Catálogo de beneficios (https://docs.loybox.com.ar/api-reference/publico/beneficios) Beneficios vigentes del comercio, **sin necesidad de token**. Sirve para mostrarle el programa de fidelidad a un visitante que todavía no inició sesión: es la vidriera de premios que responde "¿qué gano si me sumo?". ## Headers [#headers] Id del comercio que integra la API. Todas las respuestas quedan limitadas a este comercio. ## Respuesta [#respuesta] Un array de [Beneficio](https://docs.loybox.com.ar/api-reference/objetos#beneficio). ```bash curl https://loybox-public-api-752998171300.southamerica-west1.run.app/v1/public/benefits \ -H "X-Commerce-Id: 87" ``` ```json // 200 OK [ { "id": "b_9f2a", "type": "percentage_discount", "description": "20% de descuento en toda la tienda", "cost": 250, "expiration": "2026-12-31T23:59:59Z", "benefit_type": "normal", "color": "#f1a10d", "buy_limit": 0, "prize": { "type": "percentage_discount", "title": "20% off", "description": "Válido en toda la tienda", "value": 20, "product": null, "expiration": "2026-12-31T23:59:59Z", "image": null }, "tiendanube_coupon": null } ] ``` Una vez logueado conviene usar [`GET /v1/me/benefits/available`](https://docs.loybox.com.ar/api-reference/mi-cuenta/beneficios-disponibles), que es el mismo catálogo pero ya filtrado por lo que el comercio habilitó para ese usuario. ## Errores [#errores] | Código | Cuándo | | ------ | --------------------------------------------------- | | `400` | No se pudieron obtener los beneficios del comercio. | | `422` | Falta el header `X-Commerce-Id`. |