---
title: "Retomar la confirmación del último pago con el botón (roles owner/admin)"
method: POST
path: "/pagos/payphone/retomar"
tags: ["pagos"]
---

# Retomar la confirmación del último pago con el botón (roles owner/admin)

`POST /pagos/payphone/retomar`

## Request

- Base URL: `https://contadeo.com/api`
- URL: `https://contadeo.com/api/pagos/payphone/retomar`
- Auth: HTTP bearer

Para cuando la página de resultado vuelve de Payphone SIN `id` ni `clientTransactionId` en la URL y no tiene con qué llamar a `/pagos/payphone/confirmar`. Toma el intento del botón más reciente de la empresa de la sesión (últimos 20 minutos), le pregunta a Payphone su `transactionId` con `GET /api/Sale/client/{clientTransactionId}` y, si la transacción existe y está cerrada, sigue el mismo camino de `/pagos/payphone/confirmar`, con el eco del `clientTransactionId` y la comprobación del monto. Idempotente: un intento ya resuelto devuelve su resultado. El cuerpo solo lleva los NOMBRES de los parámetros con los que volvió la página, que se guardan en la transacción para diagnosticar la vuelta; nunca sus valores.

## Request body

- object
  - `clavesUrl` string[]: Nombres de los parámetros de la URL de vuelta, sin valores
  - `mensajePayphone` string: Texto del parámetro `msg` con el que Payphone devuelve un intento que no cobró. Se guarda sin caracteres de control y recortado a 200 caracteres.

## Response `201`

Resultado de la confirmación, o por qué no la hay

- object
  - `estado` 'aprobado' | 'rechazado' | 'expirado' | 'pendiente' | 'sin_pago' | 'ninguno': `sin_pago`: Payphone no tiene ninguna transacción del último intento, así que no hubo cobro. `ninguno`: la empresa no tiene un intento del botón en los últimos 20 minutos.
  - `plan` string
  - `planExpiraAt` string, date, nullable
  - `ciclo` 'mensual' | 'anual'
  - `renovacionAutomatica` boolean: Lo que se pidió en el checkout
  - `tarjetaGuardada` boolean: La tarjeta quedó guardada y la renovación automática, activa
  - `complementos` string[]: Complementos que pagó este cobro
  - `tipo` 'alta' | 'renovacion' | 'mejora' | 'complemento', nullable: Qué se cobró; null en los pagos anteriores a los complementos.

## Other responses

- `401`: Token/key ausente, inválido o expirado
- `403`: Rol insuficiente o acceso denegado
- `429`: Demasiadas peticiones (300/min global, 60/min emisión)
- `502`: La pasarela no respondió al confirmar; el intento sigue pendiente y se puede reintentar

---

[API](https://skmtc.dev/contadeo/apis/api-de-contadeo.md) · [All operations](https://skmtc.dev/contadeo/apis/api-de-contadeo/llms.txt) · [OpenAPI document](https://skmtc.dev/contadeo/apis/api-de-contadeo/revisions/461bbb9a74ce?raw)
