PUT /transaction/{id}

Anula una transacción que el cliente ya pagó, devolviendo el dinero a la cuenta del cliente, siempre y cuando la transacción todavía no se haya liquidado en tu cuenta bancaria.

Este endpoint funciona para transacciones de cualquier tipo de punto de cobro: Botón de Pago, Yappy en Caja, Punto de cobro, Directorio, etc.

Request

PUT {{BASE_URL}}/transaction/{id}
api-key: {tu-api-key}
secret-key: {tu-clave-secreta}
authorization: {token-jwt}

Ejemplo:

PUT {{BASE_URL}}/transaction/EFJRF-09327009

No requiere body, el ID de la transacción a anular va únicamente en el path.

¿Cuándo se puede anular?

La anulación solo es posible mientras la transacción no se haya liquidado en la cuenta bancaria del comercio.

Estado de la transacciónCódigo status¿Se puede anular?
Recibida hoy, aún no liquidadaEXECUTEDSí
Ya liquidada en la cuenta bancariaCOMPLETEDNo — ya se procesó el depósito
Ya fue anulada anteriormenteREVERSEDNo aplica — ya está anulada
FallidaFAILEDNo aplica — no hay fondos que revertir
EXECUTED ≠ COMPLETED — distinción crítica

La documentación interna de Yappy describe este endpoint como “para anular una transacción completada” — refiriéndose coloquialmente a que el cliente ya pagó. No confundas esto con el código de estado COMPLETED, que en la API significa exactamente lo contrario: que la transacción ya fue liquidada y por tanto ya no se puede anular. El estado sobre el que debes operar es EXECUTED.

¿Cómo lucen EXECUTED y COMPLETED en la plataforma web de Yappy Comercial?

En la plataforma web de Yappy Comercial el estado EXECUTED es En tránsito y el estado COMPLETED es Procesada.

Respuestas posibles

Anulación exitosa:

{
  "status": {
    "code": "YP-0000",
    "description": "Se ha realizado la ejecución del servicio correctamente"
  }
}

Transacción ya anulada previamente (YP-0016):

{
  "status": {
    "code": "YP-0016",
    "description": "La transaccion que se intenta reversar posee un estado reversado. No se requieren acciones adicionales."
  }
}

Transacción ya liquidada — no se puede anular (YP-0014):

{
  "status": {
    "code": "YP-0014",
    "description": "Error, la reversa no puede ser procesada porque ya se liquido."
  }
}

Transacción en estado fallido (YP-0015):

{
  "status": {
    "code": "YP-0015",
    "description": "La transaccion que se intenta reversar posee un estado fallido. No se requieren acciones adicionales."
  }
}

Flujo recomendado antes de anular

Para evitar intentar anular una transacción en el estado equivocado, consulta primero su estado con GET /movement/{id} y verifica que status === "EXECUTED" antes de llamar a este endpoint.

async function anularSiEsPosible(baseUrl, headers, transactionId) {
  // Paso 1: verificar el estado actual
  const detalle = await fetch(`${baseUrl}/movement/${transactionId}`, { headers });
  const { body } = await detalle.json();

  if (body.status !== 'EXECUTED') {
    console.log(`No se puede anular: estado actual es ${body.status}`);
    return false;
  }

  // Paso 2: proceder con la anulación
  const anulacion = await fetch(`${baseUrl}/transaction/${transactionId}`, {
    method: 'PUT',
    headers,
  });
  const resultado = await anulacion.json();
  return resultado.status.code === 'YP-0000';
}

Errores posibles

CódigoSignificado
YP-0013Error interno al procesar la reversa. Reintenta o escala a soporte.
YP-0014La transacción ya fue liquidada — no se puede anular.
YP-0015La transacción está en estado fallido. Escala a soporte si ocurre con frecuencia.
YP-0016La transacción ya estaba anulada — no se requiere acción adicional.
YP-0008Faltan headers obligatorios.
¿Te fue útil esta página?