Guias de Desenvolvimento

Política e Conformidade

Signing Sessions

Guias dos SDKs

Evidências e Verificação

Após a conclusão de uma transação, a API gera um pacote de evidências com todas as informações da operação. A verificação pública permite que terceiros validem a autenticidade sem autenticação.


Passo 1: Obter evidências (autenticado)

Retorna o pacote completo de evidências de uma transação concluída.

const evidence = await client.evidence.get(tx.transactionId);

console.log(evidence.evidenceId);
console.log(evidence.status);
console.log(evidence.signer.name);
console.log(evidence.signer.userExternalId);

// Documento assinado
if (evidence.document) {
  console.log(evidence.document.hash);     // SHA-256 do documento
  console.log(evidence.document.filename);
}

// Etapas com resultados
for (const step of evidence.steps) {
  console.log(step.type, step.status, step.completedAt);
}
evidence = client.evidence.get(tx.transaction_id)

print(evidence.evidence_id)
print(evidence.status)
print(evidence.signer.name)

if evidence.document:
    print(evidence.document.hash)
    print(evidence.document.filename)

for step in evidence.steps:
    print(step.type, step.status, step.completed_at)
evidence, _ := client.Evidence.Get(ctx, tx.TransactionID)

fmt.Println(evidence.EvidenceID)
fmt.Println(evidence.Status)
fmt.Println(evidence.Signer.Name)

if evidence.Document != nil {
    fmt.Println(evidence.Document.Hash)
    fmt.Println(evidence.Document.Filename)
}

for _, step := range evidence.Steps {
    fmt.Println(step.Type, step.Status, step.CompletedAt)
}
Evidence evidence = client.evidence().get(tx.transactionId);

System.out.println(evidence.evidenceId);
System.out.println(evidence.status);
System.out.println(evidence.signer.name);

if (evidence.document != null) {
    System.out.println(evidence.document.hash);
    System.out.println(evidence.document.filename);
}

for (Evidence.EvidenceStep step : evidence.steps) {
    System.out.println(step.type + " " + step.status);
}
$evidence = $client->evidence->get($tx->transactionId);

echo $evidence->evidenceId;
echo $evidence->status;
echo $evidence->signer['name'];

if ($evidence->document) {
    echo $evidence->document['hash'];
    echo $evidence->document['filename'];
}

foreach ($evidence->steps as $step) {
    echo $step['type'] . ' ' . $step['status'];
}
using SignDocsBrasil.Api;
using SignDocsBrasil.Api.Models;

var evidence = await client.Evidence.GetAsync(tx.TransactionId);

Console.WriteLine(evidence.EvidenceId);
Console.WriteLine(evidence.Status);
Console.WriteLine(evidence.Signer.Name);
Console.WriteLine(evidence.Signer.UserExternalId);

// Documento assinado
if (evidence.Document != null)
{
    Console.WriteLine(evidence.Document.Hash);     // SHA-256 do documento
    Console.WriteLine(evidence.Document.Filename);
}

// Etapas com resultados
foreach (var step in evidence.Steps)
{
    Console.WriteLine($"{step.Type} {step.Status} {step.CompletedAt}");
}

Passo 2: Verificação pública (sem autenticação)

Endpoint público que permite a qualquer pessoa verificar a autenticidade de uma evidência. Não requer token de acesso.

const result = await client.verification.verify(evidenceId);

console.log(result.evidenceId);
console.log(result.transactionId);
console.log(result.status);              // COMPLETED
console.log(result.signer.displayName);
console.log(result.completedAt);
result = client.verification.verify(evidence_id)

print(result.evidence_id)
print(result.transaction_id)
print(result.status)              # COMPLETED
print(result.signer.display_name)
result, _ := client.Verification.Verify(ctx, evidenceID)

fmt.Println(result.EvidenceID)
fmt.Println(result.TransactionID)
fmt.Println(result.Status)            // COMPLETED
fmt.Println(result.Signer.DisplayName)
VerificationResponse result = client.verification().verify(evidenceId);

