Saltar al contenido principal

Anular y cerrar el día

Dos flujos que también son de a dos: uno los pide tu backend, el otro los confirma el terminal.

Anular un pago

Anular es deshacer un pago que ya se confirmó con la tarjeta. Lo pide tu backend:

curl -X POST https://dev.api.spuntodeventa.com/api/v1/merchants/MERCHANT-001/transactions/ORD-123456/cancellation \
-H "Authorization: Bearer <tu-token>"

Sin cuerpo: la orden ya la identifica la ruta.

El pago no queda anulado todavía: pasa a VOID_PENDING. Igual que el pago, la anulación necesita que el aparato la ejecute contra el banco y la confirme:

POST /api/v1/pos-terminals/98202003219630/transactions/ORD-123456/cancellation/commit
x-pos-signature: <firma>
x-pos-timestamp: 2026-07-29T18:40:00Z

También sin cuerpo — lo cual importa para la firma: se firma cadena vacía.

Con eso el pago llega a VOIDED, que es definitivo.

Anular no es cancelar

Cancelar es descartar un pago que el terminal aún no confirmó: la orden muere en CANCELED y nunca hubo tarjeta. Anular es revertir uno que sí se cobró: PAIDVOID_PENDINGVOIDED. Las dos usan la misma ruta /cancellation; lo que cambia es el estado desde el que sales.

Cerrar el lote

Al final de la jornada el terminal cuadra su caja contra el banco y le cuenta a SPIDI cómo le fue. Lo envía el POS, firmado:

POST /api/v1/pos-terminals/98202003219630/settlements
x-pos-signature: <firma>
x-pos-timestamp: 2026-07-29T23:59:00Z
Content-Type: application/json

{
"batchNumber": "B-10293",
"transactionCount": 12,
"closedAt": "2026-07-29T23:26:51.187Z",
"currencyReference": "USD",
"terminal": "98202003219630",
"debitBatch": "DB-9901"
}

Obligatorios: batchNumber, transactionCount, closedAt y currencyReference.

Leer los cierres desde tu backend

Aquí volvemos al token. Para el cuadre contable, tu ERP pide el último cierre de un terminal:

curl "https://dev.api.spuntodeventa.com/api/v1/merchants/MERCHANT-001/pos-terminals/98202003219630/settlements?sort=-closedAt&size=1" \
-H "Authorization: Bearer <tu-token>"
{
"title": "Último Cierre de Lote",
"data": [
{
"batchNumber": "B-10293",
"transactionCount": 12,
"closedAt": "2026-07-29T23:26:51.187Z",
"currencyReference": "USD",
"terminal": "98202003219630",
"debitBatch": "DB-9901"
}
]
}

El terminal escribe los cierres con su firma; tu backend los lee con el token. Es la misma información vista desde los dos lados del mostrador.

Estados de un pago · Recibir una venta