> ## 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 uma tarifa em uma transação (API)

> Configure um pacote de tarifas uma vez e deixe o Midaz adicionar a tarifa a cada transação que corresponde a ele, pela API do Midaz.

Cobre uma tarifa automaticamente nas transações que correspondem a um pacote de tarifas.

## Participantes

***

* **Sua instituição.** O seu sistema. Ele configura o pacote de tarifas e lança as transações.
* **Midaz.** O ledger. Ele seleciona o pacote, adiciona a tarifa e lança a transação.

## Antes de começar

***

* A conta que recebe a tarifa existe no ledger. A tarifa indica essa conta em `creditAccount`.

## Diagrama

***

![Cobrar uma tarifa em uma transação](https://mintcdn.com/lerian-49cb71fc/WuRfbo_y9uSbzyyX/images/pt/d2/id-midaz-charge-a-fee.svg?fit=max\&auto=format\&n=WuRfbo_y9uSbzyyX\&q=85\&s=a84a6bb1e576c83f6764e82042009034)

## Passo a passo pela API

***

| # | Origem | Destino | Mensagem | API da Lerian | O que acontece |
| - | - | - | - | - | - |
| 1 | Sua instituição | Midaz | Chamada de API | [`POST /v2/organizations/{organization_id}/ledgers/{ledger_id}/packages`](https://docs.lerian.studio/pt/reference/products/midaz/v2/create-package) | Crie o pacote de tarifas com seu `feeGroupLabel`, seu `minimumAmount`, seu `maximumAmount`, seu `enable` e suas `fees`. Cada tarifa tem um `creditAccount`, a conta que a recebe. |
| 2 | Sua instituição | Midaz | Chamada de API | [`POST /v2/transactions/direct`](https://docs.lerian.studio/pt/reference/products/midaz/v2/create-transaction-direct) | Lance a transação. Envie o `routeId` ou os metadados que o pacote espera. Envie o header `X-Idempotency`. |
| 3 | Midaz | Midaz | Etapa interna | | O Midaz seleciona o pacote que corresponde à transação. |
| 4 | Midaz | Midaz | Etapa interna | | O Midaz adiciona as movimentações da tarifa à transação. Cada tarifa vai para o seu `creditAccount`. |
| 5 | Midaz | Midaz | Etapa interna | | O Midaz aplica o pagamento e as movimentações da tarifa juntos. Todos os saldos mudam, ou nenhum deles muda. |
| 6 | Midaz | Sua instituição | Resposta da API | | O Midaz responde `201` com a transação. O metadado `feeApplied` é `"true"`, e `packageAppliedID` indica o pacote. |

## Regras

***

* Uma transação `/v1` e um estorno não cobram tarifa nova.
* Um pacote se aplica quando a transação atende a cada condição que o pacote define, e o valor está na faixa de `minimumAmount` a `maximumAmount`. As condições são `transactionRoute`, `segmentId` e cada par em `metadataSelector`.
* A rota de transação é o `routeId` da transação. O segmento é aquele que as contas de origem compartilham.
* Quando vários pacotes se aplicam, vence o pacote com mais condições. O Midaz aplica no máximo um pacote a uma transação.
* Com `isDeductibleFrom` em `false`, as origens pagam a tarifa além do valor. Com `true`, os destinos recebem o valor menos a tarifa.
* Quando cada conta de origem está em `waivedAccounts`, o Midaz não cobra tarifa.
* Para ver a tarifa de um pacote antes de lançar, use [Estimar o cálculo da tarifa](https://docs.lerian.studio/pt/reference/products/midaz/v2/estimate-fee-calculation.md).

## Como saber que terminou

***

Os metadados da transação mostram `feeApplied` como `"true"` e `packageAppliedID` com o `id` do pacote. Cada operação de tarifa mostra o metadado `feeLeg` como `"true"`.

## O que pode dar errado

***

| Situação | O que você vê | O que fazer |
| - | - | - |
| Dois pacotes correspondem com o mesmo número de condições | `400` com `0198` | Mude as condições de um dos pacotes. O erro indica quais são. |
| O pagador não pode pagar o valor e a tarifa | `422` com `0018` | O Midaz não moveu nada. Adicione fundos. |
| Nenhuma tarifa aparece na transação | `201` sem `feeApplied` como `"true"` | Compare as condições do pacote com o `routeId`, os metadados e o valor da transação. |
| A resposta não chega | Nenhuma resposta, ou um timeout | Não suponha que a transação falhou. Dentro do tempo do header `X-TTL` (300 segundos por padrão), envie a mesma requisição com a mesma chave `X-Idempotency`. Um `201` com `X-Idempotency-Replayed: true` devolve a primeira transação. Um `409` com `0084` significa que o Midaz ainda não tem o resultado guardado da primeira requisição: envie-a de novo mais tarde com a mesma chave. Depois desse tempo, leia as [operações da conta de origem](https://docs.lerian.studio/pt/reference/products/midaz/v2/get-all-operations-by-account.md) antes de enviar a transação de novo. |

## Relacionados

***

* [Montar um ledger e lançar a primeira transação](https://docs.lerian.studio/pt/diagrams/lerian-products/midaz-create-and-transact.md)
* [Liquidar a dívida de tarifa](https://docs.lerian.studio/pt/diagrams/lerian-products/midaz-settle-fee-debt.md)
* [Lista de erros do Midaz](https://docs.lerian.studio/pt/reference/products/midaz/error-list.md)


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