---
title: "Preparar assinatura digital"
method: POST
path: "/v1/transactions/{transactionId}/signing/prepare"
tags: ["Signing"]
---

# Preparar assinatura digital

`POST /v1/transactions/{transactionId}/signing/prepare`

## Request

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

Prepara o documento para assinatura digital com certificado ICP-Brasil A1.
Retorna o hash que deve ser assinado pelo certificado do cliente.

O cliente deve enviar a cadeia de certificados PEM para que o servidor
prepare o placeholder no PDF (para documentos PDF) ou compute o hash
do arquivo inteiro (para documentos genéricos — CAdES .p7s com conteúdo anexado).

O formato é determinado automaticamente pelo `documentFormat` da transação,
definido no momento do upload do documento.

Requer scope `transactions:write`.

## Path parameters

- `transactionId` string, required

## Request body

- PrepareSigningRequest: Requisição de preparação para assinatura digital.
  - `certificateChainPems` string[], required: Cadeia de certificados PEM do signatário (certificado do signatário primeiro).

## Response `200`

Hash para assinatura gerado com sucesso.

- PrepareSigningResponse: Resposta de preparação para assinatura digital.
  - `signatureRequestId` string, required: Identificador da requisição de assinatura.
  - `hashToSign` string, required: Hash que deve ser assinado pelo certificado A1 do cliente.
  - `hashAlgorithm` 'SHA-256', required: Algoritmo de hash utilizado.
  - `signatureAlgorithm` 'RSASSA-PKCS1-v1_5', required: Algoritmo de assinatura esperado.

## Other responses

- `400`: Requisição inválida — parâmetros ausentes ou malformados.
- `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)
