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ón | Código status | ¿Se puede anular? |
|---|---|---|
| Recibida hoy, aún no liquidada | EXECUTED | Sí |
| Ya liquidada en la cuenta bancaria | COMPLETED | No — ya se procesó el depósito |
| Ya fue anulada anteriormente | REVERSED | No aplica — ya está anulada |
| Fallida | FAILED | No aplica — no hay fondos que revertir |
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.
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ódigo | Significado |
|---|---|
YP-0013 | Error interno al procesar la reversa. Reintenta o escala a soporte. |
YP-0014 | La transacción ya fue liquidada — no se puede anular. |
YP-0015 | La transacción está en estado fallido. Escala a soporte si ocurre con frecuencia. |
YP-0016 | La transacción ya estaba anulada — no se requiere acción adicional. |
YP-0008 | Faltan headers obligatorios. |