> ## 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.

# Migrar da API v1 para a API v2

> Atualize as rotas e os contratos da sua integração quando passar do Midaz v3.x.x para o Midaz v4.x.x.

Este guia compara os contratos HTTP do Midaz v3.8.6 e do Midaz v4.x.x. Ele cobre o Ledger, o CRM e o Fees. Ele descreve o Midaz v4.3.0. O texto indica a versão de cada comportamento que começa depois da v4.0.0.

> [!WARNING]
>
> Passe sua integração para os contratos v2 até 29 de abril de 2027. Depois dessa data, a Lerian remove os contratos v1 do Ledger.

> [!NOTE]
>
> Não substitua `/v1` por `/v2` em toda a sua integração. Midaz v3.x.x e Midaz v4.x.x são versões do produto. v1 e v2 são versões do contrato HTTP. O Midaz v4.x.x atende contratos v1 e v2 lado a lado, e algumas rotas v1 não têm rota v2.

## Rotas do Ledger

***

Substitua `{organization_id}`, `{ledger_id}` e os outros identificadores nos paths pelos valores da sua integração.

| Tarefa | API v1 | API v2 | Mudança |
| :- | :- | :- | :- |
| Criar uma transação | `POST /v1/organizations/{organization_id}/ledgers/{ledger_id}/transactions/json` `POST /v1/organizations/{organization_id}/ledgers/{ledger_id}/transactions/inflow` `POST /v1/organizations/{organization_id}/ledgers/{ledger_id}/transactions/outflow` | [`POST /v2/transactions/direct`](https://docs.lerian.studio/pt/reference/products/midaz/v2/create-transaction-direct) [`POST /v2/transactions/hold`](https://docs.lerian.studio/pt/reference/products/midaz/v2/create-transaction-hold) | Mova a organização e o ledger do path para o corpo. Consulte [Organização e ledger no corpo da transação](#organization-and-ledger-in-the-transaction-body). |
| Bloquear e desbloquear | `POST /v1/organizations/{organization_id}/ledgers/{ledger_id}/transactions/block` `POST /v1/organizations/{organization_id}/ledgers/{ledger_id}/transactions/unblock` | [`POST /v2/transactions/block`](https://docs.lerian.studio/pt/reference/products/midaz/v2/create-transaction-block) [`POST /v2/transactions/unblock`](https://docs.lerian.studio/pt/reference/products/midaz/v2/create-transaction-unblock) | Mova a organização e o ledger do path para o corpo. Consulte [Organização e ledger no corpo da transação](#organization-and-ledger-in-the-transaction-body). |
| Ler e atualizar transações | `GET /v1/organizations/{organization_id}/ledgers/{ledger_id}/transactions` `GET` e `PATCH /v1/organizations/{organization_id}/ledgers/{ledger_id}/transactions/{transaction_id}` | [`GET /v2/organizations/{organization_id}/ledgers/{ledger_id}/transactions`](https://docs.lerian.studio/pt/reference/products/midaz/v2/get-all-transactions) `GET` e `PATCH /v2/organizations/{organization_id}/ledgers/{ledger_id}/transactions/{transaction_id}` | Mesmos métodos. Atualize a forma como você lê a resposta. Consulte [Respostas e erros](#responses-and-errors). |
| Confirmar, cancelar e reverter | `POST /v1/organizations/{organization_id}/ledgers/{ledger_id}/transactions/{transaction_id}/commit` `POST /v1/organizations/{organization_id}/ledgers/{ledger_id}/transactions/{transaction_id}/cancel` `POST /v1/organizations/{organization_id}/ledgers/{ledger_id}/transactions/{transaction_id}/revert` | [`POST /v2/organizations/{organization_id}/ledgers/{ledger_id}/transactions/{transaction_id}/commit`](https://docs.lerian.studio/pt/reference/products/midaz/v2/commit-transaction) [`POST /v2/organizations/{organization_id}/ledgers/{ledger_id}/transactions/{transaction_id}/cancel`](https://docs.lerian.studio/pt/reference/products/midaz/v2/cancel-transaction) [`POST /v2/organizations/{organization_id}/ledgers/{ledger_id}/transactions/{transaction_id}/revert`](https://docs.lerian.studio/pt/reference/products/midaz/v2/revert-transaction) | Mesmos métodos. Atualize a forma como você lê a resposta. |
| Atualizar uma operação de uma transação | `PATCH /v1/organizations/{organization_id}/ledgers/{ledger_id}/transactions/{transaction_id}/operations/{operation_id}` | [`PATCH /v2/organizations/{organization_id}/ledgers/{ledger_id}/transactions/{transaction_id}/operations/{operation_id}`](https://docs.lerian.studio/pt/reference/products/midaz/v2/update-operation) | Mude apenas o prefixo. A resposta não muda. |
| Contas | `/v1/organizations/{organization_id}/ledgers/{ledger_id}/accounts` e suas sub-rotas | [`/v2/organizations/{organization_id}/ledgers/{ledger_id}/accounts`](https://docs.lerian.studio/pt/reference/products/midaz/v2/list-accounts) e suas sub-rotas | Revise as regras de titular. Consulte [Contas e regras na API v2](#accounts-and-rules-in-api-v2). |
| Ledgers, saldos e operações | As rotas v1 | As rotas v2 com os mesmos métodos | As respostas de sucesso não mudam. O formato de erro muda. |
| Rotas de transação e rotas de operação | `/v1/organizations/{organization_id}/ledgers/{ledger_id}/transaction-routes` `/v1/organizations/{organization_id}/ledgers/{ledger_id}/operation-routes` | [`/v2/organizations/{organization_id}/ledgers/{ledger_id}/transaction-routes`](https://docs.lerian.studio/pt/reference/products/midaz/v2/list-transaction-routes) [`/v2/organizations/{organization_id}/ledgers/{ledger_id}/operation-routes`](https://docs.lerian.studio/pt/reference/products/midaz/v2/list-operation-routes) | Mesmos métodos. Consulte a referência da API para a resposta v2. |

Organizações, ativos, segmentos, portfólios, tipos de conta, configurações do ledger e índices de metadados também têm rotas v2. Mantenha o método e o escopo de cada rota. Nem todas recebem uma organização e um ledger no path:

* `/v2/organizations` e `/v2/organizations/{organization_id}/ledgers` recebem apenas a organização.
* `/v2/settings/metadata-indexes` não recebe organização nem ledger.
* `/v2/transactions/direct`, `/v2/transactions/hold`, `/v2/transactions/block` e `/v2/transactions/unblock` não recebem organização nem ledger no path.

O Midaz v4.x.x atende todas as rotas v1 do Ledger do Midaz v3.x.x. A referência da API marca todas elas como descontinuadas, e a Lerian as remove depois de 29 de abril de 2027. Até lá, elas mantêm o formato de erro v1.

## Organização e ledger no corpo da transação

***

> [!WARNING]
>
> Quando você passar uma requisição de criação, bloqueio ou desbloqueio para a v2, mova a organização e o ledger do path para o corpo. O path v2 dessas rotas não tem `{organization_id}` nem `{ledger_id}`.

| API v1: o path leva a organização e o ledger | API v2: o path leva apenas a ação | Para onde vão a organização e o ledger |
| :- | :- | :- |
| `POST /v1/organizations/{organization_id}/ledgers/{ledger_id}/transactions/json` `POST /v1/organizations/{organization_id}/ledgers/{ledger_id}/transactions/inflow` `POST /v1/organizations/{organization_id}/ledgers/{ledger_id}/transactions/outflow` | `POST /v2/transactions/direct` `POST /v2/transactions/hold` | `organizationId` e `ledgerId` em cada item de `debits` e `credits` |
| `POST /v1/organizations/{organization_id}/ledgers/{ledger_id}/transactions/block` | `POST /v2/transactions/block` | `organizationId` e `ledgerId` em cada item de `debits` e `credits` |
| `POST /v1/organizations/{organization_id}/ledgers/{ledger_id}/transactions/unblock` | `POST /v2/transactions/unblock` | `organizationId` e `ledgerId` em cada item de `debits` e `credits` |

O corpo v2 não tem `organizationId` nem `ledgerId` no nível superior. Cada item informa a organização e o ledger da sua própria conta:

```text theme={null}
# API v1: the organization and the ledger are in the path
POST /v1/organizations/3fa85f64-5717-4562-b3fc-2c963f66afa6/ledgers/9c858901-8a57-4791-81fe-4a34d4dd8ab5/transactions/json

# API v2: the organization and the ledger are in each item of the body
POST /v2/transactions/direct
```

```json theme={null}
{
  "debits": [
    {
      "alias": "@source",
      "organizationId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "ledgerId": "9c858901-8a57-4791-81fe-4a34d4dd8ab5",
      "amount": "100.00"
    }
  ]
}
```

Este trecho mostra apenas um item. Um corpo completo também tem `asset`, `amount` e `credits`. Consulte o [exemplo de uma transação direta](#example-of-a-direct-transaction).

Siga estas regras:

* Envie `organizationId` e `ledgerId` em cada item. Os dois são obrigatórios, e os dois são UUIDs.
* Todos os itens devem informar a mesma organização e o mesmo ledger.
* A partir da v4.1.0, `direct` e `hold` aceitam itens em ledgers diferentes quando cada ledger habilita `crossLedger.enabled`. Consulte [transações entre Ledgers](https://docs.lerian.studio/pt/products/midaz/ledgers.md#how-to-orchestrate-cross-ledger-transactions).
* `block` e `unblock` sempre precisam de uma organização e um ledger em todos os itens.

As outras rotas de transação mantêm a organização e o ledger no path: listar, ler, atualizar, confirmar, cancelar, reverter e atualizar uma operação. Para o corpo v2 completo, consulte [Contrato da transação](#transaction-contract).

## Exceções

***

Estas rotas precisam de tratamento específico. Não aplique a elas as tabelas deste guia.

* **Anotações.** [`POST /v1/organizations/{organization_id}/ledgers/{ledger_id}/transactions/annotation`](https://docs.lerian.studio/pt/reference/products/midaz/v1/create-transaction-annotation) não tem rota v2.
* **Cotações de ativos.** Estas rotas v1 não têm rota v2:
  * [`PUT /v1/organizations/{organization_id}/ledgers/{ledger_id}/asset-rates`](https://docs.lerian.studio/pt/reference/products/midaz/v1/create-or-update-asset-rate)
  * [`GET /v1/organizations/{organization_id}/ledgers/{ledger_id}/asset-rates/{external_id}`](https://docs.lerian.studio/pt/reference/products/midaz/v1/get-asset-rate-by-external-id)
  * [`GET /v1/organizations/{organization_id}/ledgers/{ledger_id}/asset-rates/from/{asset_code}`](https://docs.lerian.studio/pt/reference/products/midaz/v1/get-all-asset-rates-by-asset-code)
* **Tracer.** O Tracer mantém sua própria API v1. Consulte o [Início rápido da API do Tracer](https://docs.lerian.studio/pt/reference/products/tracer/tracer-api-quick-start.md).

Pare de usar as rotas de anotação e de cotação de ativos no máximo até 29 de abril de 2027. Depois dessa data, elas não estão disponíveis, e o Midaz não tem rota v2 para substituí-las.

## CRM e Fees na API v2

***

No Midaz v4.x.x, o Ledger atende o CRM e o Fees como módulos. Atualize a URL base do CRM e do Fees no seu ambiente. O Midaz v4.x.x atende as rotas de CRM e Fees apenas na v2. Ele não tem cópia v1 delas.

Cada rota mantém seu método, a menos que a tabela diga o contrário.

### CRM

As rotas v1 abaixo vêm do CRM no Midaz v3.x.x. CRM no Midaz v3.x.x significa o componente CRM do Midaz v3.5.0 ao v3.8.6 e o plugin CRM standalone. O Midaz v4.x.x renomeia aliases para instrumentos.

| CRM no Midaz v3.x.x | CRM no Midaz v4.x.x |
| :- | :- |
| `GET` e `POST /v1/holders` | [`GET`](https://docs.lerian.studio/pt/reference/products/midaz/v2/list-holders) e [`POST /v2/organizations/{organization_id}/holders`](https://docs.lerian.studio/pt/reference/products/midaz/v2/create-holder) |
| `GET`, `PATCH` e `DELETE /v1/holders/{holder_id}` | [`GET`](https://docs.lerian.studio/pt/reference/products/midaz/v2/get-holder-by-id), [`PATCH`](https://docs.lerian.studio/pt/reference/products/midaz/v2/update-holder) e [`DELETE /v2/organizations/{organization_id}/holders/{holder_id}`](https://docs.lerian.studio/pt/reference/products/midaz/v2/delete-holder) |
| `GET /v1/aliases` | [`GET /v2/organizations/{organization_id}/instruments`](https://docs.lerian.studio/pt/reference/products/midaz/v2/list-instruments) |
| `POST /v1/holders/{holder_id}/aliases` | [`POST /v2/organizations/{organization_id}/holders/{holder_id}/instruments`](https://docs.lerian.studio/pt/reference/products/midaz/v2/create-instrument) |
| `GET`, `PATCH` e `DELETE /v1/holders/{holder_id}/aliases/{alias_id}` | [`GET`](https://docs.lerian.studio/pt/reference/products/midaz/v2/get-instrument-by-id), [`PATCH`](https://docs.lerian.studio/pt/reference/products/midaz/v2/update-instrument) e [`DELETE /v2/organizations/{organization_id}/holders/{holder_id}/instruments/{instrument_id}`](https://docs.lerian.studio/pt/reference/products/midaz/v2/delete-instrument) |
| `DELETE /v1/holders/{holder_id}/aliases/{alias_id}/related-parties/{related_party_id}` | [`DELETE /v2/organizations/{organization_id}/holders/{holder_id}/instruments/{instrument_id}/related-parties/{related_party_id}`](https://docs.lerian.studio/pt/reference/products/midaz/v2/delete-related-party) |
| `POST /v1/organizations/{organization_id}/encryption/provision` | [`POST /v2/organizations/{organization_id}/encryption/provision`](https://docs.lerian.studio/pt/reference/products/midaz/v2/provision-encryption) |
| `GET /v1/organizations/{organization_id}/encryption/status` | [`GET /v2/organizations/{organization_id}/encryption/status`](https://docs.lerian.studio/pt/reference/products/midaz/v2/get-provisioning-status) |
| `GET /v1/organizations/{organization_id}/protection/audit` | [`GET /v2/organizations/{organization_id}/protection/audit`](https://docs.lerian.studio/pt/reference/products/midaz/v2/get-audit-events) |

As quatro últimas linhas se aplicam apenas ao componente CRM do Midaz v3.x.x. O plugin CRM standalone não tem essas rotas.

### Fees

As rotas v1 abaixo vêm do plugin Fees standalone. O Midaz v3.x.x não tem componente Fees.

| Plugin Fees | Fees no Midaz v4.x.x |
| :- | :- |
| `GET` e `POST /v1/packages` | [`GET`](https://docs.lerian.studio/pt/reference/products/midaz/v2/get-all-packages) e [`POST /v2/organizations/{organization_id}/ledgers/{ledger_id}/packages`](https://docs.lerian.studio/pt/reference/products/midaz/v2/create-package) |
| `GET`, `PATCH` e `DELETE /v1/packages/{package_id}` | [`GET`](https://docs.lerian.studio/pt/reference/products/midaz/v2/get-package-by-id), [`PATCH`](https://docs.lerian.studio/pt/reference/products/midaz/v2/update-package) e [`DELETE /v2/organizations/{organization_id}/ledgers/{ledger_id}/packages/{package_id}`](https://docs.lerian.studio/pt/reference/products/midaz/v2/delete-package) |
| `POST /v1/estimates` | [`POST /v2/organizations/{organization_id}/ledgers/{ledger_id}/estimates`](https://docs.lerian.studio/pt/reference/products/midaz/v2/estimate-fee-calculation) |
| `GET` e `POST /v1/billing-packages` | [`GET`](https://docs.lerian.studio/pt/reference/products/midaz/v2/get-all-billing-packages) e [`POST /v2/organizations/{organization_id}/ledgers/{ledger_id}/billing-packages`](https://docs.lerian.studio/pt/reference/products/midaz/v2/create-billing-package) |
| `GET`, `PATCH` e `DELETE /v1/billing-packages/{billing_package_id}` | [`GET`](https://docs.lerian.studio/pt/reference/products/midaz/v2/get-billing-package-by-id), [`PATCH`](https://docs.lerian.studio/pt/reference/products/midaz/v2/update-billing-package) e [`DELETE /v2/organizations/{organization_id}/ledgers/{ledger_id}/billing-packages/{billing_package_id}`](https://docs.lerian.studio/pt/reference/products/midaz/v2/delete-billing-package) |
| `POST /v1/billing/calculate` | [`POST /v2/organizations/{organization_id}/ledgers/{ledger_id}/billing/calculate`](https://docs.lerian.studio/pt/reference/products/midaz/v2/calculate-billing) |
| `POST /v1/fees` | Sem rota HTTP. O Midaz aplica tarifas dentro do fluxo de transação v2. |

## Mudanças de escopo e de permissão

***

* Envie a organização no path. Não envie o header `X-Organization-Id`.
* No Fees, envie o ledger no path. Remova `ledgerId` do corpo de pacotes, estimativas, pacotes de cobrança e cálculo de cobrança.
* As listas de pacotes e de pacotes de cobrança sempre cobrem um ledger. No plugin, `ledgerId` era um parâmetro de query opcional. Para listar os pacotes de uma organização inteira, chame a lista uma vez para cada ledger.
* Nos instrumentos do CRM, mantenha `ledgerId` e `accountId` no corpo.
* Use estimativas apenas para simular tarifas. Uma estimativa não registra nada.

O Midaz v4.x.x verifica as permissões no grupo `midaz`. Conceda as novas permissões no [Access Manager](https://docs.lerian.studio/pt/platform/access-manager.md) antes de mover o tráfego. Não suponha que as concessões antigas ainda se aplicam.

| Permissão no Midaz v3.x.x | Permissão no Midaz v4.x.x |
| :- | :- |
| `plugin-crm:holders` | `midaz:holders` |
| `plugin-crm:aliases` | `midaz:instruments` |
| `plugin-crm:encryption` | `midaz:encryption` |
| `plugin-crm:protection` | `midaz:protection` |
| `plugin-fees:packages` | `midaz:packages` |
| `plugin-fees:estimates` | `midaz:estimates` |
| `plugin-fees:billing-packages` | `midaz:billing-packages` |
| `plugin-fees:billing-calculate` | `midaz:billing-calculate` |
| `plugin-fees:fees` | Nenhuma. A rota não existe no Midaz v4.x.x. |

Rotas novas não movem seus dados. Planeje a migração dos dados, vínculos e identificadores de CRM e Fees como uma tarefa separada. Para o histórico do CRM standalone, consulte [Histórico de migração do CRM](https://docs.lerian.studio/pt/products/midaz/crm/crm-migration-guide.md). Para mover os pacotes de tarifas do Bank Transfer, consulte [Migrar as tarifas do Bank Transfer para o Midaz](https://docs.lerian.studio/pt/products/midaz/fees/fees-migration-guide.md).

## Contrato da transação

***

O corpo da requisição v2 tem estes campos:

* `asset`: o código do ativo.
* `amount`: o total, como uma string decimal.
* `debits` e `credits`: arrays com um ou mais itens cada.

Cada item de `debits` e `credits` tem estes campos:

* `alias`: o alias da conta.
* `organizationId` e `ledgerId`: os UUIDs da organização e do ledger da conta. Consulte [Organização e ledger no corpo da transação](#organization-and-ledger-in-the-transaction-body).
* `amount` ou `share`: envie exatamente um dos dois.

Selecione a intenção pela rota. O corpo v2 não tem campo `pending`:

* Use `/v2/transactions/direct` para lançar a transação de imediato.
* Use `/v2/transactions/hold` para criar uma transação pendente. Depois, confirme ou cancele essa transação.

Quando você converter um inflow ou um outflow, escreva os dois lados. No lado que a v1 deixava de fora, use `@external/` seguido do código do ativo em maiúsculas, por exemplo `@external/BRL`.

### Exemplo de uma transação direta

`POST /v2/transactions/direct`. Substitua os aliases e os UUIDs pelos valores reais.

```json theme={null}
{
  "asset": "BRL",
  "amount": "100.00",
  "debits": [
    {
      "alias": "@source",
      "organizationId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "ledgerId": "9c858901-8a57-4791-81fe-4a34d4dd8ab5",
      "amount": "100.00"
    }
  ],
  "credits": [
    {
      "alias": "@destination",
      "organizationId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "ledgerId": "9c858901-8a57-4791-81fe-4a34d4dd8ab5",
      "amount": "100.00"
    }
  ]
}
```

### Campos que o corpo v2 não aceita

O Midaz recusa um corpo v2 que tem um campo desconhecido, com uma resposta `400`. Revise seu fluxo se ele envia algum destes campos v1:

* `rate` e `remaining` em um item.
* `metadata` em um item. A própria transação ainda aceita `metadata`.
* `transactionDate`.
* `balanceKey` em um item, apenas no Midaz v4.0.x. A partir da v4.1.0, cada item aceita um `balanceKey` opcional.

Não copie esses campos para o corpo v2. Encontre primeiro uma alternativa com suporte.

## Respostas e erros

***

### Respostas de transação

* `source` e `destination` passam a ser `debit` e `credit`, no singular.
* A transação não tem mais `route` e `chartOfAccountsGroupName`.
* As operações dentro de uma transação não têm mais `route` e `chartOfAccounts`. Elas mantêm `routeId`, `routeCode` e `routeDescription`.
* As respostas de uma operação que você lê isoladamente não mudam.
* A partir da v4.1.0, um `direct` ou `hold` que abrange vários ledgers retorna um grupo com `groupId` e `transactions[]`. Confirmar, cancelar e reverter também podem retornar um grupo.

A transação v2 também tem campos que a v1 não tem. Consulte [`GET /v2/organizations/{organization_id}/ledgers/{ledger_id}/transactions/{transaction_id}`](https://docs.lerian.studio/pt/reference/products/midaz/v2/get-transaction) na referência da API.

### Erros

As rotas v2 retornam erros no formato RFC 9457, com `Content-Type: application/problem+json`. Leia estes membros:

* `type`, `title`, `status` e `detail`.
* `code`: o código de erro do Midaz. O mesmo erro tem o mesmo código na v1 e na v2.
* `errors[]`: os erros de campo, quando a requisição os tem.

Por exemplo, uma requisição `POST /v2/transactions/direct` que ainda envia o campo v1 `transactionDate` recebe esta resposta:

```http theme={null}
HTTP/1.1 400 Bad Request
Content-Type: application/problem+json
```

```json theme={null}
{
  "type": "https://errors.lerian.studio/v1/0053",
  "title": "Unexpected Fields in the Request",
  "status": 400,
  "detail": "The request body contains more fields than expected. Please send only the allowed fields as per the documentation. The unexpected fields are listed in the fields object.",
  "errors": [
    {
      "message": "unexpected field",
      "location": "transactionDate"
    }
  ],
  "code": "0053"
}
```

A URI de `type` termina com o código de erro. O segmento `/v1` dela é a versão do catálogo de erros, não a versão da API.

Não dependa de `message` nem de `fields`. Eles pertencem ao formato de erro v1. Na v2, apenas as respostas `413` e `504` também trazem um `message` no nível superior. Consulte [Tratamento de erros](https://docs.lerian.studio/pt/reference/error-handling.md) e a [Lista de erros do Midaz](https://docs.lerian.studio/pt/reference/products/midaz/error-list.md).

## Contas e regras na API v2

***

### Rotas de conta

As rotas de conta v2 permitem estas tarefas:

* Ler uma conta pelo alias e pelo código externo.
* Atualizar e excluir uma conta.
* Contar as contas com `HEAD`.

Envie `holderId` quando criar uma conta. Leia `holderId` e `holderCheckSkipped` nas respostas de conta v2.

### Regras de titular

* Quando `accounting.requireHolder` está ativado, cada conta precisa de um titular da organização. Sem um titular, o Midaz não cria a conta.
* Para pular essa verificação, envie `skip.holder`. O Midaz aceita esse campo apenas quando `overrides.allowHolderSkip` está ativado. Caso contrário, o Midaz recusa a requisição com `422` e o erro `0490`.
* Quando `accounting.requireHolder` está desativado e você não envia titular, uma conta não externa recebe o titular da sua organização. Uma conta externa não recebe titular.
* Quando `accounting.requireHolder` está desativado, o Midaz não verifica se o `holderId` que você envia existe.
* Uma conta que você cria pela v1 não recebe titular. A v1 não aplica essas regras.

Consulte [Configurações do Ledger](https://docs.lerian.studio/pt/products/midaz/ledgers.md#ledger-settings).

### Fees e Tracer

Uma transação v2 executa duas etapas que a v1 não executa:

* **Fees.** O Midaz cobra uma tarifa quando um pacote de tarifas corresponde à transação.
* **Tracer.** O Midaz reserva a transação no Tracer quando o modo Tracer do ledger não é `off`.

A partir da v4.1.0, uma transação pode pular essas etapas com `skip.fees` ou `skip.tracer`. Antes, o ledger deve ativar `overrides.allowFeeSkip` ou `overrides.allowTracerSkip`.

Valide seus pacotes de tarifas e seus limites do Tracer antes de mover o tráfego. Depois da migração, você pode ver novas cobranças e novas recusas. Consulte [Compatibilidade do Midaz e dos plugins](https://docs.lerian.studio/pt/products/midaz/midaz-version-compatibility.md).

## Checklist de migração

***

* [ ] Liste as rotas que você usa, a versão do produto e a URL base de cada serviço. Separe as rotas que têm rota v2 das rotas que não têm. Planeje parar de usar as rotas que não têm no máximo até 29 de abril de 2027.
* [ ] Para cada transação, selecione `direct` ou `hold`. Atualize `debits`, `credits`, os valores decimais e o escopo de cada item.
* [ ] Troque os aliases do CRM por instrumentos. Mova a organização e o ledger do Fees para o path. Depois da migração dos dados, confira os vínculos e os identificadores.
* [ ] Conceda as permissões `midaz`. Teste as regras de titular das contas em um ambiente de homologação.
* [ ] Atualize a forma como você lê as respostas de sucesso e de erro. Teste campos removidos, entradas inválidas, recursos ausentes e acesso negado.
* [ ] Teste cada fluxo que sua integração usa: criar, ler, reter, confirmar, cancelar, reverter, bloquear e desbloquear. Confira saldos, operações, tarifas e recusas por limites do Tracer.
* [ ] Continue enviando `X-Idempotency` e `X-TTL` nas requisições de criação. Não envie a mesma transação pela v1 e pela v2 para comparar resultados. Use dados e cenários controlados em homologação.
* [ ] Mova o tráfego em etapas controladas. Monitore os erros e os resultados financeiros. Mantenha um plano de rollback que não envie de novo transações já processadas.


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