O fluxo mais básico de assinatura. Utiliza o perfil CLICK_ONLY, que gera uma única etapa CLICK_ACCEPT — o signatário aceita o documento com um clique.
Etapas geradas: CLICK_ACCEPT
Cria a transação já com o documento embutido em base64. O status resultante será DOCUMENT_UPLOADED.
import { SignDocsBrasilClient } from '@signdocs-brasil/api';
const tx = await client.transactions.create({
purpose: 'DOCUMENT_SIGNATURE',
policy: { profile: 'CLICK_ONLY' },
signer: {
name: 'João Silva',
email: 'joao@example.com',
userExternalId: 'user-001',
},
document: {
content: documentBase64,
filename: 'contrato.pdf',
},
});
console.log(tx.transactionId, tx.status); // DOCUMENT_UPLOADED
from signdocs_brasil import SignDocsBrasilClient, ClientConfig
from signdocs_brasil.models import (
CreateTransactionRequest, Policy, Signer, InlineDocument,
)
tx = client.transactions.create(CreateTransactionRequest(
purpose='DOCUMENT_SIGNATURE',
policy=Policy(profile='CLICK_ONLY'),
signer=Signer(
name='João Silva',
email='joao@example.com',
user_external_id='user-001',
),
document=InlineDocument(
content=document_base64,
filename='contrato.pdf',
),
))
print(tx.transaction_id, tx.status) # DOCUMENT_UPLOADED
tx, err := client.Transactions.Create(ctx, &signdocs.CreateTransactionRequest{
Purpose: signdocs.TransactionPurposeDocumentSignature,
Policy: signdocs.Policy{Profile: signdocs.PolicyProfileClickOnly},
Signer: signdocs.Signer{
Name: "João Silva",
Email: "joao@example.com",
UserExternalID: "user-001",
},
Document: &signdocs.DocumentInline{
Content: documentBase64,
Filename: "contrato.pdf",
},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(tx.TransactionID, tx.Status) // DOCUMENT_UPLOADED
CreateTransactionRequest request = new CreateTransactionRequest();
request.purpose = "DOCUMENT_SIGNATURE";
request.policy = new Policy("CLICK_ONLY");
request.signer = new Signer("João Silva", "joao@example.com", "user-001");
request.document = new CreateTransactionRequest.InlineDocument(documentBase64, "contrato.pdf");
Transaction tx = client.transactions().create(request);
System.out.println(tx.transactionId + " " + tx.status); // DOCUMENT_UPLOADED
use SignDocsBrasil\Api\Models\CreateTransactionRequest;
use SignDocsBrasil\Api\Models\Policy;
use SignDocsBrasil\Api\Models\Signer;
$tx = $client->transactions->create(new CreateTransactionRequest(
purpose: 'DOCUMENT_SIGNATURE',
policy: new Policy(profile: 'CLICK_ONLY'),
signer: new Signer(
name: 'João Silva',
email: 'joao@example.com',
userExternalId: 'user-001',
),
document: ['content' => $documentBase64, 'filename' => 'contrato.pdf'],
));
echo $tx->transactionId . ' ' . $tx->status; // DOCUMENT_UPLOADED
using SignDocsBrasil.Api.Models;
var tx = await client.Transactions.CreateAsync(new CreateTransactionRequest
{
Purpose = "DOCUMENT_SIGNATURE",
Policy = new Policy { Profile = "CLICK_ONLY" },
Signer = new Signer
{
Name = "João Silva",
Email = "joao@example.com",
UserExternalId = "user-001",
},
Document = new InlineDocument
{
Content = documentBase64,
Filename = "contrato.pdf",
},
});
Console.WriteLine($"{tx.TransactionId} {tx.Status}"); // DOCUMENT_UPLOADED
A transação CLICK_ONLY gera uma única etapa CLICK_ACCEPT com status PENDING.
const steps = await client.steps.list(tx.transactionId);
const clickStep = steps[0];
console.log(clickStep.type); // CLICK_ACCEPT
console.log(clickStep.status); // PENDING
steps = client.steps.list(tx.transaction_id)
click_step = steps[0]
print(click_step.type) # CLICK_ACCEPT
print(click_step.status) # PENDING
steps, err := client.Steps.List(ctx, tx.TransactionID)
if err != nil {
log.Fatal(err)
}
clickStep := steps[0]
fmt.Println(clickStep.Type) // CLICK_ACCEPT
fmt.Println(clickStep.Status) // PENDING
List<Step> steps = client.steps().list(tx.transactionId);
Step clickStep = steps.get(0);
System.out.println(clickStep.type); // CLICK_ACCEPT
System.out.println(clickStep.status); // PENDING
$steps = $client->steps->list($tx->transactionId);
$clickStep = $steps[0];
echo $clickStep->type; // CLICK_ACCEPT
echo $clickStep->status; // PENDING
var steps = await client.Steps.ListAsync(tx.TransactionId);
var clickStep = steps[0];
Console.WriteLine(clickStep.Type); // CLICK_ACCEPT
Console.WriteLine(clickStep.Status); // PENDING
const startResp = await client.steps.start(tx.transactionId, clickStep.stepId);
console.log(startResp.status); // STARTED
start_resp = client.steps.start(tx.transaction_id, click_step.step_id)
print(start_resp.status) # STARTED
startResp, err := client.Steps.Start(ctx, tx.TransactionID, clickStep.StepID, nil)
if err != nil {
log.Fatal(err)
}
fmt.Println(startResp.Status) // STARTED
StartStepResponse startResp = client.steps().start(tx.transactionId, clickStep.stepId);
System.out.println(startResp.status); // STARTED
$startResp = $client->steps->start($tx->transactionId, $clickStep->stepId);
echo $startResp->status; // STARTED
var startResp = await client.Steps.StartAsync(tx.TransactionId, clickStep.StepId);
Console.WriteLine(startResp.Status); // STARTED
O signatário aceita o documento enviando accepted: true.
const completed = await client.steps.complete(tx.transactionId, clickStep.stepId, {
accepted: true,
});
console.log(completed.status); // COMPLETED
from signdocs_brasil.models import CompleteClickRequest
completed = client.steps.complete(
tx.transaction_id,
click_step.step_id,
CompleteClickRequest(accepted=True),
)
print(completed.status) # COMPLETED
completed, err := client.Steps.Complete(ctx, tx.TransactionID, clickStep.StepID,
&signdocs.CompleteClickRequest{Accepted: true},
)
if err != nil {
log.Fatal(err)
}
fmt.Println(completed.Status) // COMPLETED
Step completed = client.steps().complete(tx.transactionId, clickStep.stepId,
Map.of("accepted", true));
System.out.println(completed.status); // COMPLETED
$completed = $client->steps->complete($tx->transactionId, $clickStep->stepId, [
'accepted' => true,
]);
echo $completed->status; // COMPLETED
var completed = await client.Steps.CompleteAsync(tx.TransactionId, clickStep.StepId,
new { Accepted = true });
Console.WriteLine(completed.Status); // COMPLETED
Após todas as etapas concluídas, finalize a transação. O status muda para COMPLETED.
const finalized = await client.transactions.finalize(tx.transactionId);
console.log(finalized.status); // COMPLETED
finalized = client.transactions.finalize(tx.transaction_id)
print(finalized.status) # COMPLETED
finalized, err := client.Transactions.Finalize(ctx, tx.TransactionID)
if err != nil {
log.Fatal(err)
}
fmt.Println(finalized.Status) // COMPLETED
Transaction finalized = client.transactions().finalize(tx.transactionId);
System.out.println(finalized.status); // COMPLETED
$finalized = $client->transactions->finalize($tx->transactionId);
echo $finalized->status; // COMPLETED
var finalized = await client.Transactions.FinalizeAsync(tx.TransactionId);
Console.WriteLine(finalized.Status); // COMPLETED
O pacote de evidências contém todas as informações da operação: signatário, etapas, resultados e hash do documento.
const evidence = await client.evidence.get(tx.transactionId);
console.log(evidence.evidenceId);
console.log(evidence.signer.name);
console.log(evidence.steps.map(s => s.type)); // ['CLICK_ACCEPT']
evidence = client.evidence.get(tx.transaction_id)
print(evidence.evidence_id)
print(evidence.signer.name)
evidence, err := client.Evidence.Get(ctx, tx.TransactionID)
if err != nil {
log.Fatal(err)
}
fmt.Println(evidence.EvidenceID)
fmt.Println(evidence.Signer.Name)
Evidence evidence = client.evidence().get(tx.transactionId);
System.out.println(evidence.evidenceId);
System.out.println(evidence.signer.name);
$evidence = $client->evidence->get($tx->transactionId);
echo $evidence->evidenceId;
echo $evidence->signer['name'];
var evidence = await client.Evidence.GetAsync(tx.TransactionId);
Console.WriteLine(evidence.EvidenceId);
Console.WriteLine(evidence.Signer.Name);
Obtém uma URL pré-assinada para download do documento com assinaturas embutidas.
const download = await client.documents.download(tx.transactionId);
console.log(download.downloadUrl);
console.log(download.filename);
// Use a URL para baixar o arquivo (expira em poucos minutos)
download = client.documents.download(tx.transaction_id)
print(download.download_url)
print(download.filename)
download, err := client.Documents.Download(ctx, tx.TransactionID)
if err != nil {
log.Fatal(err)
}
fmt.Println(download.DownloadURL)
fmt.Println(download.Filename)
DownloadResponse download = client.documents().download(tx.transactionId);
System.out.println(download.downloadUrl);
System.out.println(download.filename);
$download = $client->documents->download($tx->transactionId);
echo $download->downloadUrl;
echo $download->filename;
var download = await client.Documents.DownloadAsync(tx.TransactionId);
Console.WriteLine(download.DownloadUrl);
Console.WriteLine(download.Filename);
Criar transação (CLICK_ONLY + documento)
│
▼
Listar etapas → [CLICK_ACCEPT]
│
▼
Iniciar CLICK_ACCEPT
│
▼
Completar CLICK_ACCEPT (accepted: true)
│
▼
Finalizar transação
│
▼
Obter evidências / Download documento