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

# Retorno do provedor de certificado

> Rota pública de callback onde o provedor redireciona após autenticação.

Rota de callback pública onde o navegador do signatário retorna após autenticar no provedor de certificado. **Esta rota é chamada automaticamente pelo provedor** — não é algo que você precisa invocar.

O endpoint redireciona (HTTP 302) de volta para a aplicação do signatário, sinalizando sucesso ou falha da autenticação.

## Parâmetros

<ParamField path="state" type="string" required>
  Valor opaco que correlaciona o início da autenticação com seu retorno. Processado internamente pelo servidor.
</ParamField>

<ParamField query="credentialId" type="string" required>
  ID da credencial devolvido pelo provedor após autenticação bem-sucedida.
</ParamField>

<ParamField query="requestId" type="string" optional>
  ID da requisição de autenticação (uso interno).
</ParamField>

## Respostas

O endpoint retorna um **redirecionamento HTTP 302** para o navegador do signatário, com os formatos abaixo:

**Sucesso:**

```
HTTP/1.1 302 Found
Location: https://seu-app.com/signer/sign/{sessionToken}?integraicp=authorized
```

**Falha:**

```
HTTP/1.1 302 Found
Location: https://seu-app.com/signer/sign/{sessionToken}?integraicp=failed&message=<motivo_do_erro>
```

## Erros

* **400**: Parâmetros obrigatórios faltando (`credentialId` não fornecido).
* **410**: Nenhuma sessão de autorização encontrada para este `state` (expirada ou inválida).

## Importante

* **Rota pública**: não exige autenticação. Acessível diretamente pelo navegador.
* **Idempotente**: chamadas repetidas com o mesmo `credentialId` retornam o mesmo resultado.
* **Navegador**: o provedor chama esta rota automaticamente; o signatário não precisa fazer nada além de se autenticar.
* **Após redirecionamento**: verifique o status da autorização com [`GET .../integraicp/authorization`](/plataforma/assinatura-digital/api/get-integraicp-authorization-status) para confirmar sucesso antes de prosseguir com a assinatura.

## Fluxo no navegador

1. Signatário clica em "Autorizar com \[Provedor]" na tela de assinatura.
2. Frontend chama [`POST .../integraicp/start`](/plataforma/assinatura-digital/api/post-integraicp-start), recebe `redirectUrl`.
3. Abre `redirectUrl` no navegador (ou redireciona para lá).
4. Signatário se autentica no provedor (login, aprovação de dois fatores, etc.).
5. **Provedor chama esta rota** (`GET /signer/v1/integraicp/callback/:state?credentialId=...`).
6. Backend processa, persiste a credencial e redireciona o navegador de volta para sua aplicação: `https://seu-app.com/signer/sign/{sessionToken}?integraicp=authorized` ou `?integraicp=failed`.
7. Frontend detecta `integraicp=authorized` na URL e habilita o botão "Assinar"; se `failed`, exibe o erro.

## Relacionado

* [`POST .../integraicp/start`](/plataforma/assinatura-digital/api/post-integraicp-start) — iniciar autenticação e obter `redirectUrl`
* [`GET .../integraicp/authorization`](/plataforma/assinatura-digital/api/get-integraicp-authorization-status) — verificar estado da autorização após retorno
* [`POST /signer/v1/sign/:sessionToken/sign`](/plataforma/assinatura-digital/api/post-sign) — assinar após autorizado


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