---
updatedAt: 2026-10-08T22:06:01.000Z
agentTools:
  projectIndex: https://docs.ventipay.com/llms.txt
---

# Reglas y errores

Las reglas del producto y los códigos de error que puede devolver la API.

# Reglas y errores

## Reglas del producto

Estas reglas se aplican siempre en el servidor y no son configurables:

* **Una cuenta nunca puede pagar su propio estado de cuenta.** El checkout de cobro solo acepta medios de pago externos.
* **El libro mayor es inmutable.** Los movimientos no se editan ni se eliminan; las correcciones son movimientos nuevos (`reversal`, `adjustment`) que referencian al original (`reverses_entry_id`).
* **Las compras con cuenta no generan abonos a tu balance.** El dinero real entra solo con la cobranza.
* **Una cuenta por cliente y programa.** Para darle más de una cuenta a un cliente, crea más de un programa.
* **La moneda de la cuenta es la del programa** y no puede cambiarse.
* **Cerrar una cuenta requiere saldo cero** (sin deuda ni reservas vigentes). Congelarla no tiene requisitos.
* **El cupo no puede bajar de la exposición vigente** (deuda más reservas) ni superar el `max_credit_limit` del programa.
* **Los checkouts de estado de cuenta no son reembolsables.**
* **Cada pago con cuenta exige verificación**: un código de 6 dígitos al email del titular, con expiración y límite de intentos.

## Códigos de error

Errores del tipo `invalid_request_error` que puede devolver la API de Cuentas:

| Código                                           | Cuándo                                                                                                                             |
| ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------- |
| `program_not_found`                              | El `program_id` no existe o no es de tu comercio.                                                                                  |
| `program_not_active`                             | El programa está archivado: no admite cuentas nuevas.                                                                              |
| `program_invalid_credit_limit`                   | `default_credit_limit` mayor que `max_credit_limit`, o un cupo sobre el máximo del programa.                                       |
| `financial_account_not_found`                    | La cuenta no existe o no es de tu comercio.                                                                                        |
| `financial_account_closed`                       | La cuenta está cerrada: no admite cambios.                                                                                         |
| `financial_account_not_closable`                 | Intento de cierre con deuda o reservas vigentes.                                                                                   |
| `financial_account_invalid_credit_limit`         | El nuevo cupo es menor que la exposición vigente de la cuenta.                                                                     |
| `financial_account_not_eligible`                 | La cuenta no puede pagar este checkout (moneda distinta, disponible insuficiente, cuenta congelada o funcionalidad no habilitada). |
| `financial_account_insufficient_funds`           | El disponible no alcanza para el monto del checkout.                                                                               |
| `financial_account_hold_expired`                 | La reserva del pago expiró antes de autorizarse: hay que iniciar el pago de nuevo.                                                 |
| `financial_account_hold_not_pending`             | La reserva ya fue capturada o liberada.                                                                                            |
| `financial_account_invalid_verification_code`    | Código de verificación incorrecto o expirado.                                                                                      |
| `financial_account_verification_throttled`       | Demasiados intentos o reenvíos del código: espera antes de reintentar.                                                             |
| `financial_account_repayment_checkout_forbidden` | Intento de pagar un checkout de cobro con una cuenta, o de reembolsarlo.                                                           |
| `customer_id_or_email_required`                  | Falta `customer_id` o `customer_email` al crear la cuenta.                                                                         |

Los errores siguen el formato estándar de la API:

```json
{
  "error": {
    "type": "invalid_request_error",
    "code": "financial_account_insufficient_funds",
    "message": "El disponible de la cuenta no alcanza para el monto."
  }
}
```

## Límites actuales

* Las cuentas son de **crédito** y de circuito cerrado: gastables solo en el comercio emisor.
* No se generan intereses ni cargos por atraso automáticos.
* Pago dividido (cuenta + otro medio en el mismo checkout): no soportado.