SigningSessions

Reenviar código OTP da sessão

Reenvia o desafio OTP para a sessão de assinatura atual.

Opcionalmente, informe channel para reenviar por um canal diferente (e-mail, SMS, WhatsApp ou Telegram). O canal só é aceito quando a sessão foi criada com signer.otpChannelSelectable; caso contrário a requisição retorna 400.

Limitado a um reenvio a cada 60 segundos por sessão. Dentro desse intervalo a chamada retorna 409 com o tempo restante — o endpoint é autenticado pelo signatário, e um reenvio por SMS, WhatsApp ou Telegram Gateway é uma mensagem tarifada. Por WhatsApp e Telegram Gateway, o reenvio consome a cota de mensagens do tenant (429 quando esgotada).

Autenticação via embedToken (clientSecret).

post/v1/signing-sessions/{sessionId}/resend-otp

Request

  • Base URL: https://api.signdocs.com.br
  • URL: https://api.signdocs.com.br/v1/signing-sessions/{sessionId}/resend-otp
  • Auth: HTTP bearer

Path parameters

sessionIdstring required

Identificador único da sessão de assinatura.

Request body

channel'email' | 'sms' | 'whatsapp' | 'telegram'

Canal de entrega do OTP, escolhido por signatário. Independente do canal usado para entregar o link de assinatura: um convite por WhatsApp pode ter OTP por e-mail, e um convite por e-mail pode ter OTP por WhatsApp.

sms e whatsapp exigem signer.phone e o canal habilitado para o tenant (sms.enabled / whatsapp.enabled); caso contrário o passo de OTP falha com 422. No WhatsApp, um número que pediu para não receber mensagens também falha com 422, com uma mensagem que orienta a escolher outro canal.

telegram exige telegram.enabled no tenant. O código chega pelo bot da SignDocs quando o signatário já registrou o próprio CPF nele; sem registro, é enviado por telefone (Telegram Gateway) se o tenant tiver essa opção habilitada, e caso contrário o passo falha com 422 de imediato. Ao criar a sessão, otpChannel: telegram ainda exige signer.email quando a política tem OTP.

Um OTP por WhatsApp ou pelo Telegram Gateway consome a cota de mensagens do tenant; esgotada, o envio é recusado com 429.

Response

OTP reenviado com sucesso.

sessionIdstring required
status'ACTIVE' | 'COMPLETED' | 'CANCELLED' | 'EXPIRED' | 'FAILED' required

Status da sessão de assinatura.

evidenceIdstring

ID da evidência (presente quando status é COMPLETED).

redirectUrlstring uri

URL de redirecionamento (returnUrl + session_id).

completedAtstring date-time

Data/hora de conclusão (quando status é COMPLETED).

hostedUrlstring uri

URL da página de liveness hospedada (para start_liveness).

livenessSessionIdstring

ID da sessão Rekognition (para start_liveness).

signatureRequestIdstring

ID da requisição de assinatura (para prepare_signing).

hashToSignstring

Hash a ser assinado pelo certificado (para prepare_signing).

hashAlgorithmstring

Algoritmo do hash (ex. SHA-256).

signatureAlgorithmstring

Algoritmo de assinatura esperado (ex. SHA256withRSA).

errorCodestring

Motivo da reprovação de uma etapa, quando ela falha sem que a requisição falhe. Esta é a parte que mais importa numa integração biométrica: uma etapa reprovada volta 200 com a sessão ainda ACTIVE e o motivo aqui — não como erro HTTP. Quem trata só o status HTTP lê uma reprovação como sucesso.

Valores emitidos hoje:

CódigoSignificado
BIOMETRIC_MATCH_FAILEDSimilaridade abaixo do limiar exigido
LIVENESS_NOT_COMPLETEDA captura de vivacidade não foi concluída
DOCUMENT_QUALITY_LOWBrilho ou nitidez abaixo do piso do tenant
DOCUMENT_MATCH_FAILEDA comparação com a foto do documento não foi aprovada
SERPRO_*Falha na consulta SERPRO — SERPRO_TIMEOUT, SERPRO_RATE_LIMITED, SERPRO_CIRCUIT_OPEN, SERPRO_AUTH_FAILURE, SERPRO_CREDENTIALS_ERROR, SERPRO_INVALID_REQUEST, SERPRO_SERVER_ERROR

CPF_REQUIRED e CPF_MISMATCH não aparecem aqui: são 400, com o código dentro do corpo do problema, não desta resposta 200.

errorDetailstring

Texto em pt-BR destinado ao signatário, pronto para ser exibido. Descreve o que fazer, não o que houve internamente.

retryableboolean

true enquanto restam tentativas na etapa. Quando as tentativas acabam a etapa vai a FAILED e este campo vem false — é o sinal de que insistir não adianta. Cada nova tentativa é cobrada como excedente.

Example response

{
  "sandbox": {
    "otpCode": "123456"
  },
  "errorCode": "BIOMETRIC_MATCH_FAILED",
  "errorDetail": "Não foi possível confirmar seu rosto. Tente novamente."
}

Changes

No recorded changes to this operation across all 1 revision of this API.