> ## Documentation Index
> Fetch the complete documentation index at: https://docs-platform.services-valid.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

# Assinar com submit (templates)

> Preenche campos finais e assina em uma única chamada (fluxo específico para templates).

Fluxo otimizado para envelopes baseados em template: permite que o signatário preencha os campos dinâmicos **e** assine em uma única chamada. Não é válido para envelopes avulsos (sem template).

**Autenticação**: use apenas o `sessionToken` na URL.

## Parâmetros

<ParamField path="sessionToken" type="string" required>
  Token da sessão do signatário.
</ParamField>

<ParamField body="fileUuid" type="string" required>
  UUID do arquivo a assinar.
</ParamField>

<ParamField body="values" type="array" required>
  Lista de campos dinâmicos para preencher e assinar junto.

  <Expandable title="Propriedades de values[]">
    <ParamField body="fieldUuid" type="string">
      UUID do campo (obtido em [`GET /v1/sign/:sessionToken`](/plataforma/assinatura-digital/api/get-sign-session)).
    </ParamField>

    <ParamField body="value" type="string | string[] | boolean" required>
      Valor a preencher. Para `checkbox`, array de valores. Para `date`, formato ISO (`YYYY-MM-DD`).
    </ParamField>
  </Expandable>
</ParamField>

## Respostas

<ResponseField name="url" type="string">
  URL assinada para download do PDF final assinado e renderizado com campos. Válida por 15 minutos.
</ResponseField>

<ResponseField name="expiresAt" type="string">
  Timestamp de expiração da URL.
</ResponseField>

## Erros

Veja [Autenticação e erros](/plataforma/assinatura-digital/api/erros-e-autenticacao).

* **400**: Campo desconhecido, valor inválido, ou envelope não baseado em template.
* **404**: Session token inválido.
* **410**: Session token expirado.
* **409**: Envelope já foi assinado, ou campo obrigatório não preenchido.

<ResponseExample>
  ```json theme={"theme":"catppuccin-latte"}
  HTTP/1.1 201 Created
  Content-Type: application/json

  {
    "url": "https://storage.googleapis.com/bucket/signed-550e8400.pdf?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=...",
    "expiresAt": "2025-07-27T16:00:30.000Z"
  }
  ```

  ```json theme={"theme":"catppuccin-latte"}
  HTTP/1.1 400 Bad Request
  Content-Type: application/json

  {
    "statusCode": 400,
    "message": "Envelope is not based on a template"
  }
  ```
</ResponseExample>

## Exemplo

```bash theme={"theme":"catppuccin-latte"}
curl -X POST "https://signer.vcc-service.com/signature/envelope-sessions/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.../submit" \
  -H "Content-Type: application/json" \
  -d '{
    "fileUuid": "6ba7b811-9dad-11d1-80b4-00c04fd430c8",
    "values": [
      {
        "fieldUuid": "field-001",
        "value": "Empresa XYZ"
      },
      {
        "fieldUuid": "field-002",
        "value": "2025-12-31"
      },
      {
        "fieldUuid": "field-003",
        "value": ["opcao_a", "opcao_c"]
      }
    ]
  }'
```

## Fluxo de assinatura com submit

1. **Pré-visualização (opcional)**: use [`GET /v1/sign/:sessionToken/preview`](/plataforma/assinatura-digital/api/get-sign-session-preview) para ver como ficará o PDF antes de confirmar.
2. **Submit**: envie todos os campos finais + assinatura numa única chamada.
3. **Congelamento**: o PDF é renderizado com os campos nesta chamada (one-time freeze) — não pode ser alterado depois.
4. **Assinatura**: documento é assinado com a estratégia automática (PAdES ou Eletrônica).
5. **Finalização**: se último signatário, webhook `FINISHED` dispara.

## Quando usar submit vs. sign separado?

| Situação                                          | Use                                   |
| :------------------------------------------------ | :------------------------------------ |
| Envelope com template e campos dinâmicos          | `submit` (mais simples, uma chamada)  |
| Envelope avulso (sem template)                    | `sign` (não há campos para preencher) |
| Signatário quer pré-visualizar antes de confirmar | `GET /preview` depois `submit`        |
| Signatário quer preencher campos em várias etapas | `PATCH fields` depois `sign`          |

## Relacionado

* [`POST /v1/sign/:sessionToken/sign`](/plataforma/assinatura-digital/api/post-sign) — assinar sem preencher campos (fluxo alternativo)
* [`PATCH /v1/sign/:sessionToken/fields`](/plataforma/assinatura-digital/api/patch-sign-session-fields) — preencher campos antes de assinar separadamente
* [`GET /v1/sign/:sessionToken/preview`](/plataforma/assinatura-digital/api/get-sign-session-preview) — pré-visualizar PDF com campos preenchidos
