Recibir la compra
No hay un webhook aparte para n1coCupones. Cuando el comprador paga, llega el mismo
evento SuccessPayment que ya usan las demás integraciones de n1co Business, con el
cupón o la giftcard dentro de orderDetail.
La configuración del endpoint, la llave secreta, la verificación de la firma
HMAC, el objeto
event y el payload completo de
SuccessPayment con su tabla de campos están en
Webhook.
Esta página solo agrega lo que es propio de cupones y giftcards.
Qué guardar
Cada elemento de orderDetail puede traer un objeto coupon. Ese es el cupón o la
giftcard:
"orderDetail": [
{
"name": "2 tazas de café a elegir + pan artesanal",
"price": "4.00",
"quantity": "1",
"coupon": {
"code": "U6FWUW",
"qrCodeUrl": "https://qr.n1co.shop/?chl=U6FWUW",
"startDate": "2026-01-06T18:00:00",
"endDate": "2026-03-31T18:00:00",
"redemptionLimit": "1",
"redemptionCount": "0",
"status": "Unredeemed"
}
}
]
| Campo | Para qué |
|---|---|
coupon.code | El código que el cliente presentará. Es la clave con la que después lo validas. |
coupon.startDate y coupon.endDate | La ventana de vigencia. |
coupon.status | Estado al momento de la compra. Llega como Unredeemed. |
quantity | Cantidad de la línea. |
Una línea sin objeto coupon es un producto normal, no un cupón: ignórala para esta
integración.
Todo número llega entrecomillado: "quantity": "1", no "quantity": 1. Un parser que
espere un tipo numérico fallará.
Giftcards: el monto
Esto solo aplica a las giftcards. Un cupón no aporta un monto a descontar:
ya define por sí mismo qué entregas, así que su price es informativo y no interviene
en el canje.
En una giftcard, en cambio, price es el valor que vas a aplicar a la cuenta
del cliente, y elegir mal el campo significa cobrarle de más.
| Campo | Ejemplo | Por qué | |
|---|---|---|---|
orderDetail[].price | "10.00" | ✅ Usa este | Es el valor de la giftcard: el monto que el comprador eligió. |
OrderTotalDetails.total | "10.25" | ❌ | Incluye la tarifa de servicio de la compra. Es lo que pagó el comprador, no lo que la giftcard vale. Esa tarifa no es saldo gastable. |
OrderTotalDetails.subtotal | "10.00" | ❌ | Es el total de la orden. Coincide cuando se compra una sola giftcard, pero deja de servir cuando la orden trae varias. |
Guarda ese valor junto al código. Al canjear, el cajero nunca debería teclearlo.
Siguiente paso
Con el código ya en tu base, el cliente puede llegar a canjearlo: Canjear el código.