🔑 Autenticação

Todas as rotas exigem autenticação via API Key no header Authorization.

ℹ️ Gere sua API Key no painel da Assin em Configurações → API Keys. Cada chave pertence a uma empresa (tenant) e não deve ser compartilhada entre ambientes.

Formato do header

Authorization: Bearer <sua-api-key>
Origin: https://seuapp.com.br
x-origin-with-label: web-app

Exemplo cURL

curl -X GET "{BASE_URL}/v1/envelopes" \
  -H "Authorization: Bearer sk_live_xxxxxxxxxxxx" \
  -H "Origin: https://seuapp.com.br" \
  -H "x-origin-with-label: web-app"

🌐 Base URL

As URLs de acesso à API são fornecidas após a contratação.

📩 Para obter as credenciais e a URL da API, entre em contato com o time da Assin. Nos exemplos desta documentação utilizamos {BASE_URL} como placeholder.
Ambiente Base URL
Produção {BASE_URL}/v1
Homologação {BASE_URL_HML}/v1

📋 Headers Obrigatórios

Presentes em todas as requisições, sem exceção.

Header Exemplo Descrição
Authorization Bearer sk_live_xxx API Key da empresa
Origin https://seuapp.com.br Origem da requisição — validada pelo CORS
x-origin-with-label web-app Label do cliente (ex: web-app, mobile, integration)

⚠️ Erros Padrão

Formato de resposta de erro padronizado em todos os endpoints.

Status Significado
400 Payload inválido — campo obrigatório ausente ou valor fora do range permitido
401 API Key ausente, expirada ou inválida
403 A chave não tem permissão para o recurso requisitado
404 Recurso não encontrado ou não pertence à empresa autenticada
422 Regra de negócio violada (ex: envelope não está em DRAFT, créditos insuficientes)
500 Erro interno — contate o suporte com o requestId da resposta
Formato de resposta de erro
{
  "statusCode": 422,
  "message": "Envelope is not in DRAFT status",
  "error": "Unprocessable Entity"
}

🔍 Sistema de Filtros

Todos os endpoints de listagem aceitam filters, sortBy, includes, page e pageSize como query params. O formato segue o padrão @duaneoli/typeorm-nest-joi.

Os filtros são passados como filters[campo.operador]=valor. Cada campo suporta um ou mais operadores dependendo do seu tipo.

Operadores disponíveis

Operador Equivalente SQL Exemplo de query param
equals = 'valor' filters[status.equals]=DRAFT
not != 'valor' filters[status.not]=CANCELLED
iLike ILIKE 'valor' filters[title.iLike]=contrato
%iLike% ILIKE '%valor%' filters[title.%iLike%]=contrato
iLike% ILIKE 'valor%' filters[title.iLike%]=Cont
moreThan > valor filters[createdAt.moreThan]=2026-01-01
moreThanOrEqual >= valor filters[createdAt.moreThanOrEqual]=2026-01-01
lessThan < valor filters[createdAt.lessThan]=2026-12-31
lessThanOrEqual <= valor filters[createdAt.lessThanOrEqual]=2026-12-31
between BETWEEN a AND b filters[createdAt.between]=2026-01-01,2026-06-30
isEmpty IS NULL filters[expiredAt.isEmpty]=true
isNotEmpty IS NOT NULL filters[expiredAt.isNotEmpty]=true
URL de exemplo — envelopes DRAFT com título contendo "contrato"
GET /v1/envelopes
  ?filters[status.equals]=DRAFT
  &filters[title.%iLike%]=contrato
  &page=0
  &pageSize=20

Ordene resultados com sortBy[campo]=ASC|DESC. Múltiplos campos podem ser combinados.

Exemplos de sortBy
GET /v1/envelopes?sortBy[createdAt]=DESC
GET /v1/envelopes?sortBy[title]=ASC&sortBy[createdAt]=DESC
GET /v1/envelope-signers?sortBy[order]=ASC
💡 Combine filters e sortBy na mesma requisição — eles são independentes.

Carregue relações associadas com includes=entidade1,entidade2. Use ponto para relações aninhadas.

Relações disponíveis por endpoint
Endpoint Includes disponíveis
GET /envelopes user, envelopeSigners, envelopeSigners.signer, envelopeDocuments, envelopeDocuments.document
GET /envelope-signers signer, envelope
GET /signer-groups user, participants
GET /documents
Exemplos
GET /v1/envelopes?includes=envelopeSigners,envelopeDocuments.document
GET /v1/envelopes?includes=user&filters[status.equals]=COMPLETED
⚠️ Inclua apenas as relações que você realmente usa — cada includes adiciona um JOIN e impacta a performance.
Configuração base (axios)
const api = axios.create({
  baseURL: '{BASE_URL}/v1',
  headers: {
    Authorization: `Bearer ${API_KEY}`,
    Origin: 'https://seuapp.com.br',
    'x-origin-with-label': 'web-app',
  },
})
Passando filtros como objeto de params
// axios serializa arrays/objetos automaticamente como query string
const { data } = await api.get('/envelopes', {
  params: {
    'filters[status.equals]':     'DRAFT',
    'filters[title.%iLike%]':     'contrato',
    'filters[createdAt.moreThan]': '2026-01-01',
    'sortBy[createdAt]':          'DESC',
    includes:  'envelopeSigners,envelopeDocuments',
    page:      0,
    pageSize:  20,
  },
})
// data = { totalElements: 42, data: [...] }
Paginação — controle de página com React useState
const [page, setPage]     = useState(0)
const [status, setStatus] = useState<string | undefined>()

