API de Anulaciones y Reembolsos
VOID o REFUND.URLs
Para integrarte con la API de Anulaciones y Reembolsos, dirige tus solicitudes a la URL del entorno correspondiente:
- Pruebas:
https://sandbox.api.payulatam.com/payments-api/4.0/service.cgi - Producción:
https://api.payulatam.com/payments-api/4.0/service.cgi
Para comprender mejor las anulaciones y reembolsos, incluidos los conceptos clave y consideraciones, consulta este documento.
Consideraciones por país
Antes de usar la API de Anulaciones y Reembolsos, ten en cuenta las siguientes consideraciones específicas por país.
Argentina
| Anulaciones | Reembolsos |
|---|---|
|
|
Brasil
| Anulaciones | Reembolsos |
|---|---|
|
|
Chile
| Anulaciones | Reembolsos |
|---|---|
|
|
Colombia
| Anulaciones | Reembolsos |
|---|---|
|
|
México
| Anulaciones | Reembolsos |
|---|---|
|
|
Panamá
| Anulaciones | Reembolsos |
|---|---|
|
|
Perú
| Anulaciones | Reembolsos |
|---|---|
|
|
Anulación
El método VOID cancela una transacción previamente autorizada. Este es un proceso automático—tan pronto como se envía la solicitud VOID, no sigue un flujo de aprobación y la integración no hará cobro por la transacción al titular de la tarjeta.
Parámetros para la solicitud y respuesta
Solicitud
| Nombre del campo | Formato | Tamaño | Descripción | Obligatorio |
|---|---|---|---|---|
language |
Alfanumérico | 2 | Idioma utilizado en la solicitud. Esto determina el idioma de los mensajes de error. Ver idiomas compatibles. | Sí |
command |
Alfanumérico | Máx: 32 | Debe establecerse en SUBMIT_TRANSACTION. |
Sí |
test (JSON)isTest (XML) |
Booleano | — | Establece true para modo de prueba; de lo contrario, establece false. |
Sí |
merchant |
Objeto | — | Contiene los datos de autenticación. | Sí |
merchant > apiLogin |
Alfanumérico | Mín: 12, Máx: 32 | Usuario o login proporcionado por PayU. Cómo obtener API Login. | Sí |
merchant > apiKey |
Alfanumérico | Mín: 6, Máx: 32 | Contraseña proporcionada por PayU. Cómo obtener API Key. | Sí |
transaction |
Objeto | — | Contiene los datos de la transacción. | Sí |
transaction > order |
Objeto | — | Contiene los detalles de la orden. | Sí |
transaction > order > id |
Numérico | — | ID de la orden que se va a anular. | Sí |
transaction > type |
Alfanumérico | 32 | Establezca en VOID para cancelar una transacción autorizada. |
Sí |
transaction > reason |
Alfanumérico | — | Motivo de la anulación de la transacción. | No |
transaction > parentTransactionId |
Alfanumérico | 36 | ID de la transacción que se va a anular. | Sí |
Respuesta
| Nombre del campo | Formato | Tamaño | Descripción |
|---|---|---|---|
code |
Alfanumérico | — | Código de respuesta de la transacción. Valores posibles: ERROR, SUCCESS. |
error |
Alfanumérico | Máx: 2048 | Mensaje de error cuando el código de respuesta es ERROR. |
transactionResponse |
Objeto | — | Contiene los detalles de la respuesta. |
transactionResponse > orderId |
Numérico | — | ID de la orden generada o existente en PayU. |
transactionResponse > transactionId |
Alfanumérico | 36 | ID de la transacción en PayU. |
transactionResponse > state |
Alfanumérico | Máx: 32 | Estado de la transacción. |
transactionResponse > paymentNetworkResponseCode |
Alfanumérico | Máx: 255 | Código de respuesta de la red financiera. |
transactionResponse > paymentNetworkResponseErrorMessage |
Alfanumérico | Máx: 255 | Mensaje de error de la red financiera. |
transactionResponse > trazabilityCode |
Alfanumérico | Máx: 32 | Código de trazabilidad de la red financiera. |
transactionResponse > authorizationCode |
Alfanumérico | Máx: 12 | Código de autorización de la red financiera. |
transactionResponse > responseCode |
Alfanumérico | Máx: 64 | Código de respuesta relacionado con el estado de la transacción. |
transactionResponse > responseMessage |
Alfanumérico | Máx: 2048 | Mensaje relacionado con el código de respuesta. |
transactionResponse > operationDate |
Fecha | — | Fecha en la que se generó la respuesta en el sistema de PayU. |
Llamada a la API
Los siguientes ejemplos muestran los cuerpos de solicitud y respuesta para este tipo de transacción.
Ejemplo de una solicitud:
{
"language": "es",
"command": "SUBMIT_TRANSACTION",
"merchant": {
"apiKey": "4Vj8eK4rloUd272L48hsrarnUA",
"apiLogin": "pRRXKOl8ikMmt9u"
},
"transaction": {
"order": {
"id": "1400462414"
},
"type": "VOID",
"reason": "Razón para solicitar la anulación de la transacción",
"parentTransactionId": "c8ec8737-7645-4756-a991-6e60a99eb4d9"
},
"test": false
}
Ejemplo de una respuesta:
{
"code": "SUCCESS",
"error": null,
"transactionResponse": {
"orderId": 1400462414,
"transactionId": "57546e0a-8275-48e3-af11-7d3dc7420bfe",
"state": "APPROVED",
"paymentNetworkResponseCode": "0",
"paymentNetworkResponseErrorMessage": null,
"trazabilityCode": "49263990",
"authorizationCode": "NPS-011111",
"pendingReason": null,
"responseCode": "APPROVED",
"errorCode": null,
"responseMessage": "APROBADA - Autorizada",
"transactionDate": null,
"transactionTime": null,
"operationDate": 1624880273010,
"referenceQuestionnaire": null,
"extraParameters": null,
"additionalInfo": null
}
}
Ejemplo de una solicitud:
<request>
<language>es</language>
<command>SUBMIT_TRANSACTION</command>
<merchant>
<apiKey>4Vj8eK4rloUd272L48hsrarnUA</apiKey>
<apiLogin>pRRXKOl8ikMmt9u</apiLogin>
</merchant>
<transaction>
<order>
<id>1400462466</id>
</order>
<type>VOID</type>
<parentTransactionId>50876ad6-46f2-4c8d-bb91-2f028b56ccb8</parentTransactionId>
</transaction>
<isTest>false</isTest>
</request>
Ejemplo de una respuesta:
<paymentResponse>
<code>SUCCESS</code>
<transactionResponse>
<orderId>1400462466</orderId>
<transactionId>5fbb1ab0-3d2e-448f-a0be-b0bcfb5501ae</transactionId>
<state>APPROVED</state>
<paymentNetworkResponseCode>0</paymentNetworkResponseCode>
<trazabilityCode>49263990</trazabilityCode>
<authorizationCode>NPS-011111</authorizationCode>
<responseCode>APPROVED</responseCode>
<responseMessage>APROBADA - Autorizada</responseMessage>
<operationDate>2021-06-28T06:57:44</operationDate>
</transactionResponse>
</paymentResponse>
Reembolsos
Un reembolso se emite cuando un comerciante devuelve voluntariamente el pago al comprador. Esto puede ocurrir debido a insatisfacción del cliente o cuando el producto está agotado. El método REFUND revierte una transacción previamente capturada.
Los reembolsos pueden emitirse por el monto total o como un reembolso parcial (PARTIAL_REFUND).
Capacidades de reembolso por método de pago y país
Las siguientes tablas resumen el comportamiento de los reembolsos observado para los diferentes métodos de pago en Latinoamérica. Cada sección muestra si un método de pago admite reembolsos totales, parciales y múltiples reembolsos parciales, incluyendo el número máximo de reembolsos parciales identificados durante las pruebas.
Argentina
| Método de pago | Soporta reembolsos totales | Soporta reembolsos parciales | Soporta múltiples reembolsos parciales | Máximo de reembolsos parciales | Notas |
|---|---|---|---|---|---|
| AMEX | ✅ Sí | ✅ Sí | ✅ Sí | 7 | Las tarjetas AMEX nacionales e internacionales (crédito) admiten múltiples reembolsos parciales; AMEX débito admite solo un reembolso parcial. |
| ARGENCARD | ✅ Sí | ✅ Sí | ✅ Sí | 2 | Admite hasta 2 reembolsos parciales (transacciones nacionales). |
| CABAL | ✅ Sí | ✅ Sí | ✅ Sí | 3 | Admite múltiples reembolsos parciales, tanto para débito como crédito. |
| MASTERCARD | ✅ Sí | ✅ Sí | ✅ Sí | 14 | Admite múltiples reembolsos parciales en débito y crédito; las tarjetas prepago solo admiten un reembolso parcial. |
| MASTERCARD_PREPAID | ✅ Sí | ✅ Sí | ❌ No | 1 | Solo admite un reembolso parcial. |
| NARANJA | ✅ Sí | ✅ Sí | ✅ Sí | 3 | Admite múltiples reembolsos parciales para débito y crédito. |
| VISA | ✅ Sí | ✅ Sí | ✅ Sí | 22 | Permite múltiples reembolsos parciales para débito, crédito y prepago. |
| VISA_PREPAID | ✅ Sí | ✅ Sí | ❌ No | 1 | Solo admite un reembolso parcial. |
Brasil
| Método de pago | Soporta reembolsos totales | Soporta reembolsos parciales | Soporta múltiples reembolsos parciales | Máximo de reembolsos parciales | Notas |
|---|---|---|---|---|---|
| AMEX | ✅ Sí | ✅ Sí | ✅ Sí | 3 | Admite reembolsos parciales y múltiples reembolsos parciales para transacciones con crédito. |
| ELO | ✅ Sí | ✅ Sí | ✅ Sí | 5 | Admite múltiples reembolsos parciales para transacciones con crédito y débito. |
| HIPERCARD | ✅ Sí | ✅ Sí | ✅ Sí | 2 | Las transacciones con débito permiten hasta 2 reembolsos parciales. |
| MASTERCARD | ✅ Sí | ✅ Sí | ✅ Sí | 5 | Admite múltiples reembolsos parciales (transacciones nacionales). |
| PIX | ✅ Sí | ✅ Sí | ✅ Sí | 7 | Admite múltiples reembolsos parciales. |
| VISA | ✅ Sí | ✅ Sí | ✅ Sí | 11 | Admite múltiples reembolsos parciales de forma consistente en todos los tipos de tarjeta (crédito y débito). |
Chile
| Método de pago | Soporta reembolsos totales | Soporta reembolsos parciales | Soporta múltiples reembolsos parciales | Máximo de reembolsos parciales | Notas |
|---|---|---|---|---|---|
| AMEX | ✅ Sí | ✅ Sí | ✅ Sí | 5 | Soporte para transacciones nacionales e internacionales con crédito. |
| MASTERCARD | ✅ Sí | ✅ Sí | ✅ Sí | 10 | Soporte total para múltiples reembolsos parciales en todos los tipos de tarjeta. |
| MASTERCARD_PREPAID | ✅ Sí | ✅ Sí | ✅ Sí | 2 | Admite múltiples reembolsos parciales en transacciones con débito. |
| VISA | ✅ Sí | ✅ Sí | ✅ Sí | 9 | Admite múltiples reembolsos parciales en todos los tipos de tarjeta; se confirmaron transacciones nacionales e internacionales. |
| VISA_PREPAID | ✅ Sí | ✅ Sí | ✅ Sí | 2 | Admite múltiples reembolsos parciales en transacciones con débito. |
Colombia
| Método de pago | Características |
|---|---|
| AMEX DINERS MASTERCARD MASTERCARD_DEBIT VISA VISA_DEBIT VISA_NFC CODENSA |
✅ Soporta reembolsos totales: Sí ✅ Soporta reembolsos parciales: Sí ❌ Soporta múltiples reembolsos parciales: No Máximo de reembolsos parciales: 1 Nota: Solo se admite un reembolso parcial para todos los métodos de pago. |
México
| Método de pago | Soporta reembolsos totales | Soporta reembolsos parciales | Soporta múltiples reembolsos parciales | Máximo de reembolsos parciales | Notas |
|---|---|---|---|---|---|
| AMEX | ✅ Sí | ✅ Sí | ✅ Sí | 7 | AMEX admite múltiples reembolsos parciales tanto para tarjetas de crédito nacionales como internacionales (hasta 7). Las tarjetas de débito solo admiten un reembolso parcial. |
| MASTERCARD | ✅ Sí | ✅ Sí | ✅ Sí | 7 | Admite múltiples reembolsos parciales tanto para crédito como para débito. |
| VISA | ✅ Sí | ✅ Sí | ✅ Sí | 10 | Admite múltiples reembolsos parciales tanto para crédito como para débito. |
Perú
| Método de pago | Soporta reembolsos totales | Soporta reembolsos parciales | Soporta múltiples reembolsos parciales | Máximo de reembolsos parciales | Notas |
|---|---|---|---|---|---|
| AMEX | ✅ Sí | ✅ Sí | ✅ Sí | 8 | Admite múltiples reembolsos parciales. |
| DINERS | ✅ Sí | ✅ Sí | ✅ Sí | 7 | Las transacciones nacionales admiten múltiples reembolsos parciales; las internacionales solo permiten un reembolso parcial. |
| MASTERCARD | ✅ Sí | ✅ Sí | ✅ Sí | 8 | Admite múltiples reembolsos parciales. |
| MASTERCARD_DEBIT | ✅ Sí | ✅ Sí | ✅ Sí | 8 | Admite múltiples reembolsos parciales. |
| VISA | ✅ Sí | ✅ Sí | ✅ Sí | 17 | Admite múltiples reembolsos parciales. |
| VISA_DEBIT | ✅ Sí | ✅ Sí | ✅ Sí | 12 | Admite múltiples reembolsos parciales. |
| YAPE | ✅ Sí | ✅ Sí | ✅ Sí | 2 | Admite múltiples reembolsos parciales. |
Parámetros para la solicitud y respuesta
Solicitud
| Nombre del campo | Formato | Tamaño | Descripción | Obligatorio |
|---|---|---|---|---|
language |
Alfanumérico | 2 | Idioma utilizado en la solicitud. Esto determina el idioma de los mensajes de error. Ver idiomas compatibles. | Sí |
command |
Alfanumérico | Máx: 32 | Debe establecerse en SUBMIT_TRANSACTION. |
Sí |
test (JSON)isTest (XML) |
Booleano | — | Establece true para modo de prueba; de lo contrario, establece false. |
Sí |
merchant |
Objeto | — | Contiene los datos de autenticación. | Sí |
merchant > apiLogin |
Alfanumérico | Mín: 12, Máx: 32 | Usuario o login proporcionado por PayU. Cómo obtener API Login. | Sí |
merchant > apiKey |
Alfanumérico | Mín: 6, Máx: 32 | Contraseña proporcionada por PayU. Cómo obtener API Key. | Sí |
transaction |
Objeto | — | Contiene los datos de la transacción. | Sí |
transaction > additionalValues |
Objeto | — | Especifica el monto para un reembolso parcial. Requerido para reembolsos parciales. | No |
transaction > additionalValues > TX_VALUE |
Objeto | — | Contiene los detalles del monto de la transacción. Requerido para reembolsos parciales. | No |
transaction > additionalValues > TX_VALUE > value |
Numérico | Máx: 19 | Monto a reembolsar. Requerido para reembolsos parciales. | No |
transaction > additionalValues > TX_VALUE > currency |
Alfanumérico | 3 | Código de moneda ISO. Ver monedas aceptadas. Requerido para reembolsos parciales. | No |
transaction > order |
Objeto | — | Contiene los detalles de la orden. | Sí |
transaction > order > id |
Numérico | — | ID de la orden a reembolsar. | Sí |
transaction > type |
Alfanumérico | 32 | Especifica el tipo de reembolso: - REFUND para reembolsos totales.- PARTIAL_REFUND para reembolsos parciales (si es compatible). |
Sí |
transaction > reason |
Alfanumérico | — | Motivo del reembolso. | No |
transaction > parentTransactionId |
Alfanumérico | 36 | ID de la transacción original que se está reembolsando. | Sí |
Respuesta
| Nombre del campo | Formato | Tamaño | Descripción |
|---|---|---|---|
code |
Alfanumérico | — | Código de respuesta de la transacción. Valores posibles: ERROR, SUCCESS. |
error |
Alfanumérico | Máx: 2048 | Mensaje de error cuando el código de respuesta es ERROR. |
transactionResponse |
Objeto | — | Contiene los detalles de la respuesta. |
transactionResponse > orderId |
Numérico | — | ID de la orden generada o existente en PayU. |
transactionResponse > transactionId |
Alfanumérico | 36 | ID de la transacción en PayU. |
transactionResponse > state |
Alfanumérico | Máx: 32 | Estado de la transacción. |
transactionResponse > paymentNetworkResponseCode |
Alfanumérico | Máx: 255 | Código de respuesta de la red financiera. |
transactionResponse > paymentNetworkResponseErrorMessage |
Alfanumérico | Máx: 255 | Mensaje de error de la red financiera. |
transactionResponse > trazabilityCode |
Alfanumérico | Máx: 32 | Código de trazabilidad de la red financiera. |
transactionResponse > authorizationCode |
Alfanumérico | Máx: 12 | Código de autorización de la red financiera. |
transactionResponse > responseCode |
Alfanumérico | Máx: 64 | Código de respuesta asociado con el estado de la transacción. |
transactionResponse > responseMessage |
Alfanumérico | Máx: 2048 | Mensaje asociado con el código de respuesta. |
transactionResponse > operationDate |
Fecha | — | Fecha en la que se generó la respuesta en el sistema de PayU. |
Llamada a la API
Los siguientes ejemplos muestran los cuerpos de solicitud y respuesta para este tipo de transacción.
Ejemplo de una solicitud de reembolso:
{
"language": "es",
"command": "SUBMIT_TRANSACTION",
"merchant": {
"apiKey": "4Vj8eK4rloUd272L48hsrarnUA",
"apiLogin": "pRRXKOl8ikMmt9u"
},
"transaction": {
"order": {
"id": "1400462687"
},
"type": "REFUND",
"reason": "Razón para solicitar el reembolso de la transacción",
"parentTransactionId": "60e2080d-08b1-4db2-a54f-8bcbe8271662"
},
"test": false
}
Ejemplo de una solicitud de reembolso parcial:
{
"command":"SUBMIT_TRANSACTION",
"language":"es",
"merchant":{
"apiKey": "4Vj8eK4rloUd272L48hsrarnUA",
"apiLogin": "pRRXKOl8ikMmt9u"
},
"transaction":{
"additionalValues":{
"TX_VALUE":{
"value":"950",
"currency":"ARS"
}
},
"order":{
"id":"1400462690"
},
"parentTransactionId":"0486359b-a048-4b6b-9b72-af584e710e64",
"reason":"Razón para solicitar el reembolso de la transacción",
"type":"PARTIAL_REFUND"
}
}
Ejemplo de una respuesta:
{
"code": "SUCCESS",
"error": null,
"transactionResponse": {
"orderId": 1400462690,
"transactionId": null,
"state": "PENDING",
"paymentNetworkResponseCode": null,
"paymentNetworkResponseErrorMessage": null,
"trazabilityCode": null,
"authorizationCode": null,
"pendingReason": "PENDING_REVIEW",
"responseCode": null,
"errorCode": null,
"responseMessage": "1400462690",
"transactionDate": null,
"transactionTime": null,
"operationDate": null,
"referenceQuestionnaire": null,
"extraParameters": null,
"additionalInfo": null
}
}
Ejemplo de una solicitud de reembolso:
<request>
<language>es</language>
<command>SUBMIT_TRANSACTION</command>
<merchant>
<apiKey>4Vj8eK4rloUd272L48hsrarnUA</apiKey>
<apiLogin>pRRXKOl8ikMmt9u</apiLogin>
</merchant>
<transaction>
<order>
<id>1400462689</id>
</order>
<type>REFUND</type>
<reason>Razón para solicitar el reembolso de la transacción.</reason>
<parentTransactionId>1d31ea44-0d8f-4e65-93ac-6be4347e5b40</parentTransactionId>
</transaction>
<isTest>false</isTest>
</request>
Ejemplo de una solicitud de reembolso parcial:
<request>
<command>SUBMIT_TRANSACTION</command>
<language>es</language>
<merchant>
<apiKey>4Vj8eK4rloUd272L48hsrarnUA</apiKey>
<apiLogin>pRRXKOl8ikMmt9u</apiLogin>
</merchant>
<transaction>
<additionalValues>
<entry>
<string>TX_VALUE</string>
<additionalValue>
<value>950</value>
<currency>ARS</currency>
</additionalValue>
</entry>
</additionalValues>
<order>
<id>1400462690</id>
</order>
<parentTransactionId>0486359b-a048-4b6b-9b72-af584e710e64</parentTransactionId>
<reason>Reason for requesting the refund of the transaction</reason>
<type>PARTIAL_REFUND</type>
</transaction>
</request>
Ejemplo de una respuesta:
<paymentResponse>
<code>SUCCESS</code>
<transactionResponse>
<orderId>1400462691</orderId>
<transactionId>6cef020a-8006-4744-b7f9-d9a343807297</transactionId>
<state>PENDING</state>
<pendingReason>PENDING_REVIEW</pendingReason>
<responseMessage>1400462690</responseMessage>
</transactionResponse>
</paymentResponse>
Consultar el estado del reembolso
Como se mencionó anteriormente, las solicitudes de reembolso pasan por un proceso de aprobación en el que PayU tarda entre 1 y 3 días en procesarlas y aprobarlas o rechazarlas. Puedes verificar el estado de un reembolso utilizando uno de los siguientes métodos:
Consultar el estado a través del Panel de Administración de PayU
-
Inicia sesión en tu cuenta del módulo de PayU. En el panel izquierdo, expande el menú Transacciones y selecciona Reporte de Ventas.

