Criando um Documento
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:
mutation CreateDocumentMutation(
$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:
/*
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": "troque-esse-email-que-e-publico@tuamaeaquelaursa.com",
"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"
}]
}
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:
Caso você esteja em dúvida de como funciona o envio do documento para usar na sua integração, este repositório fornece mais informações e exemplos de como fazer o upload: https://github.com/jaydenseric/graphql-multipart-request-spec
Criando documento em Sandbox
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
// 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
"cc": [
// Envia emails quando o documento for assinado por todos os signatários
{ "email": "email-cc-1@tuamaeaquelaursa.com" },
{ "email": "email-cc-2@tuamaeaquelaursa.com" }
],
"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
},
"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": "troque-esse-email-que-e-publico@tuamaeaquelaursa.com", // 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": "troque-esse-email-que-e-publico-2@tuamaeaquelaursa.com", // 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"}]
}]
}
Atualizado
Isto foi útil?