const fetchEnvelopes = async () => {
  const params: Record<string, unknown> = { page, pageSize: 20 }
  if (status) params['filters[status.equals]'] = status
  return api.get('/envelopes', { params }).then(r => r.data)
}

// Com React Query — refaz a requisição quando page ou status mudam
const { data } = useQuery({
  queryKey: ['envelopes', { page, status }],
  queryFn:  fetchEnvelopes,
  placeholderData: (prev) => prev,
})

📄 Envelopes

Recurso central da plataforma. Um envelope agrupa documentos e signatários em um único fluxo de assinatura.

GET /envelopes Listar envelopes da empresa

Retorna todos os envelopes da empresa autenticada com suporte a paginação, filtros por status e busca textual.

Query params

Parâmetro Tipo Descrição
page number opcional Página (padrão: 0)
pageSize number opcional Itens por página — máx 100 (padrão: 20)
status string opcional DRAFT | WAITING_SIGNATURE | COMPLETED | CANCELLED | EXPIRED
search string opcional Busca por nome do envelope ou signatário
Resposta 200
{
  "totalElements": 42,
  "data": [
    {
      "id": "uuid",
      "name": "Contrato de Prestação de Serviços",
      "status": "WAITING_SIGNATURE",
      "createdAt": "2026-05-02T00:00:00Z",
      "signers": [...]
    }
  ]
}
POST /envelopes Criar envelope

Cria um novo envelope em status DRAFT. Após criar, adicione documentos e signatários antes de lacrar.

Body

