Envelopes na API
Esta página descreve as ações que criam e acompanham envelopes: envelopes/criar, enviar, detalhe, listar, eventos, lembrar e cancelar. Os conceitos (papéis, ordem, prazo, situações) estão em Conceitos.
Nos exemplos, a chave está na variável de ambiente RAVISIGN_CHAVE e as respostas foram encurtadas onde indicado:
export RAVISIGN_CHAVE="rsg_..."
API="https://ravisign.com.br/api/v1"envelopes/criar#
POST, escopo envelopes.escrever. Cria um envelope e, com enviar: true, já o envia aos signatários. Cada
envelope criado conta no limite mensal do plano (402 plano_limite quando esgotado).
O documento vem de UMA destas formas (nenhuma: 400 parametro_obrigatorio no campo documento; mais de uma: 400
parametro_invalido no campo documento):
| Forma | Campos |
|---|---|
| PDF em base64 | pdf_base64: o PDF codificado em base64 (até 20 MB de PDF, cerca de 27 MB em base64) |
| Upload de arquivo | arquivo: o PDF enviado em multipart/form-data (até 20 MB) |
| Modelo | modelo_id + variaveis (objeto { "chave": "valor" }, só nos modelos do tipo html; nesses, o PDF é gerado em seguida, em segundo plano) |
Demais campos:
| Campo | Obrigatório | Descrição |
|---|---|---|
titulo |
sim | até 190 caracteres; também dá nome ao documento (no upload, vale o nome do arquivo enviado) |
signatarios |
sim | lista de 1 a 50 signatários (tabela abaixo); ao menos um que não seja observador |
mensagem |
não | texto do convite, até 2000 caracteres |
ordem |
não | paralela (padrão: todos assinam ao mesmo tempo) ou sequencial (um grupo por vez, pela ordem de cada signatário; sem ordem, vale a posição na lista) |
nivel |
não | avancada (padrão) ou simples |
idioma |
não | pt, en ou es; padrão: idioma da conta |
expira_em |
não | data e hora limite (de 1 hora a 365 dias a partir de agora) |
prazo_dias |
não | alternativa ao expira_em: dias até expirar (1 a 365; padrão da conta: 30) |
lembrete_a_cada_horas |
não | lembrete automático por e-mail a quem falta assinar (0 desliga; até 720; padrão da conta: 48) |
referencia_externa |
não | seu identificador (pedido, contrato, protocolo), até 190 caracteres; filtrável no listar |
enviar |
não | true envia já; false (padrão) deixa em rascunho para envelopes/enviar |
Cada signatário:
| Campo | Obrigatório | Descrição |
|---|---|---|
nome |
sim | nome completo, até 190 caracteres |
email |
conforme o canal | obrigatório, exceto no canal conversa |
telefone |
não | com DDD (e código do país, se for de fora do Brasil); quando informado, precisa ser válido |
cpf_cnpj |
não | validado pelos dígitos verificadores; registrado no manifesto, nunca devolvido pela API |
papel |
não | signatario (padrão), testemunha, aprovador ou observador (acompanha, não assina) |
ordem |
não | posição na ordem sequencial, de 1 a 50 (mesmo número = assinam juntos) |
canal_otp |
não | canal do código de confirmação: email ou conversa (padrão conversa em contas vindas do ChatISP; nas demais, o canal padrão configurado na conta, que de início é email) |
idioma |
não | idioma da página e dos e-mails desse signatário |
origem_conversa |
não | objeto com até 10 pares chave e valor que identificam a conversa de origem (exemplo: conversa_id, conexao, protocolo); vai para a trilha sem campos de dado pessoal |
Com pdf_base64 (JSON):
curl -sS "$API/envelopes/criar" \
-H "Authorization: Bearer $RAVISIGN_CHAVE" \
-H "Content-Type: application/json" \
-d @- <<EOF
{
"titulo": "Contrato de Fibra",
"mensagem": "Assine, por favor.",
"pdf_base64": "$(base64 -w0 contrato.pdf)",
"signatarios": [
{ "nome": "Maria Souza", "telefone": "+55 11 98765-4321", "canal_otp": "conversa",
"cpf_cnpj": "529.982.247-25", "origem_conversa": { "conversa_id": "8812" } },
{ "nome": "Carlos Lima", "email": "carlos@provedor.com.br", "papel": "testemunha", "canal_otp": "email" }
],
"referencia_externa": "PEDIDO-1042",
"prazo_dias": 7,
"lembrete_a_cada_horas": 24,
"enviar": true
}
EOF{
"ok": true,
"envelope": {
"uuid": "157b650a-75e0-4eaa-a32c-b92b5a432ee4",
"titulo": "Contrato de Fibra",
"mensagem": "Assine, por favor.",
"situacao": "enviado",
"ordem": "paralela",
"nivel": "avancada",
"idioma": "pt",
"origem": "chatisp",
"referencia_externa": "PEDIDO-1042",
"expira_em": "2026-10-16T20:28:25-03:00",
"lembrete_a_cada_horas": 24,
"criado_em": "2026-10-09T20:28:25-03:00",
"atualizado_em": "2026-10-09T20:28:25-03:00",
"concluido_em": null,
"cancelado_em": null,
"total_signatarios": 2,
"assinados": 0,
"documento": {
"nome": "Contrato de Fibra.pdf",
"paginas": 1,
"tamanho": 48213,
"pendente": false,
"hash_original": "2bcde2cdcc9404896632750d862110efa678490d6dcebea450fd5e66ff9e8089",
"hash_final": null,
"disponivel": { "original": true, "final": false, "manifesto": false }
},
"signatarios": [
{
"uuid": "7eb90fca-1488-4a17-84c4-0b01f4acb9f1",
"nome": "Maria Souza",
"email": null,
"telefone": "***4321",
"papel": "signatario",
"ordem": 1,
"canal_otp": "conversa",
"situacao": "notificado",
"link_disponivel": true,
"notificado_em": "2026-10-09T20:28:25-03:00",
"assinado_em": null,
"recusado_em": null
},
{
"uuid": "3d04a71b-34e1-4b22-95b7-b45caae80322",
"nome": "Carlos Lima",
"email": "c***@provedor.com.br",
"telefone": null,
"papel": "testemunha",
"ordem": 1,
"canal_otp": "email",
"situacao": "pendente",
"link_disponivel": true,
"notificado_em": null,
"assinado_em": null,
"recusado_em": null
}
]
}
}origem:chatisppara contas vindas do ChatISP,apipara as demais.hash_original: SHA-256 do PDF enviado. Guarde-o: é a prova de qual documento foi assinado.link_disponivel: o signatário já pode abrir o link de assinatura (envelope enviado e, na ordem sequencial, a vez dele).- No canal
email, o convite sai em segundo plano logo após o envio; o signatário passa anotificado(comnotificado_em) quando o e-mail sai. No canalconversa, quem entrega o convite é o integrador, e o signatário já ficanotificadono envio.
Com upload de arquivo (multipart):
curl -sS "$API/envelopes/criar" \
-H "Authorization: Bearer $RAVISIGN_CHAVE" \
-F titulo="Contrato de Fibra" \
-F arquivo=@contrato.pdf \
-F 'signatarios=[{"nome":"Maria Souza","email":"maria@cliente.com.br"}]' \
-F enviar=trueA resposta tem o mesmo formato; o nome do documento é o nome do arquivo enviado.
Com modelo:
curl -sS "$API/envelopes/criar" \
-H "Authorization: Bearer $RAVISIGN_CHAVE" \
-H "Content-Type: application/json" \
-d '{
"titulo": "Adesão Fibra 500",
"modelo_id": 1,
"variaveis": { "cliente": "Ana Pereira", "plano": "Fibra 500" },
"signatarios": [ { "nome": "Ana Pereira", "email": "ana@cliente.com.br" } ],
"enviar": true
}'{
"ok": true,
"envelope": {
"uuid": "46076565-92bc-4605-99e4-7d47464373f1",
"titulo": "Adesão Fibra 500",
"situacao": "rascunho",
"documento": {
"nome": "Adesão Fibra 500.pdf",
"paginas": null,
"tamanho": null,
"pendente": true,
"hash_original": null,
"hash_final": null,
"disponivel": { "original": false, "final": false, "manifesto": false }
}
}
}(resposta encurtada) Com modelo do tipo html, o PDF é gerado logo depois da resposta: documento.pendente fica
true e o envelope continua rascunho até o PDF ficar pronto. Com enviar: true, o envio acontece sozinho nesse
momento (o webhook envelope.enviado avisa); com enviar: false, chame envelopes/enviar depois que pendente
virar false. Modelo do tipo pdf se comporta como o envio do PDF: nada fica pendente.
Os valores das variáveis são inseridos como texto (sem HTML), até 5000 caracteres cada. Erros nas variáveis apontam
o campo variaveis.<chave>: 400 modelo_variavel_faltando (obrigatória ausente ou vazia) e 400 valor_invalido
(valor que não é texto ou longo demais).
envelopes/enviar#
POST, escopo envelopes.escrever. Parâmetro envelope_uuid. Envia um rascunho cujo PDF já está pronto. Devolve
o envelope completo (formato do criar).
curl -sS "$API/envelopes/enviar" -H "Authorization: Bearer $RAVISIGN_CHAVE" \
-H "Content-Type: application/json" -d '{"envelope_uuid":"b0c9ce2f-e6b2-4395-af6e-336be8e320c1"}'{ "ok": true, "envelope": { "uuid": "b0c9ce2f-e6b2-4395-af6e-336be8e320c1", "situacao": "enviado" } }(resposta encurtada) Erros: 409 situacao_invalida (não é rascunho), 409 documento_pendente (PDF do modelo ainda
em preparação), 400 prazo_invalido no campo expira_em (o rascunho vence em menos de 1 hora: crie outro envelope).
envelopes/detalhe#
GET, escopo envelopes.ler. Parâmetro envelope_uuid. Envelope completo (formato do criar) mais eventos
resumidos (tipo, data e signatário).
curl -sS -G "$API/envelopes/detalhe" -H "Authorization: Bearer $RAVISIGN_CHAVE" \
-d envelope_uuid=157b650a-75e0-4eaa-a32c-b92b5a432ee4{
"ok": true,
"envelope": {
"uuid": "157b650a-75e0-4eaa-a32c-b92b5a432ee4",
"situacao": "concluido",
"concluido_em": "2026-10-09T20:31:02-03:00",
"total_signatarios": 2,
"assinados": 2,
"documento": {
"nome": "Contrato de Fibra.pdf",
"hash_original": "2bcde2cdcc9404896632750d862110efa678490d6dcebea450fd5e66ff9e8089",
"hash_final": "7ced225baf8e20d34cb09a713c4454a632f749ecf31645aa3a640e1660e2a880",
"disponivel": { "original": true, "final": true, "manifesto": false }
},
"signatarios": [
{ "uuid": "7eb90fca-1488-4a17-84c4-0b01f4acb9f1", "nome": "Maria Souza", "situacao": "assinado",
"assinado_em": "2026-10-09T20:30:11-03:00" }
],
"eventos": [
{ "tipo": "envelope_criado", "ocorrido_em": "2026-10-09T23:28:25.619105Z", "signatario_uuid": null },
{ "tipo": "envelope_enviado", "ocorrido_em": "2026-10-09T23:28:25.619651Z", "signatario_uuid": null },
{ "tipo": "assinado", "ocorrido_em": "2026-10-09T23:30:11.648572Z", "signatario_uuid": "7eb90fca-1488-4a17-84c4-0b01f4acb9f1" },
{ "tipo": "concluido", "ocorrido_em": "2026-10-09T23:31:02.676083Z", "signatario_uuid": null }
]
}
}(resposta encurtada)
envelopes/listar#
GET, escopo envelopes.ler. Envelopes da conta, do mais recente para o mais antigo, sem signatários nem
documento (use detalhe para isso). Filtros opcionais:
| Parâmetro | Descrição |
|---|---|
situacao |
uma ou mais situações separadas por vírgula (enviado,em_andamento) ou lista JSON |
referencia_externa |
igualdade exata |
criado_de, criado_ate |
período de criação; só a data no criado_ate vale o dia inteiro |
pagina, limite |
paginação (limite de 1 a 100, padrão 50) |
curl -sS -G "$API/envelopes/listar" -H "Authorization: Bearer $RAVISIGN_CHAVE" \
--data-urlencode "situacao=enviado,em_andamento" -d criado_de=2026-10-01 -d limite=20{
"ok": true,
"envelopes": [
{
"uuid": "157b650a-75e0-4eaa-a32c-b92b5a432ee4",
"titulo": "Contrato de Fibra",
"mensagem": "Assine, por favor.",
"situacao": "em_andamento",
"ordem": "paralela",
"nivel": "avancada",
"idioma": "pt",
"origem": "chatisp",
"referencia_externa": "PEDIDO-1042",
"expira_em": "2026-10-16T20:28:25-03:00",
"lembrete_a_cada_horas": 24,
"criado_em": "2026-10-09T20:28:25-03:00",
"atualizado_em": "2026-10-09T20:30:11-03:00",
"concluido_em": null,
"cancelado_em": null,
"total_signatarios": 2,
"assinados": 1
}
],
"paginacao": { "pagina": 1, "limite": 20, "total": 1, "paginas": 1 }
}envelopes/eventos#
GET, escopo envelopes.ler. Parâmetro envelope_uuid. A trilha de auditoria do envelope, em ordem, com os
dados de cada evento e o hash do encadeamento (cada evento sela o anterior). Dados pessoais, IP e navegador não
saem por aqui.
curl -sS -G "$API/envelopes/eventos" -H "Authorization: Bearer $RAVISIGN_CHAVE" \
-d envelope_uuid=157b650a-75e0-4eaa-a32c-b92b5a432ee4{
"ok": true,
"envelope_uuid": "157b650a-75e0-4eaa-a32c-b92b5a432ee4",
"eventos": [
{
"tipo": "otp_enviado",
"ocorrido_em": "2026-10-09T23:28:25.627905Z",
"signatario_uuid": "7eb90fca-1488-4a17-84c4-0b01f4acb9f1",
"dados": {
"canal": "conversa",
"conversa": { "conversa_id": "8812" },
"origem": "integrador",
"validade_minutos": 30
},
"hash": "97d980c7d800fa02ddbc2362f9f03eb29612b8bde7f3e21707423ef6a409b508"
},
{
"tipo": "concluido",
"ocorrido_em": "2026-10-09T23:31:02.676083Z",
"signatario_uuid": null,
"dados": {
"hash_final": "7ced225baf8e20d34cb09a713c4454a632f749ecf31645aa3a640e1660e2a880",
"total_assinaturas": 2
},
"hash": "5b2832551f5e07897051330d6c2101526ad37151b3119327f4552a0c846a9bba"
}
]
}(resposta encurtada; os tipos de evento estão na Referência)
envelopes/lembrar#
POST, escopo envelopes.escrever. Parâmetro envelope_uuid. Reenvia o convite por e-mail a quem está na vez e
ainda não respondeu. Quem recebeu lembrete na última hora fica de fora (conta em ignorados); signatários do canal
conversa não recebem e-mail (o lembrete na conversa é do integrador).
curl -sS "$API/envelopes/lembrar" -H "Authorization: Bearer $RAVISIGN_CHAVE" \
-H "Content-Type: application/json" -d '{"envelope_uuid":"157b650a-75e0-4eaa-a32c-b92b5a432ee4"}'{ "ok": true, "envelope_uuid": "157b650a-75e0-4eaa-a32c-b92b5a432ee4", "enfileirados": 1, "ignorados": 0 }Só para envelopes enviado ou em_andamento (fora disso, 409 situacao_invalida; já vencido, 409 envelope_vencido).
envelopes/cancelar#
POST, escopo envelopes.escrever. Parâmetros envelope_uuid e motivo (obrigatório, até 500 caracteres;
fica registrado, não volta pela API). Cancela rascunho, enviado ou em andamento; o envelope cancelado continua
contando no limite do mês. O webhook envelope.cancelado só é emitido para envelopes que já tinham sido enviados.
curl -sS "$API/envelopes/cancelar" -H "Authorization: Bearer $RAVISIGN_CHAVE" \
-H "Content-Type: application/json" \
-d '{"envelope_uuid":"b0c9ce2f-e6b2-4395-af6e-336be8e320c1","motivo":"Cliente desistiu da instalação"}'{
"ok": true,
"envelope": {
"uuid": "b0c9ce2f-e6b2-4395-af6e-336be8e320c1",
"situacao": "cancelado",
"cancelado_em": "2026-10-09T20:40:00-03:00"
}
}(resposta encurtada) Erros: 400 motivo_obrigatorio (vazio ou com mais de 500 caracteres), 409 situacao_invalida
(já concluído, recusado, expirado ou cancelado).
Dica em vez de consultar
envelopes/detalherepetidamente para saber se um envelope foi assinado, cadastre um webhook com o eventoenvelope.concluido.
Fale com o suporte da Ravi Systems pelo e-mail abaixo.