API de Reembolsos y Anulaciones

Esta funcionalidad te permite solicitar la cancelación o el reembolso de transacciones autorizadas o cobradas. Puedes crear la solicitud utilizando los métodos de reembolso (Refund) o de cancelación (Void) de acuerdo con el estado de la transacción.

Para integrarte con el API de Reembolsos y Anulaciones, apunta tus peticiones a las siguientes URLs de acuerdo con tu ambiente.

Si necesitas entender los conceptos y leer más consideraciones sobre Reembolsos y Anulaciones, consulta este artículo.

Consideraciones por país

Antes de utilizar el API de Reembolsos y Anulaciones, ten en cuenta las siguientes consideraciones.

Argentina

  • El tiempo máximo para enviar una anulación es 14 días. Si no se envía una anulación o una captura luego de este tiempo, la transacción se anula automáticamente.
  • El tiempo mínimo para enviar un reembolso es 10 minutos luego de la aprobación y el máximo es 357 días.
  • No se soportan reembolsos con decimales.
  • Cuando se aprueba el reembolso, el pagador obtiene su dinero en máximo 30 días hábiles.

Brasil

  • El tiempo máximo para enviar una anulación es siete (7) días. Si no se envía una anulación o una captura luego de este tiempo, la transacción se cancela.
  • El tiempo mínimo para enviar un reembolso es 10 minutos luego de la aprobación y el máximo es:
    • 87 días para transacciones con PIX o procesadas en Redecard.
    • 172 días para transacciones con tarjeta.
    • Solo se permite un reembolso por transacción cuando se usa PIX.
  • Cuando se aprueba un reembolso por transacciones con PIX, el pagador recibe el dinero de inmediato. De lo contrario, lo recuperan en un máximo de 15 días hábiles.

Chile

  • Debido a restricciones de la red, se pueden autorizar anulaciones dentro de las tres primeras horas luego de la autorización. Si no se acepta la anulación o no se envía una captura luego de siete (7) días, la transacción se anula automáticamente.
  • El tiempo mínimo para enviar un reembolso es 10 minutos luego de la aprobación y el máximo es 327 días. Si la transacción fue procesada con KLAP, el tiempo máximo es 172 días.
  • No se soportan reembolsos para transacciones procesadas con WebPay Plus.
  • Para transacciones con tarjetas prepago que no sean procesadas a través de WebPay Plus, los Reembolsos solicitados luego de la primero hora del cobro pueden ser aprobados o rechazados por la red financiera. Luego de esta hora, se rechazan todos los reembolsos para transacciones realizadas con tarjetas prepago.
  • Si se rechaza el reembolso, PayU muestra el código de error generado por la red.
  • No se soportan reembolsos con decimales.
  • Cuando se aprueba un reembolso, el pagador obtiene su dinero en 8 a 20 días hábiles.
  • Los reembolsos parciales para transacciones que utilizan cuotas se reciben en línea pero son procesados de forma manual debido a restricciones de la red adquirente.
  • El valor mínimo para enviar un Reembolso es 10 CLP.

Colombia

  • No se soportan Anulaciones (Void).
  • El tiempo mínimo para enviar un reembolso es 10 minutos luego de la aprobación y el máximo es 357 días.
  • El valor mínimo para enviar un Reembolso es 100 COP.
  • Si no se envía el reembolso el mismo día en el que la transacción fue capturada (antes de las 9 pm UTC-5) el reembolso va inmediatamente un proceso manual sin enviar un intento en línea.
  • Cuando se aprueba el reembolso, el pagador obtiene su dinero en máximo 30 días hábiles.
  • No se soportan reembolsos parciales para tarjetas de crédito internacionales.

