Ir al contenido

Crear una venta

Envía una venta (SALE) a un POS. El equipo muestra el monto y tu cliente paga con su tarjeta de crédito, débito o prepago.

POST /api/v1/pos-operations
Ambiente URL base API
Integración https://ms-payment-c2c.virtualpos-dev.com/ms-payment-c2c
Producción https://ms-payment-c2c.virtualpos.cl/ms-payment-c2c
Nombre Requerido Descripción
Content-Type Sí application/json
X-Api-Key Sí Tu API key. Ver Autenticación.
Campo Tipo Requerido Descripción
posSerial string Sí Serial del POS que debe cobrar.
operationType string Sí SALE
externalPaymentId string Sí ID de la venta en tu sistema. Debe ser único: ver idempotencia. Se usa como referencia de la venta en el POS.
amount integer Sí Monto en pesos chilenos, sin decimales. Mayor que 0.
tipAmount integer No Propina en pesos, sin decimales. Por defecto 0. Solo se acepta en SALE.
currency string No Solo CLP. Por defecto CLP.
callbackUrl string No URL HTTPS de tu sistema donde recibirás los webhooks de la operación.
Ventana de terminal
curl -X POST 'https://ms-payment-c2c.virtualpos-dev.com/ms-payment-c2c/api/v1/pos-operations' \
-H 'Content-Type: application/json' \
-H "X-Api-Key: $API_KEY" \
-d '{
"posSerial": "VPOS-1A2B3C4D5E",
"operationType": "SALE",
"externalPaymentId": "orden-10234",
"amount": 9900,
"tipAmount": 0,
"currency": "CLP",
"callbackUrl": "https://tu-sistema.cl/webhooks/virtualpos"
}'

La venta se creó y se envió al POS. El resultado del cobro llega después, por webhook o consultando la operación. Guarda el paymentRequestId.

{
"paymentRequestId": "8f1c2d3e-4b5a-4c6d-9e7f-0a1b2c3d4e5f",
"externalPaymentId": "orden-10234",
"posSerial": "VPOS-1A2B3C4D5E",
"amount": 9900,
"tipAmount": 0,
"currency": "CLP",
"operationType": "SALE",
"status": "DISPATCHED",
"jobId": "job-5d6e7f80-1a2b-4c3d-8e9f-0a1b2c3d4e5f",
"attemptId": "orden-10234#attempt-1",
"attemptNumber": 1,
"callbackUrl": "https://tu-sistema.cl/webhooks/virtualpos",
"createdAt": "2026-11-13T16:01:10Z",
"updatedAt": "2026-11-13T16:01:11Z"
}

Ya existía una operación con ese externalPaymentId. La respuesta trae esa operación, con la misma forma que el 201. Ver idempotencia.

Cuando el cliente paga, recibes un webhook con status: "APPROVED" y el detalle de la transacción en resultPayload:

{
"event": "PAYMENT_C2C_UPDATED",
"eventId": "evt-c2c-4b6e60ad-33fa-4c63-952d-91368108795a",
"createdAt": "2026-11-13T16:01:30.492Z",
"paymentRequestId": "8f1c2d3e-4b5a-4c6d-9e7f-0a1b2c3d4e5f",
"externalPaymentId": "orden-10234",
"posSerial": "VPOS-1A2B3C4D5E",
"operationType": "SALE",
"status": "APPROVED",
"jobId": "job-5d6e7f80-1a2b-4c3d-8e9f-0a1b2c3d4e5f",
"attemptId": "orden-10234#attempt-1",
"attemptNumber": 1,
"resultPayload": {
"requestId": "orden-10234",
"operationType": "SALE",
"resultStatus": "approved",
"responseCode": "M2M_200",
"message": "Venta aprobada",
"amountMinor": 9900,
"tipAmountMinor": 0,
"currency": "CLP",
"authCode": "238518",
"authDatetime": "20261113130129",
"posTransactionId": "1b39fb38-8625-400c-8b5e-0f95886a5a08",
"transactionId": "txn-42426451",
"acquirerTransactionId": "acq-61752016",
"terminalId": "VPOS-1A2B3C4D5E",
"tid": "TID 8447735",
"operationalTid": "00288NHGGV",
"cardBrand": "VISA",
"cardTypeId": "CREDIT",
"cardTypeLabel": "Credito",
"cardBin": "411111",
"cardLast4": "1111",
"cardMaskedPan": "411111******1111",
"installmentsPlanType": "NONE",
"installmentsQuantity": 1,
"timestamp": "2026-11-13T16:01:29.726Z"
},
"errorPayload": null
}
Campo Descripción
requestId Tu externalPaymentId.
resultStatus Resultado informado por el POS, por ejemplo approved.
message Mensaje legible del resultado.
amountMinor / tipAmountMinor Monto y propina cobrados, en pesos.
authCode Código de autorización del emisor.
authDatetime Fecha y hora de la autorización, en formato yyyyMMddHHmmss.
posTransactionId ID de la transacción en el POS. Úsalo para reimprimir el voucher.
transactionId / acquirerTransactionId IDs de la transacción en Virtualpos y en el adquirente.
terminalId / tid / operationalTid Identificadores del terminal. operationalTid es el TID impreso en el voucher.
cardBrand Marca de la tarjeta, por ejemplo VISA o MASTERCARD.
cardTypeId / cardTypeLabel Tipo de tarjeta: crédito, débito o prepago.
cardBin / cardLast4 / cardMaskedPan Primeros 6 dígitos, últimos 4 y número enmascarado. Nunca se informa el número completo.
installmentsPlanType / installmentsQuantity Tipo de cuotas y cantidad. NONE y 1 es una venta sin cuotas.

Usa el status de primer nivel para decidir si la venta fue aprobada; los campos de resultPayload son el detalle informado por el POS.