Login
GET /flow/restful/application/login?validity=900
Autentica uma conta Flow habilitada para email e senha. Uma conta criada apenas por login social pode precisar de configuração própria para utilizar a API.
| Header | Valor |
|---|
| credentials | Basic <Base64(email:senha)>. Codificar a concatenação do email, dois-pontos e senha; não enviar esse valor em Authorization. |
| Query parameter | Tipo e obrigatoriedade | Descrição |
|---|
| validity | Inteiro, opcional | Duração solicitada em segundos. Padrão documentado: 900; mínimo: 900; máximo: 86400. Usar a duração efetivamente retornada para calcular a expiração. |
Resposta de sucesso — HTTP 200
| Campo | Descrição |
|---|
| status | Resultado da operação, conforme o envelope de aplicação. |
| access_token | Token textual a conservar como segredo. |
| validity | Validade efetiva em segundos, como inteiro; não é uma string com sufixo s. |
{
"status": {
"code": 100,
"name": "SUCCESS",
"detail": "Operação realizada com sucesso"
},
"access_token": "<token>",
"validity": 900
}
Erros de aplicação
| Nome | Código de aplicação | Descrição |
|---|
| INVALID_CREDENTIALS | 300 | Credencial inválida ou vazia. |
Nas chamadas protegidas, INVALID_ACCESS_TOKEN (700) indica token inválido e EXPIRED_ACCESS_TOKEN (701) indica token expirado, conforme o contrato. Corrigir a autenticação sem recriar operações já aceitas.
ModelsList
GET /flow/restful/application/models
Lista os modelos visuais da conta. Consultar os modelos existentes antes de cadastrar outro.
| Header | Valor |
|---|
| access_token | Bearer <token> — token recebido no login. |
Resposta de sucesso — HTTP 200
| Campo | Descrição |
|---|
| status | Resultado da operação. |
| signature_model_list | Array de objetos com id textual e objeto interno SignatureModel, respeitando maiúsculas e minúsculas. Não há campos do modelo diretamente ao lado de id. |
{
"status": {
"code": 100,
"name": "SUCCESS",
"detail": "Operação realizada com sucesso"
},
"signature_model_list": [
{
"id": "123",
"SignatureModel": {
"name": "Modelo do integrador",
"model_type": "TEXT_ONLY",
"height": 75,
"width": 150,
"custom_text": "Assinado digitalmente por:",
"custom_text_name": true,
"custom_text_cpf": true,
"custom_text_date": true,
"image_position": "LEFT",
"text_font": "HELVETICA",
"text_size": 6,
"text_padding": 5,
"text_alignment": "LEFT"
}
}
]
}
Falhas de autenticação seguem o tratamento geral. Os campos de cada SignatureModel são descritos em RegisterModel.
RegisterModel
POST /flow/restful/application/register-signature-model
Cadastra uma configuração de apresentação da assinatura no PDF. Tipos disponíveis: IMAGE_ONLY (imagem), TEXT_ONLY (texto) e IMAGE_WITH_TEXT (imagem e texto). Conferir a configuração e a apresentação final no fluxo escolhido.
| Header | Valor |
|---|
| access_token | Bearer <token> — token recebido no login. |
| Content-Type | application/json |
Corpo JSON
| Campo | Tipo, limites e padrão documentado |
|---|
| name | String obrigatória e não vazia; nome do modelo. |
| model_type | Enum opcional: IMAGE_ONLY, TEXT_ONLY, IMAGE_WITH_TEXT. Padrão: IMAGE_WITH_TEXT. |
| height | Inteiro opcional, altura em pontos; mínimo 50; padrão 75. |
| width | Inteiro opcional, largura em pontos; mínimo 100; padrão 150. |
| custom_text | String opcional; texto customizado. Padrão: Assinado digitalmente por:. |
| custom_text_name | Booleano opcional; exibir nome do signatário. Padrão: true. |
| custom_text_cpf | Booleano opcional; exibir CPF do signatário. Padrão: true. |
| custom_text_date | Booleano opcional; exibir data da assinatura. Padrão: true. |
| image_position | Enum opcional: LEFT, RIGHT, TOP, BOTTOM, BACKGROUND, NONE. Padrão: LEFT. |
| text_font | Enum opcional, fonte do texto: HELVETICA, TIMES_ROMAN, COURIER. Padrão: HELVETICA. |
| text_size | Inteiro opcional, tamanho do texto; mínimo 1; padrão 6. |
| text_padding | Inteiro opcional, espaçamento do texto; mínimo 0; padrão 5. |
| text_alignment | Enum opcional: LEFT, RIGHT, CENTER. Padrão: LEFT. |
Omitir campos opcionais para utilizar os padrões documentados; enviar string vazia não equivale a omitir. Os nomes corretos são text_size, text_alignment e BOTTOM.
{
"name": "Modelo do integrador",
"model_type": "TEXT_ONLY",
"width": 150,
"height": 75,
"text_size": 6,
"text_alignment": "LEFT"
}
Resposta de sucesso — HTTP 201
| Campo | Descrição |
|---|
| status | Resultado da operação: 100/SUCCESS. |
| signature_model | Objeto com id textual e configuração aninhada em SignatureModel. |
{
"status": {
"code": 100,
"name": "SUCCESS",
"detail": "Operação realizada com sucesso"
},
"signature_model": {
"id": "123",
"SignatureModel": {
"name": "Modelo do integrador",
"model_type": "TEXT_ONLY",
"height": 75,
"width": 150,
"custom_text": "Assinado digitalmente por:",
"custom_text_name": true,
"custom_text_cpf": true,
"custom_text_date": true,
"image_position": "LEFT",
"text_font": "HELVETICA",
"text_size": 6,
"text_padding": 5,
"text_alignment": "LEFT"
}
}
}
Persistir o ID e reutilizar o modelo. Ao preencher visual_signature.signature_model_id, converter o ID textual para inteiro int64 somente após validar dígitos, intervalo e ausência de perda de precisão. Em JavaScript, não converter IDs grandes para Number sem esse cuidado.
Erros de aplicação
| Nome | Código de aplicação | Descrição |
|---|
| INVALID_MODEL_NAME | 200 | Nome vazio ou não informado. Retorno observado: HTTP 400. |
| DUPLICATE_MODEL_NAME | 201 | Nome já utilizado por outro modelo da conta. |
| MODEL_TYPE_INVALID | 203 | Tipo de modelo inválido. |
| IMAGE_POSITION_INVALID | 204 | Posição da imagem inválida. |
| TEXT_FONT_INVALID | 205 | Fonte inválida. |
| TEXT_ALIGNMENT_INVALID | 206 | Alinhamento do texto inválido. |
Upload
POST /flow/restful/application/upload
Enviar um PDF por chamada, antes de criar o processo. Preparar o arquivo final antes do envio; alterações posteriores no conteúdo exigem uma nova operação deliberada.
| Header | Valor |
|---|
| access_token | Bearer <token> — token recebido no login. |
| Content-Type | multipart/form-data; boundary=.... Deixar a biblioteca HTTP compor o boundary e o corpo. |
| Campo multipart | Descrição |
|---|
| file | Obrigatório. Bytes do PDF a enviar no upload, com nome de arquivo. |
Resposta de sucesso — HTTP 200
| Campo | Descrição |
|---|
| status | Resultado da operação. |
| document_id | Identificador textual do documento. Persistir exatamente o valor recebido; não é um hash CSS nem uma assinatura. |
{
"status": {
"code": 100,
"name": "SUCCESS",
"detail": "Operação realizada com sucesso"
},
"document_id": "11111111-1111-4111-8111-111111111111"
}
Um document_id já vinculado a um processo não pode ser usado em outro. Para um novo processo deliberado, fazer novo upload de cada PDF. Para retomar consulta ou download do processo existente, usar o process_id salvo.
Erros de aplicação
| Nome | Código de aplicação | Descrição |
|---|
| CORRUPTED_PDF | 400 | PDF corrompido; retorno observado HTTP 400. |
| ONLY_PDF_ALLOWED | 401 | Arquivo não PDF; retorno observado HTTP 400. O código de aplicação 401 não é o HTTP 401 de autenticação. |
SignatureRequest
POST /flow/restful/application/signature-request
Cria um processo assíncrono com um ou mais PDFs já enviados e os signatários configurados. A criação pode enviar convites; uma resposta aceita não significa que os documentos já estejam assinados.
Terminologia: stakeholders são partes interessadas, distintas dos signatários; reminder_in configura lembretes; deadline define prazo geral ou individual; type escolhe a modalidade; visual_signature configura a apresentação visível.
Assinatura eletrônica não implica uso de certificado ICP-Brasil. Visibilidade não substitui verificação da assinatura. Não importar autenticação, transações ou regras comerciais do módulo CSS para este fluxo.
| Header | Valor |
|---|
| access_token | Bearer <token> — token recebido no login. |
| Content-Type | application/json |
Corpo JSON
| Campo | Tipo e obrigatoriedade | Descrição |
|---|
| title | String obrigatória | Título não vazio do processo. |
| type | Enum obrigatório | DIGITAL_SIGNATURE, DIGITAL_SIGNATURE_VISIBLE, ELECTRONIC_SIGNATURE ou ELECTRONIC_SIGNATURE_VISIBLE. |
| documents | Array obrigatório, no mínimo um item | Strings document_id retornadas por upload e disponíveis para a operação. |
| signers | Array obrigatório, no mínimo um item | Nome e email de cada signatário; prazo individual opcional, conforme tabela abaixo. |
| callback_url | String URI obrigatória | URL pública controlada para notificações de conclusão. Preferir HTTPS; localhost não é acessível ao Flow. Ausência retornou HTTP 400/código 504. |
| deadline | Inteiro opcional | Prazo geral em dias, entre 1 e 30. Não combinar com prazos individuais. |
| reminder_in | Enum opcional | NEVER (padrão), ONE_DAY, TWO_DAYS, THREE_DAYS, SEVEN_DAYS, FOURTEEN_DAYS, TWENTY_ONE_DAYS. |
| stakeholders | Array opcional | Objetos com nome e email das partes interessadas. |
| visual_signature | Objeto para modalidades visíveis | Contém signature_model_id e visual_signature_detail; não é um array. |
| send_completion_email | Booleano opcional, padrão false | Campo documentado para email de conclusão ao solicitante. Ativar conforme o fluxo acordado; aceite não comprova entrega. |
| certillion_site_request | Booleano opcional, padrão false | Campo documentado para solicitação proveniente do site Certillion. Não ativar automaticamente em integrações. |
Itens de signers
| Campo | Descrição |
|---|
| name | String obrigatória, nome não vazio do signatário. |
| email | String obrigatória, email do signatário. |
| deadline | Inteiro opcional, prazo individual em dias, entre 1 e 30. Não é prazo geral. |
Não combinar prazo geral com prazos individuais nem deixar prazos individuais parcialmente preenchidos. Confirmar com o produto a ordem efetiva de assinatura desejada; não inferir toda a sequência pelo array de signatários.
Itens de stakeholders
| Campo | Descrição |
|---|
| name | Nome da parte interessada. |
| email | Email da parte interessada. Estar nessa lista não atribui papel de signatário. |
Configuração de visual_signature
| Campo | Descrição |
|---|
| signature_model_id | Inteiro int64 obrigatório no objeto visual. ID numérico do modelo; validar conversão do ID textual de cadastro/listagem. |
| visual_signature_detail | Array obrigatório no objeto visual, com pelo menos um item. Associar cada par documento/signatário pelos IDs e emails reais. |
Itens de visual_signature_detail
| Campo | Tipo e descrição |
|---|
| document_id | String obrigatória, correspondente a um documento da solicitação. |
| signer_email | String obrigatória, correspondente ao email de um signatário da solicitação. |
| page_number | Inteiro; página do PDF. Se informar posição manual, enviar este campo e as duas coordenadas juntos. |
| x_position | Inteiro; posição no eixo X. Conferir dimensões do modelo, página e rotação no resultado. |
| y_position | Inteiro; posição no eixo Y. A origem das coordenadas não foi confirmada; não herdar a regra CSS. |
| real_signature | Booleano opcional, padrão false. Semântica adicional não estabelecida neste contrato; omitir no fluxo mínimo e confirmar seu uso antes de depender de distinção entre assinatura e rubrica. |
Modalidades visíveis: podem ocorrer respostas HTTP 500 com Visual signer definition not found for document: contract.pdf mesmo com estrutura aparentemente consistente. Preservar os IDs, modelo e payload redigido para diagnóstico. A causa não foi isolada; não reenviar automaticamente nem trocar a modalidade como tratamento do erro.
Exemplo mínimo de criação
{
"title": "Contrato de integração",
"type": "DIGITAL_SIGNATURE",
"documents": [
"11111111-1111-4111-8111-111111111111"
],
"signers": [
{
"name": "Participante",
"email": "participante@example.invalid"
}
],
"callback_url": "https://integracao.example.invalid/flow/callback"
}
Exemplo estrutural de configuração visual
O corpo abaixo ilustra o vínculo de um PDF e um signatário; não garante a geometria final nem substitui a conferência da apresentação no PDF.
{
"title": "Contrato com apresentação visual",
"type": "DIGITAL_SIGNATURE_VISIBLE",
"documents": [
"11111111-1111-4111-8111-111111111111"
],
"signers": [
{
"name": "Participante",
"email": "participante@example.invalid"
}
],
"callback_url": "https://integracao.example.invalid/flow/callback",
"visual_signature": {
"signature_model_id": 123,
"visual_signature_detail": [
{
"document_id": "11111111-1111-4111-8111-111111111111",
"signer_email": "participante@example.invalid",
"page_number": 1,
"x_position": 40,
"y_position": 50
}
]
}
}
Resposta de sucesso — HTTP 200
| Campo | Descrição |
|---|
| status | Resultado da criação, 100/SUCCESS. |
| process_id | Identificador textual a persistir para consulta e download; não é ID de transação CSS. |
| usage_alert | Alerta textual de uso do plano, quando retornado; pode ser null. |
{
"status": {
"code": 100,
"name": "SUCCESS",
"detail": "Operação realizada com sucesso"
},
"process_id": "22222222-2222-4222-8222-222222222222",
"usage_alert": null
}
Erros de aplicação
| Nome | Código de aplicação | Descrição |
|---|
| INVALID_NAME | 500 | Nome inválido, conforme o contrato. Ausência de title, documents, signers ou callback_url foi rejeitada como 504; não confundir os casos. |
| INVALID_EMAIL | 501 | Email vazio ou com formato inválido. |
| INVALID_DEADLINE | 502 | Prazo menor que 1 ou maior que 30 dias. |
| DOCUMENT_NOT_FOUND | 503 | Documento não encontrado pelo identificador informado; não confundir com upload já utilizado (519). |
| EMPTY_MANDATORY_FIELDS | 504 | Campos obrigatórios ausentes, vazios ou nulos, incluindo title, documents, signers e callback_url. |
| EMPTY_VISUAL_SIGNATURE_FIELDS | 505 | Configuração visual ou campos necessários ausentes: signature_model_id, visual_signature_detail e associações document_id/signer_email. |
| SIGNATURE_MODEL_NOT_FOUND | 506 | Modelo de assinatura não encontrado pelo ID informado. |
| INVALID_VISUAL_SIGNATURE_REQUEST | 507 | Relação entre signatários e documentos incorreta. |
| WRONG_DEADLINE_SIGNER | 508 | Prazos individuais inconsistentes: preenchimento parcial, valor fora de 1 a 30 dias ou ordem de prazos incompatível, conforme o contrato. |
| WRONG_REMINDER_DEADLINE | 509 | Incompatibilidade entre lembrete e prazo. Preferir lembrete estritamente anterior ao prazo. A igualdade pode ser aceita; não depender de sua rejeição. O comportamento para lembrete estritamente posterior ainda precisa ser confirmado. |
| RETRIEVE_DOCUMENT_EXCEPTION | 510 | Erro interno ao recuperar o documento. |
| INVALID_PAGE | 511 | Página indicada fora do documento. |
| OVERFLOW_VISUAL_SIGNATURE | 512 | Posição e dimensões do modelo excedem os limites do documento. |
| OVERLAY_VISUAL_SIGNATURE | 513 | Assinaturas visíveis sobrepostas. |
| INCOMPLETE_POSITION_VISUAL_SIGNATURE | 514 | Posicionamento incompleto. Informar page_number, x_position e y_position juntos. |
| NO_SPACE_DOCUMENT | 515 | Documento sem espaço suficiente para as assinaturas. |
| NOT_UNIQUE_DEADLINE | 516 | Prazo geral e individual informados ao mesmo tempo. |
| INVALID_CALLBACK_URL | 517 | Formato de callback_url inválido. |
| INVALID_SIGNATURE_TYPE | 518 | Modalidade type inválida. |
| INVALID_DOCUMENT | 519 | Documento já vinculado a outro processo. Retorno observado: HTTP 400. Novo processo deliberado requer novo upload; recuperação do existente usa process_id. |
Callback de conclusão
Preparar um receptor público antes da criação. Em desenvolvimento local, usar um receptor estável ou um túnel HTTPS até o coletor local e mantê-lo acessível durante o acompanhamento. Encerrar um túnel temporário impede novas notificações nessa URL, mas a consulta por ID permite retomar o processo.
A notificação de conclusão recebida é um POST JSON para callback_url, com os campos:
{
"process_id": "22222222-2222-4222-8222-222222222222",
"status": "FINALIZED_WITH_SUCCESS"
}
Correlacionar o ID com uma operação conhecida e consultar o processo autenticado antes de atualizar o estado local ou disparar efeitos de negócio. Tolerar notificações repetidas e concorrência com polling sem duplicar efeitos. Correlação de ID não autentica a origem. Autenticação/assinatura do evento, lista completa de estados, timeout, confirmação HTTP exigida e política de reentrega precisam ser acordados; não são definidos aqui.
ProcessStatus
GET /flow/restful/application/process?id=<process_id>
Consulta processos da conta. Para acompanhar uma operação conhecida, informar seu ID e selecionar exatamente o item correspondente na resposta.
| Header | Valor |
|---|
| access_token | Bearer <token> — token recebido no login. |
| Query parameter | Tipo e obrigatoriedade | Descrição |
|---|
| id | String opcional | process_id retornado na criação. |
| status | Enum opcional, padrão ALL | Filtro de entrada: PENDING, SUCCESS, CANCELED, EXPIRED, REJECTED, ALL. |
| period | Enum opcional, padrão FIFTEEN_DAYS | FIFTEEN_DAYS, ONE_MONTH, SIX_MONTHS, ONE_YEAR. Os aliases numéricos da documentação anterior não são aceitos. |
Sem filtros, o período padrão documentado é dos últimos 15 dias. A ausência de um processo no resultado não comprova falha de criação e não autoriza reenviar o POST.
Resposta de sucesso — HTTP 200
| Campo | Descrição |
|---|
| status | Envelope com o resultado da consulta, separado do estado de cada processo. |
| process_list | Array de processos ou null quando não há resultados. Normalizar null para array vazio somente na iteração do cliente. |
| Campo do processo | Descrição |
|---|
| title | Título textual. |
| id | Identificador textual do processo. |
| status | Estado retornado: IN_PROGRESS indica andamento; FINALIZED_WITH_SUCCESS indica conclusão com sucesso. Preservar outros estados sem tratá-los como sucesso. Filtros de entrada e estados de saída usam vocabulários distintos. |
| documents | Array de strings document_id, não objetos com name. |
| signers | Array com name, email e status textual do participante. Estados observados incluem SENT e SIGNED; não presumir lista exaustiva. |
{
"status": {
"code": 100,
"name": "SUCCESS",
"detail": "Operação realizada com sucesso"
},
"process_list": [
{
"title": "Contrato de integração",
"id": "22222222-2222-4222-8222-222222222222",
"status": "IN_PROGRESS",
"documents": [
"11111111-1111-4111-8111-111111111111"
],
"signers": [
{
"name": "Participante",
"email": "participante@example.invalid",
"status": "SENT"
}
]
}
]
}
Depois da conclusão, o mesmo processo pode retornar status: FINALIZED_WITH_SUCCESS e participante status: SIGNED. Consultas e notificações podem ser repetidas; preservar estados desconhecidos para diagnóstico.
Exemplo de consulta sem resultados:
{
"status": {
"code": 100,
"name": "SUCCESS",
"detail": "Operação realizada com sucesso"
},
"process_list": null
}
Erros de aplicação
| Nome | Código de aplicação | Descrição |
|---|
| INVALID_PROCESS_STATUS | 600 | Filtro status inválido; não enviar estados de saída como filtros por inferência. |
| INVALID_PERIOD | 601 | Filtro period inválido. Usar os nomes completos documentados. |
| INVALID_PROCESS_ID | 602 | Identificador inválido ou sem processo correspondente, conforme o contrato. |
Download
GET /flow/restful/application/download/{process_id}
Baixa o resultado por process_id retornado em SignatureRequest. Substituir o parâmetro no path; ele é obrigatório e não é um document_id nem um parâmetro de query.
| Header | Valor |
|---|
| access_token | Bearer <token> — token recebido no login. |
| Accept | application/octet-stream |
Resposta de sucesso — HTTP 200
Bytes de um arquivo ZIP com os arquivos do processo, não JSON, Base64 ou PDF único. Baixar automaticamente após confirmar FINALIZED_WITH_SUCCESS na consulta. Guardar o ZIP e verificar a integridade de seus membros conforme a integração.
Não presumir cópia original separada em todo ZIP de assinatura eletrônica; esse comportamento não foi confirmado. Conclusão operacional e integridade do ZIP não comprovam a validade criptográfica nem a apresentação visual das assinaturas nos PDFs.
Falha no download ou ao salvar o arquivo deve ser recuperada pelo mesmo process_id, sem repetir upload ou criação. O fim de uma espera local não cancela o processo remoto.
Erros HTTP
| HTTP | Descrição e próxima ação |
|---|
| 400 | Formato de process_id inválido; conferir o ID enviado no path. |
| 401 | Falha de autenticação; conferir access_token e sua validade. Renovar de forma controlada e continuar com o mesmo ID. |
| 403 | Processo ainda não concluído ou concluído sem sucesso. Consultar estado e retomar apenas leitura/download quando apropriado. |
| 404 | Processo não encontrado; conferir ID e conta. |
| 500 | Erro do servidor; preservar diagnóstico e IDs. Não recriar processo para corrigir o download. |