México

  • El tiempo mínimo para enviar una anulación (Void) es 10 minutos luego de la autorización y el máximo es 30 días. Si la transacción se hizo con American Express, el tiempo máximo es siete (7) días. Si no se envía una anulación o una captura luego de este tiempo, la transacción se anula automáticamente.
  • El tiempo mínimo para enviar un reembolso es 10 minutos luego de la aprobación y el máximo es 175 días. Si la transacción fue procesada por Bancomer, el tiempo máximo es 40 días.
  • Cuando se aprueba un reembolso, el pagador obtiene su dinero en 30 días hábiles.
  • No se soportan reembolsos con decimales.

Panamá

  • No se soportan Anulaciones (Void).
  • El tiempo mínimo para enviar un reembolso es 10 minutos luego de la aprobación y el máximo es 357 días.
  • Cuando se aprueba el reembolso, el pagador obtiene su dinero en máximo 8 días hábiles.

Perú

  • Los días máximos para enviar una autorización son:
    • Visa: 21 días. Si no se envía una anulación o una captura luego de este tiempo, la transacción se captura automáticamente.
    • Mastercard: 28 días. Si no se envía una anulación o una captura luego de este tiempo, la transacción se captura automáticamente.
    • American Express: 30 días. Si no se envía una anulación o una captura luego de este tiempo, la transacción se anula automáticamente.
    • Diners: 11 días. Si no se envía una anulación o una captura luego de este tiempo, la transacción se anula automáticamente.
  • El tiempo mínimo para enviar un reembolso es 10 minutos luego de la aprobación y el máximo es 357 días.
  • Se soportan reembolsos parciales para transacciones sin cuotas. Ten en cuenta que las transacciones en una cuota son consideradas como sin cuotas.
  • Los Reembolsos parciales con visanet deben enviarse un día después.
  • Cuando se aprueba un reembolso, el pagador obtiene su dinero en 15 to 25 días hábiles.
  • La cantidad mínima para enviar un Reembolso es 1 USD o 1 PEN.

Anulación (Void)

Le método VOID cancela una transacción previamente autorizada. La anulación es un procedimiento automático, tan pronto envías la petición de VOID, no sigue ningún flujo de aprobación y la transacción no se cobra al tarjetahabiente.

Variables para la petición y la respuesta

Petición (Request)
Nombre del campo Formato Tamaño Descripción Obligatorio
language Alfanumérico 2 Idioma utilizado en la petición, este idioma se utiliza para mostrar los mensajes de error generados. Ver idiomas soportados.
command Alfanumérico Max:32 Asigna SUBMIT_TRANSACTION.
test (JSON)
isTest (XML)
Booleano Asigna true si la petición es en modo pruebas. Si no, asigna false.
merchant Este objeto tiene los datos de autenticación.
merchant > apiLogin Alfanumérico Min:12 Max:32 Usuario o login entregado por PayU. Cómo obtengo mi API Login
merchant > apiKey Alfanumérico Min:6 Max:32 Contraseña entregada por PayU. Cómo obtengo mi API Key
transaction Este objeto tiene los datos de la transacción.
transaction > order Este objeto tiene los datos de la orden.
transaction > order > id Numérico Identificador de la orden a ser anulada.
transaction > type Alfanumérico 32 Asigna VOID para realizar una anulación de una transacción autorizada.
transaction > reason Alfanumérico Entrega la razón para anular una transacción autorizada. No
transaction > parentTransactionId Alfanumérico 36 Identificador de la transacción a anular.
Respuesta (Response)
Nombre del campo Formato Tamaño Descripción
code Alfanumérico Código de respuesta de la transacción. Los valores posibles son ERROR y SUCCESS.
error Alfanumérico Max:2048 Mensaje de error asociado cuando el código de respuesta es ERROR.
transactionResponse Datos de la respuesta.
transactionResponse > orderId Numérico Identificador de la orden generado o existente en PayU.
transactionResponse > transactionId Alfanumérico 36 Identificador de la transacción en PayU.
transactionResponse > state Alfanumérico Max:32 Estado de la transacción.
transactionResponse > paymentNetworkResponseCode Alfanumérico Max:255 Código de respuesta retornado por la red bancaria.
transactionResponse > paymentNetworkResponseErrorMessage Alfanumérico Max:255 Mensaje de error retornado por la red bancaria.
transactionResponse > trazabilityCode Alfanumérico Max:32 Código de trazabilidad retornado por la red bancaria.
transactionResponse > authorizationCode Alfanumérico Max:12 Código de autorización retornado por la red bancaria.
transactionResponse > responseCode Alfanumérico Max:64 Código de respuesta asociado al estado.
transactionResponse > responseMessage Alfanumérico Max:2048 Mensaje asociado al código de respuesta.
transactionResponse > operationDate Fecha Fecha de creación en el sistema de PayU.

