> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lerian.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# Cobrar una comisión en una transacción (API)

> Configura un paquete de comisiones una vez y deja que Midaz agregue la comisión a cada transacción que corresponde, por la API de Midaz.

Cobra una comisión automáticamente en las transacciones que corresponden a un paquete de comisiones.

## Participantes

***

* **Tu institución.** Tu sistema. Configura el paquete de comisiones y registra las transacciones.
* **Midaz.** El ledger. Selecciona el paquete, agrega la comisión y registra la transacción.

## Antes de empezar

***

* La cuenta que recibe la comisión existe en el ledger. La comisión indica esa cuenta en `creditAccount`.

## Diagrama

***

![Cobrar una comisión en una transacción](https://mintcdn.com/lerian-49cb71fc/MbifquGny5fsdtVy/images/es/d2/id-midaz-charge-a-fee.svg?fit=max\&auto=format\&n=MbifquGny5fsdtVy\&q=85\&s=cd73577cba15e606378302adae7bd569)

## Pasos por la API

***

| # | Origen | Destino | Mensaje | API de Lerian | Qué ocurre |
| - | - | - | - | - | - |
| 1 | Tu institución | Midaz | Llamada a la API | [`POST /v2/organizations/{organization_id}/ledgers/{ledger_id}/packages`](https://docs.lerian.studio/es/reference/products/midaz/v2/create-package) | Crea el paquete de comisiones con su `feeGroupLabel`, su `minimumAmount`, su `maximumAmount`, su `enable` y sus `fees`. Cada comisión tiene un `creditAccount`, la cuenta que la recibe. |
| 2 | Tu institución | Midaz | Llamada a la API | [`POST /v2/transactions/direct`](https://docs.lerian.studio/es/reference/products/midaz/v2/create-transaction-direct) | Registra la transacción. Envía el `routeId` o los metadatos que el paquete espera. Envía el header `X-Idempotency`. |
| 3 | Midaz | Midaz | Paso interno | | Midaz selecciona el paquete que corresponde a la transacción. |
| 4 | Midaz | Midaz | Paso interno | | Midaz agrega los movimientos de la comisión a la transacción. Cada comisión va a su `creditAccount`. |
| 5 | Midaz | Midaz | Paso interno | | Midaz aplica el pago y los movimientos de la comisión juntos. Todos los saldos cambian, o ninguno cambia. |
| 6 | Midaz | Tu institución | Respuesta de la API | | Midaz responde `201` con la transacción. El metadato `feeApplied` es `"true"`, y `packageAppliedID` indica el paquete. |

## Reglas

***

* Una transacción `/v1` y una reversión no cobran una comisión nueva.
* Un paquete aplica cuando la transacción cumple cada condición que el paquete define, y el monto está en el rango de `minimumAmount` a `maximumAmount`. Las condiciones son `transactionRoute`, `segmentId` y cada par en `metadataSelector`.
* La ruta de transacción es el `routeId` de la transacción. El segmento es el que comparten las cuentas de origen.
* Cuando varios paquetes aplican, gana el paquete con más condiciones. Midaz aplica como máximo un paquete a una transacción.
* Con `isDeductibleFrom` en `false`, los orígenes pagan la comisión además del monto. Con `true`, los destinos reciben el monto menos la comisión.
* Cuando cada cuenta de origen está en `waivedAccounts`, Midaz no cobra comisión.
* Para ver la comisión de un paquete antes de registrar, usa [Estimar el cálculo de la comisión](https://docs.lerian.studio/es/reference/products/midaz/v2/estimate-fee-calculation.md).

## Cómo saber que terminó

***

Los metadatos de la transacción muestran `feeApplied` como `"true"` y `packageAppliedID` con el `id` del paquete. Cada operación de comisión muestra el metadato `feeLeg` como `"true"`.

## Qué puede salir mal

***

| Situación | Qué ves | Qué hacer |
| - | - | - |
| Dos paquetes corresponden con el mismo número de condiciones | `400` con `0198` | Cambia las condiciones de uno de los paquetes. El error los indica. |
| El pagador no puede pagar el monto y la comisión | `422` con `0018` | Midaz no movió nada. Agrega fondos. |
| No aparece ninguna comisión en la transacción | `201` sin `feeApplied` como `"true"` | Compara las condiciones del paquete con el `routeId`, los metadatos y el monto de la transacción. |
| La respuesta no llega | Ninguna respuesta, o un timeout | No supongas que la transacción falló. Dentro del tiempo del header `X-TTL` (300 segundos por defecto), envía la misma solicitud con la misma clave `X-Idempotency`. Un `201` con `X-Idempotency-Replayed: true` devuelve la primera transacción. Un `409` con `0084` significa que Midaz todavía no tiene el resultado guardado de la primera solicitud: envíala otra vez más tarde con la misma clave. Después de ese tiempo, lee las [operaciones de la cuenta de origen](https://docs.lerian.studio/es/reference/products/midaz/v2/get-all-operations-by-account.md) antes de enviar la transacción otra vez. |

## Relacionados

***

* [Montar un ledger y registrar la primera transacción](https://docs.lerian.studio/es/diagrams/lerian-products/midaz-create-and-transact.md)
* [Liquidar la deuda de comisión](https://docs.lerian.studio/es/diagrams/lerian-products/midaz-settle-fee-debt.md)
* [Lista de errores de Midaz](https://docs.lerian.studio/es/reference/products/midaz/error-list.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.