Cinco endpoints REST para consultar, reservar, cobrar y reversar el saldo de una gift card desde tu POS. Todas las respuestas son JSON y los montos son pesos enteros (MXN).
Endpoints
GET/api/public/pos/v1/giftcards/{referencia}
Al escanear el QR: devuelve marca, saldo disponible, estado y vigencia. Sin datos personales. La referencia es el código de la gift card o el token del QR.
Respuesta
{
"merchant": { "id": "...", "name": "Cantina Rosales" },
"usable": true,
"status": "active",
"currency": "MXN",
"initial_amount": 1000,
"balance": 650,
"held": 0,
"available": 650,
"expires_at": "2027-03-01T00:00:00Z"
}POST/api/public/pos/v1/giftcards/{referencia}/authorize
En el checkout del POS: reserva un monto y devuelve un authorization_id que expira en minutos.
Cuerpo
{
"amount": 350,
"pos_reference": "ticket-4821",
"ttl_minutes": 15
}Respuesta
{
"authorization": { "id": "...", "amount": 350, "expires_at": "...", "status": "pending" },
"remaining_available": 300
}POST/api/public/pos/v1/giftcards/{referencia}/redeem
Confirma el consumo. Idempotente por idempotency_key: reintentar la misma llave nunca descuenta doble. Puede capturar una autorización previa o descontar directo.
Cuerpo
{
"amount": 350,
"authorization_id": "opcional",
"pos_reference": "ticket-4821",
"idempotency_key": "ticket-4821-cierre"
}Respuesta
{
"transaction_id": "...",
"replayed": false,
"status": "active",
"balance": 300,
"available": 300
}POST/api/public/pos/v1/giftcards/{referencia}/void
Reversa una redención (cancelación de ticket o devolución). El saldo regresa a la gift card.
Cuerpo
{
"transaction_id": "...",
"idempotency_key": "ticket-4821-cancelacion"
}Respuesta
{ "ok": true, "balance": 650 }POST/api/public/pos/v1/authorizations/{id}/cancel
Libera una autorización que no se va a cobrar.
Respuesta
{ "ok": true }