System.out.println(result.evidenceId);
System.out.println(result.transactionId);
System.out.println(result.status);              // COMPLETED
System.out.println(result.signer.displayName);
$result = $client->verification->verify($evidenceId);

echo $result->evidenceId;
echo $result->transactionId;
echo $result->status;                  // COMPLETED
echo $result->signer['displayName'];
using SignDocsBrasil.Api;
using SignDocsBrasil.Api.Models;

var verification = await client.Evidence.VerifyAsync(evidence.EvidenceId);

Console.WriteLine(verification.EvidenceId);
Console.WriteLine(verification.TransactionId);
Console.WriteLine(verification.Status);              // COMPLETED
Console.WriteLine(verification.Signer.DisplayName);
Console.WriteLine(verification.CompletedAt);

Passo 3: Downloads (sem autenticação)

Obtém URLs pré-assinadas para download dos artefatos de evidência. Também público.

const downloads = await client.verification.downloads(evidenceId);

console.log(downloads.expiresAt);

// Relatório de evidências (documento com todas as etapas, timestamps e resultados)
if (downloads.evidenceReportUrl) {
  console.log(downloads.evidenceReportUrl);
}

// Documento assinado (com assinaturas digitais embutidas ou .p7s separado)
if (downloads.signedDocumentUrl) {
  console.log(downloads.signedDocumentUrl);
}
downloads = client.verification.downloads(evidence_id)

print(downloads.expires_at)

if downloads.evidence_report_url:
    print(downloads.evidence_report_url)

if downloads.signed_document_url:
    print(downloads.signed_document_url)
downloads, _ := client.Verification.Downloads(ctx, evidenceID)

fmt.Println(downloads.ExpiresAt)

if downloads.EvidenceReportURL != "" {
    fmt.Println(downloads.EvidenceReportURL)
}
if downloads.SignedDocumentURL != "" {
    fmt.Println(downloads.SignedDocumentURL)
}
VerificationDownloadsResponse downloads = client.verification().downloads(evidenceId);

System.out.println(downloads.expiresAt);

if (downloads.evidenceReportUrl != null) {
    System.out.println(downloads.evidenceReportUrl);
}
if (downloads.signedDocumentUrl != null) {
    System.out.println(downloads.signedDocumentUrl);
}
$downloads = $client->verification->downloads($evidenceId);

echo $downloads->expiresAt;

if ($downloads->evidenceReportUrl) {
    echo $downloads->evidenceReportUrl;
}
if ($downloads->signedDocumentUrl) {
    echo $downloads->signedDocumentUrl;
}
using SignDocsBrasil.Api;
using SignDocsBrasil.Api.Models;

var pack = await client.Evidence.DownloadAsync(tx.TransactionId);

Console.WriteLine(pack.ExpiresAt);

// Relatório de evidências (documento com todas as etapas, timestamps e resultados)
if (pack.EvidenceReportUrl != null)
{
    Console.WriteLine(pack.EvidenceReportUrl);
}

// Documento assinado (com assinaturas digitais embutidas ou .p7s separado)
if (pack.SignedDocumentUrl != null)
{
    Console.WriteLine(pack.SignedDocumentUrl);
}

Tipos de download

Artefato Campo Descrição
Relatório de evidências evidenceReportUrl Documento com todas as etapas, timestamps, resultados e metadados
Documento assinado signedDocumentUrl Documento original com assinaturas digitais (PAdES para PDF, CAdES .p7s para demais formatos)

As URLs são pré-assinadas e expiram no horário indicado em expiresAt.


Metadados do canal de origem

A partir da versão 1.3 dos pacotes de evidência, o objeto de evidência pode incluir um campo metadata com informações sobre o canal de origem da transação. Exemplos:

source Descrição
telegram_bot Transação originada pelo bot Telegram.
google_drive Transação originada pelo add-on Google Drive.
api Transação criada diretamente via API.
signing_session Transação criada via sessão de assinatura expressa.

Este campo é informativo e não afeta a validade jurídica da evidência.