Llamado del API

Los siguientes son los cuerpos de la petición y la respuesta para este tipo de transacción.


Ejemplo petición:

{
   "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 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 petición:

<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 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 (Refunds)

Un reembolso se solicita cuando una tienda decide voluntariamente regresar el dinero al cliente debido a razones de insatisfacción o cuando la tienda no tiene suficiente inventario del producto comprado. El método REFUND solicita el reverso de una transacción previamente capturada.

Los reembolsos pueden ser solicitados por la cantidad total o parcial (PARTIAL REFUND).

Variables para la petición y la respuesta

Petición (Request)
Nombre del campo Formato Tamaño Descripción Obligatorio
language Alfanumérico 2 Idioma utilizado en la petición, este idioma se utiliza para mostrar los mensajes de error generados. Ver idiomas soportados.
command Alfanumérico Max:32 Asigna SUBMIT_TRANSACTION.
test (JSON)
isTest (XML)
Booleano Asigna true si la petición es en modo pruebas. Si no, asigna false.
merchant Este objeto tiene los datos de autenticación.
merchant > apiLogin Alfanumérico Min:12 Max:32 Usuario o login entregado por PayU. Cómo obtengo mi API Login
merchant > apiKey Alfanumérico Min:6 Max:32 Contraseña entregada por PayU. Cómo obtengo mi API Key
transaction Este objeto tiene los datos de la transacción.
transaction > additionalValues > 64 Monto del reembolso parcial. Este parámetro y sus valores son obligatorios cuando se realiza un reembolso parcial. No
transaction > additionalValues > TX_VALUE Alfanumérico 64 Monto de la transacción. Obligatorio para reembolsos parciales No
transaction > additionalValues > TX_VALUE > value Numérico 19 Especifica el monto de la transacción. Obligatorio para reembolsos parciales No
transaction > additionalValues > TX_VALUE > currency Alfanumérico 3 Código ISO de la moneda. Ver monedas aceptadas. Obligatorio para reembolsos parciales No
transaction > order Este objeto tiene los datos de la orden.
transaction > order > id Numérico Identificador de la orden que será reembolsada.
transaction > type Alfanumérico 32 Asigna este valor de acuerdo con el tipo de transacción requerido:
  • REFUND
  • PARTIAL_REFUND para reembolsos parciales (si se soportan).
transaction > reason Alfanumérico Entrega la razón para reembolsar una transacción autorizada. No
transaction > parentTransactionId Alfanumérico 36 Identificador de la transacción a reembolsar.
Respuesta (Response)
Nombre del campo Formato Tamaño Descripción
code Alfanumérico Código de respuesta de la transacción. Los valores posibles son ERROR y SUCCESS.
error Alfanumérico Max:2048 Mensaje de error asociado cuando el código de respuesta es ERROR.
transactionResponse Datos de la respuesta.
transactionResponse > orderId Numérico Identificador de la orden generado o existente en PayU.
transactionResponse > transactionId Alfanumérico 36 Identificador de la transacción en PayU.
transactionResponse > state Alfanumérico Max:32 Estado de la transacción.
transactionResponse > paymentNetworkResponseCode Alfanumérico Max:255 Código de respuesta retornado por la red bancaria.
transactionResponse > paymentNetworkResponseErrorMessage Alfanumérico Max:255 Mensaje de error retornado por la red bancaria.
transactionResponse > trazabilityCode Alfanumérico Max:32 Código de trazabilidad retornado por la red bancaria.
transactionResponse > authorizationCode Alfanumérico Max:12 Código de autorización retornado por la red bancaria.
transactionResponse > responseCode Alfanumérico Max:64 Código de respuesta asociado al estado.
transactionResponse > responseMessage Alfanumérico Max:2048 Mensaje asociado al código de respuesta.
transactionResponse > operationDate Fecha Fecha de creación en el sistema de PayU.

Llamado del API

Los siguientes son los cuerpos de la petición y la respuesta para este tipo de transacción.


Ejemplo petición (Refund):

{
   "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 petición (Partial Refund):

{  
   "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 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 petición (Refund):

<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 petición (Partial refund):

<request>
   <language>es</language>
   <command>SUBMIT_TRANSACTION</command>
   <merchant>
      <apiKey>4Vj8eK4rloUd272L48hsrarnUA</apiKey>
      <apiLogin>pRRXKOl8ikMmt9u</apiLogin>
   </merchant>
   <transaction>
      <additionalValues>
         <entry>
            <string>TX_VALUE</string>
            <additionalValue>
               <value>100</value>
               <currency>ARS</currency>
            </additionalValue>
         </entry>
      </additionalValues>
      <order>
         <id>1400462691</id>
      </order>
      <type>REFUND</type>
      <reason>Razón para solicitar el reembolso de la transacción.</reason>
      <parentTransactionId>976d0411-8d0f-46e7-b5fe-515dad9a41ee</parentTransactionId>
   </transaction>
   <isTest>false</isTest>
</request>

Ejemplo 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 los estados de los Reembolsos

Como mencionamos anteriormente, la solicitud de reembolso tarda entre 1 y 3 días en ser procesada y aprobada o rechazada. Si deseas saber el estado de un reembolso, tienes dos opciones:

Verificar el estado en el Módulo PayU

  1. Ingresa a tu cuenta PayU. En el panel izquierdo, expande el menú Transacciones y selecciona la opción Reporte de ventas.

PrintScreen

  1. Utiliza el campo Filtrar mis ventas para encontrar la orden utilizando su ID y el ID de la transacción.

PrintScreen

  1. La columna estado muestra si el reembolso a sido aprobado o rechazado; si no ha sido aprobado, esta columna muestra que se ha solicitado un reembolso.

PrintScreen

Verificar el estado utilizando consultas

Puedes consultar el estado de un reembolso utilizando el API de consultas. En la petición de la consulta, necesitas enviar el id de la orden.

Cuando consultas una orden, el sistema retorna su última transacción.

Hay tres posibles estados en la respuesta de tu solicitud:

  • Solicitud no resuelta: si la solicitud no ha sido resuelta, la orden que aparece en la consulta está en estado CAPTURED (parámetro result.payload.status en la respuesta), el primer tipo de transacción es AUTHORIZATION_AND_CAPTURE (parámetro result.transactions.type en la respuesta) y el primer estado de la transacción es APPROVED (primer parámetro result.transactions.transactionResponse.state en la respuesta).
  • Aprobada: si la solicitud de reembolso ha sido aprobada por un agente de servicio de PayU, la orden que aparece en la consulta está en estado REFUNDED (parámetro result.payload.status en la respuesta), el primer tipo de transacción es REFUND (parámetro result.transactions.type en la respuesta) y el primer estado de la transacción es APPROVED (primer parámetro result.transactions.transactionResponse.state en la respuesta).
  • Declinada: si la solicitud de reembolso ha sido declinada por un agente de servicio de PayU, la orden que aparece en la consulta está en estado CAPTURED (parámetro result.payload.status en la respuesta), el primer tipo de transacción es REFUND (parámetro result.transactions.type en la respuesta) y el primer estado de la transacción es DECLINED (primer parámetro result.transactions.transactionResponse.state en la respuesta).
Última modificación 12 de febrero de 2024: Refunds check (84120c89)