Campo Tipo Descrição
name string obrigatório Nome do envelope
description string opcional Descrição interna
deadline string opcional Data limite ISO 8601 para assinatura
folderId uuid opcional Pasta de organização
validationByIcp boolean opcional Exigir assinatura ICP-Brasil (requer permissão na empresa)
Body de exemplo
{
  "name": "Contrato Q2-2026",
  "description": "Contrato anual de parceria",
  "deadline": "2026-06-30T23:59:59Z",
  "folderId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}
PUT /envelopes/close Lacrar envelope — inicia o fluxo de assinatura

Lacra o envelope, verifica e debita créditos, e dispara notificações para o primeiro signatário (ou todos, se a ordem for paralela). O envelope muda para WAITING_SIGNATURE.

⚠️ O envelope deve ter pelo menos 1 documento e 1 signatário adicionados antes de lacrar. Créditos são verificados neste momento.

Body

Campo Tipo Descrição
envelopeId uuid obrigatório ID do envelope em status DRAFT
Body de exemplo
{
  "envelopeId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}
PUT /envelopes/cancel Cancelar envelope

Cancela um envelope em status WAITING_SIGNATURE. Notificações de cancelamento são disparadas para os signatários pendentes.

Body

Campo Tipo Descrição
envelopeId uuid obrigatório ID do envelope
reason string opcional Motivo do cancelamento (enviado aos signatários)
Body de exemplo
{
  "envelopeId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "reason": "Contrato renegociado — nova versão será enviada em breve"
}
PUT /envelopes/edit Editar metadados do envelope

Atualiza nome, descrição, prazo ou pasta de um envelope em status DRAFT.

Body

Campo Tipo Descrição
envelopeId uuid obrigatório ID do envelope
name string opcional Novo nome
description string opcional Nova descrição
deadline string opcional Novo prazo ISO 8601
folderId uuid opcional Nova pasta
Body de exemplo
{
  "envelopeId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "name": "Contrato Q2-2026 — Revisado",
  "deadline": "2026-07-31T23:59:59Z"
}
POST /envelopes/:method/documents Adicionar ou remover documentos de um envelope

Gerencia os documentos associados a um envelope em DRAFT. Use :method = set para adicionar e :method = remove para desvincular.

Path params

Parâmetro Valores
method set | remove

Body

Campo Tipo Descrição
envelopeId uuid obrigatório ID do envelope
documentId uuid obrigatório ID do documento
Body de exemplo
{
  "envelopeId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "documentId": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d"
}
POST /envelopes/documents-url Gerar URLs de visualização dos documentos

Retorna URLs presigned para leitura/download dos documentos de um envelope. As URLs expiram em 1 hora.

Body

Campo Tipo Descrição
envelopeId uuid obrigatório ID do envelope
Body de exemplo
{
  "envelopeId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}
Resposta 200
{
  "data": [
    {
      "documentId": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
      "name": "Contrato Q2-2026.pdf",
      "url": "https://s3.amazonaws.com/bucket/key?X-Amz-Expires=3600&...",
      "expiresAt": "2026-05-02T16:00:00Z"
    }
  ]
}
PUT /envelopes/block-envelope Bloquear / desbloquear envelope

Bloqueia temporariamente a assinatura de um envelope sem cancelá-lo. Útil para pausar o fluxo enquanto há disputas ou revisões.

Body

Campo Tipo Descrição
envelopeId uuid obrigatório ID do envelope
blocked boolean obrigatório true bloqueia, false desbloqueia
Body de exemplo
{
  "envelopeId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "blocked": true
}
GET /envelopes/stats-created Estatísticas de envelopes criados

Retorna contadores de envelopes por status para o dashboard da empresa.

Resposta 200
{
  "total": 150,
  "draft": 12,
  "waitingSignature": 38,
  "completed": 95,
  "cancelled": 5
}
DELETE /envelopes/:envelopeId Excluir envelope

Remove permanentemente um envelope em status DRAFT. Não é possível excluir envelopes lacrados — use PUT /cancel nesses casos.

Path params

Parâmetro Tipo Descrição
envelopeId uuid ID do envelope a excluir

🗂 Documents

Gestão de arquivos PDF usados nos envelopes. Faça upload, liste, verifique autenticidade e gere links de acesso.

GET /documents Listar documentos

Lista todos os documentos da empresa com paginação.

Query params

Parâmetro Tipo Descrição
page number opcional Página (padrão: 0)
pageSize number opcional Itens por página — máx 100 (padrão: 20)
Resposta 200
{
  "totalElements": 5,
  "data": [
    {
      "id": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
      "name": "Contrato de Prestacao de Servicos.pdf",
      "size": 245760,
      "s3Key": "documents/tenant-uuid/2026/05/contrato.pdf",
      "createdAt": "2026-05-02T12:00:00Z"
    }
  ]
}
POST /documents Fazer upload de documento

Registra um documento via URL presigned gerada previamente. O arquivo deve ser um PDF e já estar armazenado no S3.

Body

Campo Tipo Descrição
name string obrigatório Nome do documento
s3Key string obrigatório Chave S3 do arquivo já enviado
Body de exemplo
{
  "name": "Contrato de Prestacao de Servicos.pdf",
  "s3Key": "documents/tenant-uuid/2026/05/contrato.pdf"
}
Resposta 201
{
  "id": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
  "name": "Contrato de Prestacao de Servicos.pdf",
  "s3Key": "documents/tenant-uuid/2026/05/contrato.pdf",
  "createdAt": "2026-05-02T12:00:00Z"
}
GET /documents/get-link-document Obter URL de acesso ao documento

Gera uma URL presigned temporária para download ou visualização de um documento. Requer header x-dynamic-authorization com o token do signatário ou da sessão.

Resposta 200
{
  "url": "https://s3.amazonaws.com/bucket/key?X-Amz-Expires=3600&...",
  "expiresAt": "2026-05-02T16:00:00Z"
}
GET /documents/verify-document Verificar autenticidade de documento

Verifica se um documento é autêntico a partir de seu fingerprint blockchain ou ID. Use para o portal público de validação.

Query params (pelo menos um obrigatório)

Parâmetro Tipo Descrição
fingerprint string Hash blockchain do documento finalizado
documentId uuid ID interno do documento
Resposta 200 — autêntico
{
  "valid": true,
  "documentId": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
  "envelopeId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "envelopeName": "Contrato Q2-2026",
  "finishedAt": "2026-05-02T18:45:00Z",
  "blockchainTx": "0xabc123...def456",
  "signers": [
    { "name": "Maria Souza", "signedAt": "2026-05-02T17:30:00Z" }
  ]
}
DELETE /documents/:documentId/delete Excluir documento

Remove um documento da empresa. Documentos vinculados a envelopes lacrados não podem ser excluídos.

📝 Templates

Modelos de documento com campos variáveis. Use para gerar PDFs dinamicamente a partir de variáveis antes de criar o envelope.

GET /templates Listar templates

Lista todos os templates da empresa. Suporta filtros e paginação.

Resposta 200
{
  "totalElements": 3,
  "data": [
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "name": "Contrato Padrao CLT",
      "isActive": true,
      "documentId": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
      "fields": [
        { "key": "nomeColaborador", "label": "Nome do Colaborador" },
        { "key": "cpf",             "label": "CPF" },
        { "key": "salario",        "label": "Salario Bruto" },
        { "key": "dataAdmissao",   "label": "Data de Admissao" }
      ],
      "createdAt": "2026-03-10T09:00:00Z"
    }
  ]
}
POST /templates Criar template

Cadastra um novo template associado ao documento S3 com seus campos variáveis mapeados.

Body

Campo Tipo Descrição
name string obrigatório Nome do template
documentId uuid obrigatório Documento base
fields array obrigatório Lista de campos variáveis com nome e posição
Body de exemplo
{
  "name": "Contrato Padrao CLT",
  "documentId": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
  "fields": [
    { "key": "nomeColaborador", "label": "Nome do Colaborador" },
    { "key": "cpf",             "label": "CPF" },
    { "key": "salario",        "label": "Salario Bruto" },
    { "key": "dataAdmissao",   "label": "Data de Admissao" }
  ]
}
PUT /templates/activate/:status Ativar / desativar template

Alterna o estado ativo do template. Templates inativos não podem ser usados para gerar documentos.

Path params

Parâmetro Valores
status true | false
POST /templates/generate-document Gerar documento a partir de template

Substitui os campos variáveis do template pelos valores fornecidos e gera um PDF pronto para ser adicionado a um envelope.

Body

Campo Tipo Descrição
templateId uuid obrigatório ID do template
variables object obrigatório Pares chave/valor dos campos do template
documentName string opcional Nome para o documento gerado
Body de exemplo
{
  "templateId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "documentName": "Contrato João Silva 2026",
  "variables": {
    "nomeCliente": "João Silva",
    "cpf": "000.000.000-00",
    "valorContrato": "R$ 5.000,00"
  }
}
DELETE /templates/delete Excluir template

Remove um template da empresa. Templates usados em envelopes existentes não são afetados.

Body

Campo Tipo
templateId uuid obrigatório
Body de exemplo
{
  "templateId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}

✍️ Envelope Signers

Adicione, remova e gerencie signatários de um envelope. Cada signatário tem tipo, ordem e canal de notificação próprios.

💡 Para adicionar múltiplos signatários de uma vez a partir de um grupo pré-cadastrado, use POST /signer-groups/import.
GET /envelope-signers Listar signatários

Lista os signatários de um envelope específico.

Query params

Parâmetro Tipo Descrição
envelopeId uuid obrigatório ID do envelope
Resposta 200
[
  {
    "id": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed",
    "name": "Maria Souza",
    "email": "maria@empresa.com.br",
    "phone": "+5511999887766",
    "signatureType": "SIGN",
    "order": 1,
    "status": "PENDING",
    "notificationChannel": "EMAIL",
    "signedAt": null
  },
  {
    "id": "2c8e7fce-ccge-5c3e-0c6e-bc9egcce5cfe",
    "name": "João Diretor",
    "email": "joao.diretor@empresa.com.br",
    "phone": null,
    "signatureType": "APPROVE",
    "order": 2,
    "status": "WAITING",
    "notificationChannel": "EMAIL",
    "signedAt": null
  }
]
POST /envelope-signers Adicionar signatário ao envelope

Adiciona um signatário a um envelope em DRAFT. O campo order define a sequência de assinatura — use 0 para assinatura paralela.

Body

Campo Tipo Descrição
envelopeId uuid obrigatório ID do envelope
name string obrigatório Nome do signatário
email string obrigatório E-mail para notificação
phone string opcional Telefone para WhatsApp/SMS
signatureType string obrigatório SIGN | APPROVE | WITNESS | CARBON_COPY
order number obrigatório 0 = paralelo; 1, 2, 3... = sequencial
notificationChannel string opcional EMAIL | WHATSAPP | SMS
Body de exemplo
{
  "envelopeId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "name": "Maria Souza",
  "email": "maria@empresa.com.br",
  "signatureType": "SIGN",
  "order": 1,
  "notificationChannel": "EMAIL"
}
DELETE /envelope-signers Remover signatário do envelope

Remove um signatário de um envelope em DRAFT.

Body

Campo Tipo
envelopeSignerId uuid obrigatório
Body de exemplo
{
  "envelopeSignerId": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed"
}
POST /envelope-signers/resend-notification/:type Reenviar notificação para signatário

Reenvia o link de assinatura para um signatário via o canal especificado.

Path params

Parâmetro Valores
type email | whatsapp | sms

Body

Campo Tipo
envelopeSignerId uuid obrigatório
Body de exemplo
{
  "envelopeSignerId": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed"
}
GET /envelope-signers/stats-signer Estatísticas de signatários

Retorna contadores de signatários por status para a empresa autenticada.

Resposta 200
{
  "total": 320,
  "pending": 42,
  "signed": 268,
  "rejected": 10
}

🏷 Tags

Tags são campos posicionados visualmente sobre o documento PDF — caixas de assinatura, rubricas, campos de texto, datas. Cada tag fica vinculada a um signatário e a uma página do documento.

GET /tags Listar tags de um envelope

Retorna as tags de um documento dentro de um envelope. Ambos os filtros são obrigatórios.

Query params

Parâmetro Tipo
filters[envelopeId] uuid obrigatório
filters[envelopeDocumentId] uuid obrigatório
Resposta 200
[
  {
    "id": "c8e8d2a0-1234-4abc-8def-000000000001",
    "type": "SIGNATURE",
    "page": 3,
    "x": 15.5,
    "y": 82.0,
    "envelopeSignerId": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed"
  },
  {
    "id": "c8e8d2a0-1234-4abc-8def-000000000002",
    "type": "DATE",
    "page": 3,
    "x": 60.0,
    "y": 82.0,
    "envelopeSignerId": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed"
  }
]
POST /tags Criar tag

Adiciona uma tag posicionada no documento. Use para marcar onde cada signatário deve assinar ou preencher.

Body (campos principais)

Campo Tipo Descrição
envelopeId uuid obrigatório ID do envelope
envelopeDocumentId uuid obrigatório ID do documento no envelope
envelopeSignerId uuid obrigatório ID do signatário responsável
type string obrigatório SIGNATURE | RUBRIC | TEXT | DATE
page number obrigatório Página do documento (base 1)
x number obrigatório Posição X em % da largura da página
y number obrigatório Posição Y em % da altura da página
Body de exemplo
{
  "envelopeId":         "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "envelopeDocumentId": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
  "envelopeSignerId":   "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed",
  "type": "SIGNATURE",
  "page": 3,
  "x": 15.5,
  "y": 82.0
}
PUT /tags Editar tag

Atualiza posição, tipo ou signatário de uma tag existente.

Body

CampoTipoDescrição
tagIduuidobrigatórioID da tag
pagenumberopcionalNova página
xnumberopcionalNova posição X (%)
ynumberopcionalNova posição Y (%)
typestringopcionalSIGNATURE | RUBRIC | TEXT | DATE
Body de exemplo
{
  "tagId": "c8e8d2a0-1234-4abc-8def-000000000001",
  "x": 20.0,
  "y": 85.5
}
DELETE /tags Remover tag

Remove uma tag do documento.

Body

Campo Tipo
tagId uuid obrigatório
Body de exemplo
{
  "tagId": "c8e8d2a0-1234-4abc-8def-000000000001"
}

👥 Signer Groups

Grupos reutilizáveis de signatários. Crie uma vez, importe em qualquer envelope com um único request.

GET /signer-groups Listar grupos de signatários

Retorna todos os grupos de signatários da empresa com paginação.

Query params

Parâmetro Tipo Descrição
page number opcional Página (padrão: 0)
pageSize number opcional Itens por página — máx 100 (padrão: 20)
Resposta 200
{
  "totalElements": 2,
  "data": [
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "name": "Diretoria Financeira",
      "description": "CFO + CEO para contratos acima de R$ 50k",
      "members": [
        { "name": "Carlos CEO", "email": "ceo@empresa.com.br", "signatureType": "SIGN", "order": 1 },
        { "name": "Ana CFO", "email": "cfo@empresa.com.br", "signatureType": "SIGN", "order": 2 }
      ],
      "createdAt": "2026-04-10T09:00:00Z"
    }
  ]
}
POST /signer-groups Criar grupo

Cria um grupo reutilizável com membros e configurações de assinatura já pré-definidas.

Body

Campo Tipo Descrição
name string obrigatório Nome do grupo
description string opcional Descrição interna
members array obrigatório Lista de membros (ver abaixo)

Estrutura de cada membro

Campo Tipo Descrição
name string obrigatório Nome do signatário
email string obrigatório E-mail
phone string opcional Telefone
signatureType string obrigatório SIGN | APPROVE | WITNESS | CARBON_COPY
order number obrigatório 0 = paralelo; 1+ = sequencial
Body de exemplo
{
  "name": "Diretoria Financeira",
  "description": "CFO + CEO para contratos acima de R$ 50k",
  "members": [
    {
      "name": "Carlos CEO",
      "email": "ceo@empresa.com.br",
      "signatureType": "SIGN",
      "order": 1
    },
    {
      "name": "Ana CFO",
      "email": "cfo@empresa.com.br",
      "signatureType": "SIGN",
      "order": 2
    }
  ]
}
PUT /signer-groups/:id Atualizar grupo

Atualiza nome, descrição ou membros de um grupo. Envelopes que já importaram o grupo não são afetados.

Body

CampoTipoDescrição
namestringopcionalNovo nome
descriptionstringopcionalNova descrição
membersarrayopcionalNova lista de membros (substitui a anterior)
Body de exemplo
{
  "name": "Diretoria Financeira e Jurídica",
  "members": [
    { "name": "Carlos CEO", "email": "ceo@empresa.com.br", "signatureType": "SIGN", "order": 1 },
    { "name": "Ana CFO", "email": "cfo@empresa.com.br", "signatureType": "SIGN", "order": 2 },
    { "name": "Luiza Jurídico", "email": "juridico@empresa.com.br", "signatureType": "WITNESS", "order": 3 }
  ]
}
DELETE /signer-groups/:id Excluir grupo

Remove permanentemente o grupo. Envelopes que já importaram o grupo permanecem inalterados.

POST /signer-groups/import Importar grupo para um envelope

Cria automaticamente um EnvelopeSigner para cada membro do grupo no envelope indicado. O envelope deve estar em status DRAFT.

💡 Esta é a forma mais eficiente de adicionar times inteiros de signatários sem precisar fazer múltiplos POST /envelope-signers.

Body

Campo Tipo Descrição
groupId uuid obrigatório ID do grupo a importar
envelopeId uuid obrigatório ID do envelope de destino
Body de exemplo
{
  "groupId":    "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "envelopeId": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d"
}

📁 Folders

Pastas hierárquicas para organizar envelopes. Suportam subpastas em múltiplos níveis via parentId.

GET /folders Listar pastas

Retorna pastas da empresa. Use parentId para listar subpastas de uma pasta específica.

Query params

Parâmetro Tipo Descrição
page number opcional Página (padrão: 0)
pageSize number opcional Itens por página — máx 100 (padrão: 20)
parentId uuid opcional UUID da pasta pai para listar subpastas. Omita para listar pastas raiz.
Resposta 200
{
  "totalElements": 3,
  "data": [
    {
      "id": "a1b2c3d4-0000-0000-0000-000000000001",
      "name": "Contratos 2026",
      "parentId": null,
      "envelopeCount": 14,
      "createdAt": "2026-01-05T08:00:00Z"
    }
  ]
}
POST /folders Criar pasta

Cria uma pasta para organizar envelopes. Informe parentId para criar uma subpasta.

Body

Campo Tipo Descrição
name string obrigatório Nome da pasta
parentId uuid opcional UUID da pasta pai (cria subpasta)
Body de exemplo
{
  "name": "Contratos 2026",
  "parentId": null
}
PUT /folders/:id Atualizar pasta

Renomeia ou move uma pasta para outro nível da hierarquia alterando o parentId.

Body

Campo Tipo Descrição
name string opcional Novo nome
parentId uuid | null opcional Nova pasta pai; envie null para mover para a raiz
Body de exemplo
{
  "name": "Contratos 2026 — Encerrados",
  "parentId": null
}
DELETE /folders/:id Excluir pasta

Remove a pasta. Envelopes dentro da pasta não são excluídos — apenas a associação é removida.

📬 Contacts

Livro de endereços da plataforma. Contatos podem ser pessoais (por usuário) ou compartilhados com toda a empresa via isCompanyContact.

GET /contacts Listar contatos

Retorna contatos do livro de endereços. Use isCompanyContact=true para listar os compartilhados com toda a empresa.

Query params

Parâmetro Tipo Descrição
page number opcional Página (padrão: 0)
pageSize number opcional Itens por página — máx 100 (padrão: 20)
search string opcional Busca por nome ou e-mail
isCompanyContact boolean opcional true = compartilhados com a empresa; false = pessoais
Resposta 200
{
  "totalElements": 12,
  "data": [
    {
      "id": "f1a2b3c4-0000-0000-0000-000000000001",
      "fullName": "Pedro Alves",
      "email": "pedro.alves@empresa.com.br",
      "phone": "+5511999887766",
      "isCompanyContact": true,
      "createdAt": "2026-03-15T10:00:00Z"
    }
  ]
}
POST /contacts Criar contato

Adiciona um contato ao livro de endereços.

Body

Campo Tipo Descrição
fullName string obrigatório Nome completo
email string obrigatório E-mail do contato
phone string opcional Telefone com DDD
isCompanyContact boolean opcional Tornar visível para todos os usuários da empresa (padrão: false)
Body de exemplo
{
  "fullName": "Pedro Alves",
  "email": "pedro.alves@empresa.com.br",
  "phone": "+5511999887766",
  "isCompanyContact": true
}
PUT /contacts/:id Atualizar contato

Atualiza nome, e-mail ou telefone de um contato existente.

Body

CampoTipoDescrição
fullNamestringopcionalNovo nome
emailstringopcionalNovo e-mail
phonestringopcionalNovo telefone
isCompanyContactbooleanopcionalAlterar visibilidade
Body de exemplo
{
  "phone": "+5511988776655",
  "isCompanyContact": false
}
DELETE /contacts/:id Excluir contato

Remove um contato do livro de endereços. Signatários de envelopes existentes não são afetados.

🔔 Webhook Domains

Registre endpoints para receber notificações em tempo real sobre eventos da plataforma.

Eventos disponíveis

ENVELOPE_FINISHED
Disparado quando todos os signatários concluem suas ações e o documento final é gerado.
ENVELOPE_CANCELLED
Disparado quando o envelope é cancelado pela empresa ou por expiração de prazo.
ENVELOPE_EXPIRED
Disparado quando o prazo de assinatura definido no envelope expira.
SIGNER_COMPLETED
Disparado individualmente quando cada signatário conclui sua assinatura.
ℹ️ Seu endpoint deve responder com HTTP 2xx em até 10 segundos. Falhas são registradas em logs mas não há retry automático.
GET /webhook-domains Listar webhooks registrados

Retorna todos os endpoints registrados com seus eventos subscritos e status ativo/inativo.

Resposta 200
{
  "totalElements": 1,
  "data": [
    {
      "id": "uuid",
      "domain": "https://meuapp.com.br/webhooks/assin",
      "description": "Endpoint principal de produção",
      "isActive": true,
      "createdAt": "2026-05-02T00:00:00Z",
      "eventSubscriptions": [
        { "eventType": "ENVELOPE_FINISHED" },
        { "eventType": "SIGNER_COMPLETED" }
      ]
    }
  ]
}
POST /webhook-domains Registrar webhook

Registra um endpoint para receber eventos. Você pode subscrever a um ou mais eventos por endpoint.

Body

Campo Tipo Descrição
data.domain string (URI) obrigatório URL HTTPS do endpoint que receberá os eventos
data.description string opcional Descrição interna do webhook
data.events string[] obrigatório Lista de eventos a subscrever
Body de exemplo
{
  "data": {
    "domain": "https://meuapp.com.br/webhooks/assin",
    "description": "Endpoint de produção",
    "events": [
      "ENVELOPE_FINISHED",
      "SIGNER_COMPLETED"
    ]
  }
}

Payload enviado ao seu endpoint

// POST https://meuapp.com.br/webhooks/assin
{
  "event": "ENVELOPE_FINISHED",
  "envelopeId": "uuid",
  "companyId": "uuid",
  "occurredAt": "2026-05-02T15:30:00Z",
  "data": { /* detalhes do evento */ }
}
PUT /webhook-domains/:id Atualizar webhook

Atualiza descrição, status ou lista de eventos. Enviar events substitui completamente a lista anterior.

Body

Campo Tipo Descrição
data.description string opcional Nova descrição
data.isActive boolean opcional Ativar ou pausar o webhook
data.events string[] opcional Nova lista completa de eventos
Body de exemplo
{
  "data": {
    "isActive": false,
    "events": ["ENVELOPE_FINISHED", "ENVELOPE_CANCELLED", "SIGNER_COMPLETED"]
  }
}
DELETE /webhook-domains/:id Remover webhook

Remove o webhook e cancela todas as subscrições de eventos associadas. Retorna 204 No Content.

Batches

Processamento em lote via planilha Excel. Crie centenas de envelopes de uma só vez a partir de templates e dados tabulares. O fluxo segue 5 etapas: criar o lote → vincular documentos → vincular signatários → vincular template + upload Excel → processar.

💡 Fluxo completo: POST /batchesPOST /batches-documentPOST /batches-signerPOST /batches-template/:batchId/:companyId → upload Excel → POST /batches-envelopes/:companyId/:batchId

1 — Lote (CRUD)

POST /batches Criar lote

Cria um novo lote. Após criar, vincule documentos, signatários e templates antes de processar.

Body

CampoTipoDescrição
data.namestringobrigatórioNome do lote
data.descriptionstringopcionalDescrição interna
data.companyIduuidobrigatórioID da empresa
Body de exemplo
{
  "data": {
    "name": "Folha de Pagamento Maio 2026",
    "description": "Contracheques de todos os colaboradores",
    "companyId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
  }
}
GET /batches/:companyId Listar lotes da empresa

Retorna todos os lotes da empresa.

Path params

ParâmetroTipoDescrição
companyIduuidID da empresa
Resposta 200
{
  "totalElements": 3,
  "data": [{ "id": "uuid", "name": "Folha Maio 2026", "status": "DRAFT" }]
}
DELETE /batches/:companyId/:batchId Excluir lote

Remove um lote em status DRAFT. Lotes já processados não podem ser excluídos.

2 — Documentos do lote

POST /batches-document Vincular documento ao lote

Associa um documento ao lote pelo alias — nome de referência usado para mapear o documento às variáveis do template.

Body

CampoTipoDescrição
data.batchIduuidobrigatórioID do lote
data.companyIduuidobrigatórioID da empresa
data.aliasstringobrigatórioNome de referência do documento no template
Body de exemplo
{
  "data": {
    "batchId":   "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "companyId": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
    "alias":     "contracheque"
  }
}
GET /batches-document Listar documentos do lote

Lista os documentos vinculados a um lote.

Query params

ParâmetroTipoDescrição
filters[batchId.equals]uuidobrigatórioID do lote
Resposta 200
{
  "totalElements": 1,
  "data": [
    {
      "id": "d1e2f3a4-0000-0000-0000-000000000001",
      "batchId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "alias": "contracheque",
      "documentId": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
      "createdAt": "2026-05-01T09:00:00Z"
    }
  ]
}
PUT /batches-document Atualizar documento do lote

Atualiza o alias ou documento associado ao lote.

Body

CampoTipoDescrição
data.iduuidobrigatórioID do batch-document
data.aliasstringopcionalNovo alias
Body de exemplo
{
  "data": {
    "id":    "d1e2f3a4-0000-0000-0000-000000000001",
    "alias": "holerite"
  }
}
DELETE /batches-document Remover documento do lote

Remove a associação entre um documento e o lote.

Body

CampoTipoDescrição
data.iduuidobrigatórioID do batch-document a remover
Body de exemplo
{
  "data": { "id": "d1e2f3a4-0000-0000-0000-000000000001" }
}

3 — Signatários do lote

POST /batches-signer Adicionar signatário ao lote

Adiciona um signatário ao lote. Use fixed=true para signatários fixos (aparecem em todos os envelopes) e fixed=false para variáveis (definidos linha a linha no Excel).

Body

CampoTipoDescrição
data.batchIduuidobrigatórioID do lote
data.fixedbooleanobrigatóriotrue = mesmo signatário em todos; false = varia por linha do Excel
data.signatureTypestringobrigatórioSIGN | APPROVE | WITNESS | CARBON_COPY
data.ordernumberopcional0 = paralelo; 1+ = sequencial
data.emailstringopcionalObrigatório se fixed=true
data.fullNamestringopcionalObrigatório se fixed=true
data.requirePersonalDocumentbooleanopcionalSolicitar documento pessoal (padrão: false)
data.requireEmailTokenbooleanopcionalSolicitar token por e-mail (padrão: false)
Body — signatário fixo (gerente que assina todos)
{
  "data": {
    "batchId":       "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "fixed":        true,
    "signatureType": "SIGN",
    "order":        2,
    "email":        "gerente@empresa.com.br",
    "fullName":     "Carlos Gerente"
  }
}
Body — signatário variável (colaborador de cada linha do Excel)
{
  "data": {
    "batchId":       "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "fixed":        false,
    "signatureType": "SIGN",
    "order":        1
  }
}
GET /batches-signer/:batchId Listar signatários do lote

Retorna todos os signatários (fixos e variáveis) configurados para o lote.

Resposta 200
{
  "totalElements": 2,
  "data": [
    {
      "id": "s1a2b3c4-0000-0000-0000-000000000001",
      "fixed": true,
      "signatureType": "SIGN",
      "order": 2,
      "fullName": "Carlos Gerente",
      "email": "gerente@empresa.com.br"
    },
    {
      "id": "s1a2b3c4-0000-0000-0000-000000000002",
      "fixed": false,
      "signatureType": "SIGN",
      "order": 1,
      "fullName": null,
      "email": null
    }
  ]
}
DELETE /batches-signer/:companyId/:batchId/:signerId Remover signatário do lote

Remove um signatário do lote.

4 — Templates do lote

POST /batches-template/:batchId/:companyId Vincular template ao lote

Associa um template ao lote. O template define os campos variáveis que serão preenchidos pelo Excel.

Body

CampoTipoDescrição
data.templateIduuidobrigatórioID do template a vincular
Body de exemplo
{
  "data": { "templateId": "3fa85f64-5717-4562-b3fc-2c963f66afa6" }
}
POST /batches-template/upload-excel/:batchId/:companyId/:templateId Upload da planilha Excel com os dados

Faz upload da planilha .xlsx com os dados de cada envelope. Cada linha gera um envelope. Os headers das colunas devem corresponder às chaves do template.

⚠️ Enviar como multipart/form-data com campo file contendo o .xlsx. Headers da planilha devem ser idênticos às chaves (key) do template.

Path params

ParâmetroTipoDescrição
batchIduuidID do lote
companyIduuidID da empresa
templateIduuidID do template vinculado ao lote
Exemplo cURL
curl -X POST "{BASE_URL}/v1/batches-template/upload-excel/:batchId/:companyId/:templateId" \
  -H "Authorization: Bearer sk_live_xxxx" \
  -H "Origin: https://seuapp.com.br" \
  -H "x-origin-with-label: web-app" \
  -F "file=@colaboradores.xlsx"
POST /batches-template/update-templates-signer/:batchId/:templateId Mapear colunas do Excel para signatários variáveis

Define qual coluna do Excel alimenta cada campo dos signatários variáveis. Por exemplo, a coluna "E-mail Corporativo" alimenta o campo email do signatário.

Body

CampoTipoDescrição
dataobjectobrigatórioMapeamento campoTemplate: headerExcel
Body de exemplo
{
  "data": {
    "nomeColaborador": "Nome Completo",
    "cpf":             "CPF",
    "salario":        "Salario Bruto",
    "email":          "E-mail Corporativo"
  }
}
GET /batches-template/:batchId/:companyId Listar templates do lote

Retorna os templates vinculados ao lote com seus campos mapeados.

Resposta 200
{
  "totalElements": 1,
  "data": [
    {
      "id": "t1a2b3c4-0000-0000-0000-000000000001",
      "templateId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "templateName": "Contrato Padrao CLT",
      "batchId": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d"
    }
  ]
}
GET /batches-template/list-templates-signer/:batchId Listar mapeamento de signatários por template

Retorna o mapeamento de colunas Excel para signatários variáveis de cada template do lote.

Resposta 200
[
  {
    "templateId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "signerId": "s1a2b3c4-0000-0000-0000-000000000002",
    "mapping": {
      "nomeColaborador": "Nome Completo",
      "cpf":             "CPF",
      "email":          "E-mail Corporativo"
    }
  }
]
DELETE /batches-template/:batchId/:companyId/:templateId Remover template do lote

Remove a associação entre um template e o lote.

5 — Processar

POST /batches-envelopes/:companyId/:batchId Processar lote — cria e lacra todos os envelopes

Dispara o processamento completo. Para cada linha do Excel: gera o documento pelo template, cria o envelope, adiciona documentos e signatários, lacra. Créditos são debitados aqui.

⚠️ O lote precisa ter documento, signatário e Excel carregado. O sistema debita 1 crédito por envelope gerado.

Path params

ParâmetroTipoDescrição
companyIduuidID da empresa
batchIduuidID do lote
Resposta 200
{
  "batchId": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
  "status": "PROCESSING",
  "totalEnvelopes": 250,
  "creditsDebited": 250,
  "startedAt": "2026-05-02T13:00:00Z"
}
POST /batches-envelopes/resend-validation/:batchId/:signerId Reenviar notificação de validação

Reenvia a notificação de validação para um signatário específico dentro do lote.

POST /batches-envelopes/resend-request/:batchId/:signerId Reenviar link de assinatura

Reenvia o link de assinatura para um signatário que ainda não assinou dentro do lote.