---
title: "Finalizar transação"
method: POST
path: "/v1/transactions/{transactionId}/finalize"
tags: ["Transactions"]
---

# Finalizar transação

`POST /v1/transactions/{transactionId}/finalize`

## Request

- Base URL: `https://api.signdocs.com.br`
- URL: `https://api.signdocs.com.br/v1/transactions/{transactionId}/finalize`
- Auth: HTTP bearer

Finaliza uma transação com todas as etapas concluídas, gerando o pacote de evidência
criptograficamente assinado (.p7m). O `evidenceId` retornado pode ser usado para
verificação pública via `/v1/verify/{evidenceId}`.

Requer scope `transactions:write`.

## Path parameters

- `transactionId` string, required

## Response `200`

Transação finalizada e evidência gerada com sucesso.

- FinalizeResponse: Resposta de finalização de transação.
  - `transactionId` string, required
  - `status` 'COMPLETED', required
  - `evidenceId` string, required: Identificador da evidência gerada. Use em `/v1/verify/{evidenceId}`.
  - `evidenceHash` string, required: Hash SHA-256 do pacote de evidência.
  - `completedAt` string, date-time, required

## Other responses

- `401`: Autenticação ausente ou inválida.
- `403`: Permissões insuficientes para a operação solicitada. Inclui `purpose: "ACTION_AUTHENTICATION"` sem `featureFlags.trustSessionsEnabled`. A verificação é pelo `purpose`, não pela rota: vale em `/v1/transactions`, `/v1/signing-sessions` e `/v1/envelopes/{envelopeId}/sessions`, além de `/v1/trust-sessions`. O remédio é habilitar a flag para o tenant e provisionar a cota `monthlyTrustSessions`.
- `404`: Recurso não encontrado.
- `409`: Conflito de estado — a operação não pode ser realizada no estado atual do recurso.
- `422`: Entidade não processável — a requisição é sintaticamente válida mas semanticamente incorreta. Inclui o perfil de política não autorizado para o tenant. As rotas de criação (`/v1/transactions`, `/v1/signing-sessions` e `/v1/envelopes/{envelopeId}/sessions`) verificam a mesma regra, antes de cota, convite e gravação — a recusa não consome documento. As flags envolvidas são `featureFlags.customPolicyEnabled` (perfil `CUSTOM`), `serpro.enabled` (perfis SERPRO), `featureFlags.documentExtractionEnabled` (fallback por documento; `BIOMETRIC_SERPRO_AUTO_FALLBACK` exige as duas últimas) e `featureFlags.biometricRequired`. O remédio é habilitar a flag para o tenant. `signer.cpf` e `signer.birthDate`, exigidos pelos perfis SERPRO, são validados como **400** e não aqui: requisição malformada, corrigível na mesma chamada.
- `500`: Erro interno do servidor.

---

[API](https://skmtc.dev/signdocs/apis/signdocs-brasil-external-api.md) · [All operations](https://skmtc.dev/signdocs/apis/signdocs-brasil-external-api/llms.txt) · [OpenAPI document](https://skmtc.dev/signdocs/apis/signdocs-brasil-external-api/revisions/2d3805aed161?raw)