-
Usa el campo Filtrar mis ventas para buscar la orden utilizando el ID de la orden o el ID de la transacción.

-
La columna Estado indica si el reembolso ha sido aprobado, rechazado o si está pendiente.

Consultar el estado a través de la API de Consultas
También puedes verificar el estado del reembolso utilizando la API de Consultas. Para hacerlo, envía una solicitud que contenga el ID de la orden. Al consultar una orden, el sistema devuelve la última transacción asociada con ella.
La respuesta puede indicar uno de los tres posibles estados:
-
Solicitud No Resuelta: Si la solicitud de reembolso aún está en revisión, la orden aparece con el estado
CAPTURED(result.payload.statusen la respuesta).- Habrá una transacción de tipo
AUTHORIZATION_AND_CAPTURE(result.transactions.typeen la respuesta), el estado de la transacción seráAPPROVED(result.transactions.transactionResponse.stateen la respuesta). - Si el comercio utiliza un flujo de dos pasos, habrá una transacción de tipo
AUTHORIZATIONy otra de tipoCAPTURE, ambas con estadoAPPROVED.
- Habrá una transacción de tipo
-
Aprobado: Si la solicitud de reembolso es aprobada, la orden aparece con el estado
REFUNDED(result.payload.statusen la respuesta).- Habrá una transacción de tipo
REFUND(result.transactions.typeen la respuesta). - El primer estado de la transacción es
APPROVED(result.transactions.transactionResponse.stateen la respuesta).
Nota: Si existen capturas parciales que no cubren el monto total de la orden, el estado de la orden seguirá apareciendo como
CAPTURED. - Habrá una transacción de tipo
-
Rechazado: Si la solicitud de reembolso es rechazada, la orden aparece con el estado
CAPTURED(result.payload.statusen la respuesta).- Habrá una transacción de tipo
REFUND(result.transactions.typeen la respuesta). - El primer estado de la transacción es
DECLINED(result.transactions.transactionResponse.stateen la respuesta).
- Habrá una transacción de tipo
Manejo de reembolsos pendientes con el Módulo de Cancelaciones de PayU
Esta sección te guiará sobre cómo rastrear el estado final de un reembolso iniciado a través del Módulo de Cancelaciones de PayU, especialmente cuando dependes de la API de Consultas para recibir actualizaciones.
Módulo de Cancelaciones manual y actualización de reembolsos pendientes
Cuando solicitas un reembolso mediante la API de Voids and Refunds, PayU envía la solicitud a la red de pagos. Si la red rechaza el reembolso, PayU inicialmente devuelve el estado PENDING en el campo paymentResponse.transactionResponse.state.
En este escenario, PayU activa automáticamente el Módulo de Cancelaciones para volver a intentar el reembolso. Este proceso puede implicar múltiples intentos, cada uno generando un nuevo ID de reembolso, hasta alcanzar un estado final. Este mecanismo mejora las tasas de éxito de los reembolsos y reduce la necesidad de que los comercios realicen múltiples intentos manuales.
Para confirmar si la solicitud de reembolso enviada mediante el API de Voids and Refunds alcanzó un estado final (APPROVED o DECLINED), debes:
- Consultar su estado utilizando el API de Consultas (por ID de orden), o
- Esperar una notificación a través del webhook configurado (
notifyUrlpara integraciones por API o la Página de Confirmación para WebCheckout).
Notas
- Si no deseas que PayU gestione tus reembolsos mediante el Módulo de Cancelaciones, contacta a tu gerente de cuenta para desactivar este servicio. En ese caso, siempre recibirás la respuesta directa de la red sin reintentos de PayU.
- En muchos países, hasta el 99% de los reembolsos procesados a través del Módulo de Cancelaciones son aprobados. Para reembolsos parciales, la tasa de aprobación puede alcanzar el 97%.
Identificación del estado final del reembolso en la API de Consultas
Para diferenciar entre tu solicitud de reembolso inicial y los intentos generados por el Módulo de Cancelaciones de PayU, utiliza el ID de Orden o el Código de Referencia en la API de Consultas y revisa los siguientes campos:
result > payload > status– Estado general de la orden (REFUNDEDsi se reembolsó el monto total;CAPTUREDpuede indicar reembolsos parciales).result > payload > transactions[] > id– ID de la transacción de reembolso.result > payload > transactions[] > type– Tipo de transacción (REFUNDoPARTIAL_REFUND).result > payload > transactions[] > source– Fuente (EMPTY= reembolsos en línea,CANCELLATIONS_MODULE= reintentos a través del Módulo de Cancelaciones de PayU).result > payload > transactions[] > transactionResponse > state– Estado del reembolso (PENDING,APPROVED,DECLINED).result > payload > transactions[] > transactionResponse > operationDate– Fecha y hora en que se generó el reembolso.result > payload > transactions[] > additionalValues > TX_VALUE > value– Monto del reembolso.result > payload > transactions[] > extraParameters > MANUAL_REFUND– Indica cómo se procesó el reembolso (ausente,TRUEoFALSE).
Reglas para actualizar el estado del reembolso
Sigue estas reglas al actualizar tu sistema:
MANUAL_REFUND |
Estado del reembolso | Significado | Acción recomendada |
|---|---|---|---|
| Ausente | PENDING |
Reembolso inicial en proceso | No actualizar |
| Ausente | DECLINED |
Solicitud inicial rechazada; Módulo de Cancelaciones activado | No actualizar |
FALSE |
APPROVED |
Reembolso procesado automáticamente por el Módulo de Cancelaciones | Actualizar estado |
FALSE |
DECLINED |
Intento de reembolso fallido a través del Módulo de Cancelaciones | No actualizar |
TRUE |
APPROVED o DECLINED |
Reembolso finalizado a través del Módulo de Cancelaciones | Actualizar estado |
Consideraciones adicionales
- Si el estado final es
DECLINEDdespués de la operación del Módulo de Cancelaciones, puedes enviar una nueva solicitud de reembolso a través de la Refunds API. Al hacerlo, evita actualizar basándote en intentos de transacción previos: usa los camposoperationDateyTX_VALUEpara rastrear el intento de reembolso correcto. - Registra un solo registro de reembolso por solicitud API en tu sistema, incluso si el Módulo de Cancelaciones creó múltiples transacciones.
- Actualiza tu registro de reembolso solo cuando se alcance un estado final, siguiendo las reglas anteriores.
Identificación del estado final del reembolso mediante webhook
PayU también te notifica el estado final del reembolso a través del webhook configurado (notifyUrl para integraciones API o Página de Confirmación para WebCheckout).
Lógica del webhook
- Si el estado de la solicitud de reembolso es
APPROVEDoDECLINED, PayU envía inmediatamente una notificación por webhook. - Si el estado del reembolso es inicialmente
PENDING, no se envía ningún webhook hasta que se alcance un estado final (APPROVEDoDECLINED).
Reglas de actualización del webhook
- Si el estado inicial es
PENDING, no actualices el reembolso hasta recibir el webhook. - Una vez que llegue el webhook, actualiza el estado del reembolso según corresponda (
APPROVEDoDECLINED). - Usa al menos los siguientes campos del payload para identificar correctamente el reembolso:
transaction_type– Tipo de transacciónvalue– Monto del reembolsoresponse_message_pol– Mensaje de respuestatransaction_date– Fecha y hora de la transacción
Consideraciones del webhook
A diferencia de la Queries API, el webhook solo notifica cuando el reembolso alcanza un estado final. No se envían notificaciones para intentos intermedios (PENDING) o reintentos dentro del Módulo de Cancelaciones.
Por esta razón, recomendamos implementar el webhook si aún no lo has hecho. Esto te permite actualizar los estados de los reembolsos de forma automática, sin aplicar las reglas de validación manual requeridas para el Queries API.
Este comportamiento aplica cuando se activan las siguientes configuraciones de cuenta:
- Permitir transacciones de reversa con estado pendiente: Desactivado
- Activar respuesta pendiente para anulaciones y reembolsos: Activado