Como criar um documento/enviar um documento para assinatura.
A criação de documentos difere um pouco das outras mutations por ter o upload de um arquivo. Primeiramente, vamos precisar escrever a mutation:
mutationCreateDocumentMutation( $document: DocumentInput!, # Definição das variáveis $document, $signers: [SignerInput!]!, # $signers e $file, com seus respectivos $file: Upload! # tipos. (Os "!" indicam que são) { # parâmetros obrigatórios) createDocument( document: $document, # Passa para os parâmetros da mutation o signers: $signers, # valor das variáveis. file: $file, # organization_id: 123, # OPCIONAL: Cria em outras organizações do usuário, senão usa a atual folder_id: "a1b2c3" # OPCIONAL: Cria arquivado em uma pasta ) { id name refusable sortable created_at signatures { public_id name email created_at action { name } link { short_link } user { id name email } } }}
Após, precisamos dos valores das variáveis definidas na mutation em um JSON:
Percebeu que não foi colocado nenhum valor para a variável $file? Pois é, como é realizado o upload desse arquivo, a requisição precisa ser enviada como multipart/form-data, dessa forma o arquivo precisa ser um pouco diferente. Você pode fazer isso direto no Altair:
Nossa API também suporta o envio de documento de teste, que não consomem créditos de documentos, assim facilitando a integração para quem ainda não adquiriu um plano com documentos ilimitados. Para saber como faz acesse nossa página de sandbox.
Mais opções
Posicionar campos de assinatura "positions"
Como mostrado no exemplo acima, para adicionar campos de assinatura ao criar o documento você precisa adicionar o atributo "positions".
O "x" é posição horizontal de 0 a 100%
O "y" é posição vertical de 0 a 100%
O "z" é o número da página começando no 1
O "element" é o tipo de assinatura:
"SIGNATURE": Assinatura
"NAME": Nome do signatário
"INITIALS": Rúbrica
"DATE": Data de assinatura
"CPF": CPF do signatário
Pra saber quais posições passar no x e y, você pode criar um documento de exemplo no painel do Autentique e buscar as posições ao resgatar o documento usando "positions":
Exigir verificação por SMS e/ou documento com foto "security_verifications"
Para exigir dos signatários a verificação por SMS e/ou documento com foto, é preciso adicionar o atributo "security_verifications" no signatário que você deseja que essas verificações sejam necessárias. Lembrando que você deve consultar no painel o custo de créditos de verificação adicionais necessários.
O "type" é o tipo de verificação:
"SMS": Validação por SMS ("verify_phone" é opcional e exige celular especificado)
"MANUAL": Exigir documento com foto (Aprovação manual)
"UPLOAD": Exigir documento com foto (Documento com foto)
"LIVE": Exigir documento com foto (Documento, selfie e prova de vida)
"PF_FACIAL": Exigir documento com foto (Biometria SERPRO)
"BIOMETRIC_AND_TEXT_EXTRACTION": Exigir documento com foto (Documento com foto e facematch)
Apesar de ser possível ter múltiplas verificações para o mesmo signatário, dentre as seguintes opções somente é possível escolher uma delas por signatário: MANUAL, UPLOAD, LIVE e PF_FACIAL.
Quando utilizar os tipos UPLOAD, LIVE, PF_FACIAL e BIOMETRIC_AND_TEXT_EXTRACTION , há o comportamento padrão de serem alterados para MANUAL quando o signatário exceder a quantidade máxima de tentativas no processo de validação documental.
Para desativar esse comportamento é necessário utilizar o parâmetro fallback_behavior, que acusará falha no documento e o rejeitará automaticamente.
Criar documento a partir de modelo
Não há uma forma na API de você conseguir usar os modelos do painel para criar documentos, porém você consegue fazer algo parecido à partir do seu código:
Criar um modelo fixo em HTML na máquina, demarcando os lugares com variáveis para substituir por valores. (Ex: "Eu, $NomeSignatario$ aceito esse contrato")
Por código, duplicar esse HTML e nessa duplicata, substituir os campos de variáveis pelos valores reais. ( Ex: $NomeSignatario$ => Jorge Silva )
Enviar esse arquivo HTML com os valores substituídos para a nossa API, através da mutation createDocument, igual como já funciona para outros tipos de arquivos
Exemplo de criação de documento com NodeJS
Se você usa o Postman, você pode gerar esses exemplos à partir da collection para o Postman disponibilizada aqui na documentação.
Desse exemplo é só substituir o token de API, email do signatário e caminho para o arquivo.
Exemplo de criação de documento com PHP
Se você usa o Postman, você pode gerar esses exemplos à partir da collection para o Postman disponibilizada aqui na documentação.
Desse exemplo é só substituir o token de API, email do signatário e caminho para o arquivo.
Exemplo de criação de documento com Python3
Se você usa o Postman, você pode gerar esses exemplos à partir da collection para o Postman disponibilizada aqui na documentação.
Desse exemplo é só substituir o token de API, email do signatário e caminho para o arquivo.
Exemplo de criação de documento com C#
Se você usa o Postman, você pode gerar esses exemplos à partir da collection para o Postman disponibilizada aqui na documentação.
Desse exemplo é só substituir o token de API, email do signatário e caminho para o arquivo.
Você pode conferir o que é cada um desses parâmetros direto na documentação completa da API GraphQL, no menu Docs do Altair. Se você não sabe como fazer isso, confira o nosso tutorial em Usando o Altair.
/*
Abaixo, um signatário receberá o link de assinatura por email,
por ter sido passado o "email" e, para o que passou "name",
será retornado o atributo "link" no documento com o link de
assinatura.
Quando usado "phone", existirão duas possíveis formas de envio,
especificadas no uso do atributo "delivery_method". Este atributo
possui as opções "DELIVERY_METHOD_WHATSAPP" para enviar por Whatsapp
e "DELIVERY_METHOD_SMS" para enviar por SMS.
*/
{
"document": {
"name": "Contrato de marketing"
},
"signers": [{
"email": "[email protected]",
"action": "SIGN"
}, {
"name": "Ronaldo Fuzinato",
"action": "SIGN"
}, {
"phone": "+5554999999999",
"delivery_method": "DELIVERY_METHOD_WHATSAPP",
"action": "SIGN"
}, {
"phone": "+5554999999998",
"delivery_method": "DELIVERY_METHOD_SMS",
"action": "SIGN"
},
/*
Também há como gerar links de assinatura vinculado a um numero de celular
ou para um email. Assim o link gerado só pode ser assinado pelo endereço associado.
*/
{
"name": "João Maria",
"phone": "+5554999999998",
"delivery_method": "DELIVERY_METHOD_LINK",
"action": "SIGN"
},{
"name": "Maria João",
"email": "[email protected]",
"delivery_method": "DELIVERY_METHOD_LINK",
"action": "SIGN"
}
]
}
// IMPORTANTE:
// - Se você copiar esse JSON, remova os comentários antes de usar
// - Alguns dos atributos abaixo não irão funcionar sem possuir um plano corporativo
// - Alguns dos atributos abaixo irão consumir créditos de verificação adicional
{
"document": {
"name": "Contrato de marketing",
"message": "Mensagem customizada enviada para os emails dos signatários",
"reminder": "WEEKLY", // Lembrete de assinatura semanal. DAILY para diário
"sortable": true, // Signatários assinam na ordem do array "signers"
"footer": "BOTTOM", // Adiciona rodapé. Aceita também os valores LEFT e RIGHT
"refusable": true, // Permite recusa do documento
"qualified": true, // Ativa assinatura qualificada, usando certificados
"scrolling_required": true, // Só permite a assinatura do documento caso o signatário tiver rolado toda a página
"stop_on_rejected": true, // Impede que outras pessoas assinem quando recusado
"new_signature_style": true, // Ativa novos campos de assinatura
"show_audit_page": false, // Evita criar a última página de auditoria em documentos com "new_signature_style": true
"ignore_cpf": true, // Remove obrigatoriedade de preencher CPF para assinar e removere qualquer referência a CPF na interface da plataforma
"ignore_birthdate": true // Remove obrigatoriedade de preencher a data de nascimento e remove qualquer referencia da data de nascimento na interface da plataforma
"email_template_id": 1234, // Usa modelo de email específico, pelo ID do mesmo
"deadline_at": "2023-11-24T02:59:59.999Z", // Bloqueia assinaturas após data
"reply_to": "[email protected]", //Define o endereço de e-mail para o qual as respostas devem ser enviadas.
"cc": [
// Envia emails quando o documento for assinado por todos os signatários
{ "email": "[email protected]" },
{ "email": "[email protected]" }
],
"expiration": {
// Envia um lembrete em uma quantidade de dias "days_before antes do
// vencimento do documento informada no "notify_at"
"days_before": 7,
"notify_at": "20/01/2026"
},
"configs": {
"notification_finished": true, // Envia um email notificando todos os signatários que o documento foi assinado por todas as partes
"notification_signed": true, // Envia um email ao signatário notificando que ele assinou o documento
"signature_appearance": "ELETRONIC", // Força a aparência da assinatura, pode ser: DRAW, HANDWRITING, ELETRONIC, IMAGE
"keep_metadata": true, // Mantém os metadados do PDF em assinatura qualificada
"lock_user_data": true, // Mantém os dados do usuário desatualizados, mostrando os que foram usados ao assinar
"pdfa": true // Mantem a versão e o tipo do PDF/A anexado.
// Quanto "pdfa" ativo, modifica o parâmetro new_signature_style para true.
// Obs.: Não converte um documento para PDF/A.
},
"locale": {
"country": "BR", // Qualquer país no formato ISO3166, se não informado, assume-se `BR`
// *IMPORTANTE* A criação de documentos não brasileiros possui os seguintes pontos:
// - Signatários com método de envio SMS não são suportados. Nesses casos,
// a requisição retorna o erro: `sms_delivery_not_allowed_on_foreign_documents`;
// - Os campos `new_signature_style` e `ignore_cpf` são marcados como `true`;
// - Elementos de CPF posicionados nas páginas do documento são ignorados;
// - Verificações adicionais do SERPRO e via SMS são ignoradas.
"language": "pt-BR", // Pode ser: `pt-BR` ou `en-US`, se não informado, assume-se `pt-BR`
"timezone": "America/Sao_Paulo", // DateTimeZone com todas as timezones, se não informado, assume-se `America/Sao_Paulo`
// Uma lista completa pode ser encontrada em: https://www.php.net/manual/en/datetimezone.listidentifiers.php
"date_format": "DD_MM_YYYY", // Enum, pode ser: DD_MM_YYYY ou MM_DD_YYYY, se não informado, assume-se `DD_MM_YYYY`
}
},
"signers": [{
"email": "[email protected]", // Envia email
"action": "SIGN", // Assinar
"configs": { "cpf": "12345678900" }, // Valida o CPF do signatário
"security_verifications": [
// Exigir validação por SMS ("verify_phone" é opcional):
{ "type": "SMS", "verify_phone": "+5554999999999" },
// Exigir documento com foto (Aprovação manual):
{ "type": "MANUAL" }
],
// Posiciona campos de assinatura:
"positions": [{"x": "5.0", "y": "90.0", "z": 1, "element": "SIGNATURE"}]
}, {
"name": "Ronaldo Fuzinato", // Recebe link de assinatura para enviar
"action": "SIGN_AS_A_WITNESS", // Assinar como testemunha
// Exigir documento com foto (Documento com foto):
"security_verifications": [{ "type": "UPLOAD" }],
// Posiciona campos para nome do signatário:
"positions": [{"x": "75.0", "y": "90.0", "z": 1, "element": "NAME"}]
}, {
"email": "[email protected]", // Envia email
"action": "APPROVE", // Aprovar
// Exigir documento com foto (Documento, selfie e prova de vida):
"security_verifications": [{ "type": "LIVE" }],
// Posiciona campos de rúbrica:
"positions": [{"x": "25.0", "y": "90.0", "z": 1, "element": "INITIALS"}]
}, {
"phone": "+5521999999999",
"delivery_method": "DELIVERY_METHOD_SMS", // Envia SMS para "phone"
"action": "RECOGNIZE", // Reconhecer
// Exigir documento com foto (Biometria SERPRO):
"security_verifications": [{ "type": "PF_FACIAL" }],
// Posiciona campos de data de assinatura:
"positions": [{"x": "55.0", "y": "90.0", "z": 1, "element": "DATE"}]
}, {
"phone": "+5521999999998",
"delivery_method": "DELIVERY_METHOD_WHATSAPP", // Envia Whatsapp para "phone"
"action": "SIGN", // Assinar
// Posiciona campos de CPF:
"positions": [{"x": "55.0", "y": "90.0", "z": 1, "element": "CPF"}]
}]
}