Documentação

Guia completo para integrar e utilizar a API de certificação digital do SimpleSigner.

Introdução

A API SimpleSigner permite assinar documentos PDF digitalmente usando certificados A1 de forma automatizada. A API segue os princípios REST e retorna respostas em JSON.

Base URL: https://simplesigner.com.br/

Formato de Resposta: JSON

Protocolo: HTTPS recomendado para produção

Nota: Antes de utilizar a API, certifique-se de ter um certificado digital A1 (.pfx) configurado na sua conta.

Autenticação

Todas as chamadas de API requerem autenticação via header X-Auth-Token. Este token é único para cada empresa e pode ser obtido no painel de controle.

Header de Autenticação
X-Auth-Token: SEU_TOKEN_AQUI
Erros de Autenticação
Status CodeDescrição
401Token inválido ou ausente
403Token válido mas acesso negado ao recurso

Assinar Documento (Upload)

Envia um arquivo PDF para ser assinado digitalmente com o certificado A1 configurado na sua conta.

Política de Retenção: Os arquivos assinados estarão disponíveis no sistema por 180 dias, após este período serão excluídos automaticamente. Certifique-se de salvar o arquivo assinado em seu sistema.
POST /Sign/Upload
Headers Obrigatórios
HeaderValor
X-Auth-TokenSeu token de autenticação
Content-Typemultipart/form-data
Headers Opcionais
HeaderDescrição
X-Caller-KeyIdentificador do sistema chamador (para rastreamento nos logs). Padrão: Desconhecido
X-Include-QRCodeAlternativa ao parâmetro include_qrcode via header. Valores: true / false
Parâmetros (Multipart/Form-Data)
CampoTipoObrigatórioDescrição
fileFileSimArquivo PDF a ser assinado (máx. 50MB)
include_qrcodeBooleanNãoDefine se o QR Code de validação será adicionado na última página. Padrão: true
clinicidcompanyIntegerNãoID da clínica associada ao documento — isenta do controle de quota mensal
Exemplo de Resposta (Sucesso - 200)
{
  "success": true,
  "message": "Arquivo assinado com sucesso",
  "link": "https://simplesigner.com.br/Sign/DownloadDoc/abc123def456...",
  "validationCode": "abc123def456",
  "secretCode": "472819",
  "qrCodeUrl": "https://simplesigner.com.br/Sign/Validate/abc123def456"
}
CampoDescrição
linkURL para download do PDF assinado
validationCodeCódigo UUID para validação pública do documento
secretCodeCódigo numérico de 6 dígitos exibido no rodapé do documento assinado
qrCodeUrlURL de validação embutida no QR Code do documento
Possíveis Erros
StatusRespostaDescrição
400{"success": false, "message": "Nenhum arquivo enviado"}Arquivo não foi incluído no request
400{"success": false, "message": "Arquivo vazio"}Arquivo enviado está vazio
400{"success": false, "message": "O arquivo excede o limite..."}Arquivo maior que 50MB
401{"success": false, "message": "Não autorizado..."}Token inválido ou ausente
403{"success": false, "message": "Limite mensal atingido..."}Quota mensal do plano esgotada
500{"success": false, "message": "Certificado digital não encontrado..."}Certificado não configurado na conta
500{"success": false, "message": "Erro interno ao processar..."}Erro ao processar assinatura

Upload de Certificado

Atualiza ou cadastra o certificado digital A1 (.pfx) da empresa. Este certificado será usado para assinar todos os documentos.

O certificado anterior será substituído pelo novo. Certifique-se de que o certificado é válido e a senha está correta.
POST /Sign/UploadCertificate
Headers Obrigatórios
HeaderValor
X-Auth-TokenSeu token de autenticação
Parâmetros
CampoTipoObrigatórioDescrição
fileFileSimArquivo .pfx do certificado digital A1
passwordStringNãoSenha do arquivo .pfx (pode ser vazio se o certificado não tiver senha)
Exemplo de Resposta (Sucesso - 200)
{
  "success": true,
  "message": "Certificado salvo com sucesso"
}
Possíveis Erros
StatusRespostaDescrição
400{"success": false, "message": "Nenhum arquivo enviado"}Arquivo não incluído
400{"success": false, "message": "Formato inválido..."}Arquivo não é .pfx
401{"success": false, "message": "Não autorizado..."}Token inválido
500{"success": false, "message": "Erro ao salvar..."}Erro ao processar certificado

Verificar Status do Certificado

Verifica se há um certificado cadastrado, se está válido e ativo.

GET /Sign/CheckCertificateStatus
Headers Obrigatórios
HeaderValor
X-Auth-TokenSeu token de autenticação
Exemplo de Resposta (Certificado Válido - 200)
{
  "success": true,
  "certificateRegistered": true,
  "certificateValid": true,
  "certificateActive": true,
  "message": "Certificado válido até 15/12/2026 10:30:00",
  "subject": "EMPRESA EXEMPLO LTDA",
  "issuer": "AC CERTISIGN G6",
  "notBefore": "2024-12-15T10:30:00",
  "notAfter": "2026-12-15T10:30:00",
  "daysUntilExpiration": 320
}
Exemplo de Resposta (Certificado Expirado - 200)
{
  "success": true,
  "certificateRegistered": true,
  "certificateValid": false,
  "certificateActive": false,
  "message": "O certificado expirou em 15/01/2025 10:30:00"
}
Exemplo de Resposta (Sem Certificado - 200)
{
  "success": true,
  "certificateRegistered": false,
  "certificateValid": false,
  "certificateActive": false,
  "message": "Certificado não cadastrado"
}
Possíveis Erros
StatusRespostaDescrição
401{"success": false, "message": "Não autorizado..."}Token inválido ou ausente
500{"success": false, "message": "Erro interno..."}Erro ao validar credenciais

Códigos de Erro HTTP

A API utiliza códigos de status HTTP padrão para indicar sucesso ou falha das requisições.

Código Status Descrição
200 OK Requisição processada com sucesso
400 Bad Request Parâmetros inválidos ou ausentes
401 Unauthorized Token de autenticação inválido ou ausente
403 Forbidden Acesso negado ao recurso
404 Not Found Recurso não encontrado
500 Internal Server Error Erro interno do servidor
Dica: Todas as respostas incluem um campo "success" (boolean) e "message" (string) para facilitar o tratamento de erros.

Exemplos de Integração

Veja como chamar a API nas principais linguagens.

using System.Net.Http;
using System.Net.Http.Headers;
using System.IO;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-Auth-Token", "SEU_TOKEN");

var form = new MultipartFormDataContent();
var fileContent = new ByteArrayContent(File.ReadAllBytes("documento.pdf"));
fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/pdf");
form.Add(fileContent, "file", "documento.pdf");

var response = await client.PostAsync("https://simplesigner.com.br/Sign/Upload", form);
var result = await response.Content.ReadAsStringAsync();
$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://simplesigner.com.br/Sign/Upload",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_POST => true,
  CURLOPT_HTTPHEADER => ["X-Auth-Token: SEU_TOKEN"],
  CURLOPT_POSTFIELDS => [
    'file' => new CURLFile('/path/to/documento.pdf')
  ]
]);

$response = curl_exec($curl);
curl_close($curl);
echo $response;
// Usando OkHttp
OkHttpClient client = new OkHttpClient();

RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
    .addFormDataPart("file", "documento.pdf",
        RequestBody.create(MediaType.parse("application/pdf"), new File("documento.pdf")))
    .build();

Request request = new Request.Builder()
    .url("https://simplesigner.com.br/Sign/Upload")
    .addHeader("X-Auth-Token", "SEU_TOKEN")
    .post(body)
    .build();

Response response = client.newCall(request).execute();
System.out.println(response.body().string());
import requests

url = "https://simplesigner.com.br/Sign/Upload"
headers = {"X-Auth-Token": "SEU_TOKEN"}
files = {"file": open("documento.pdf", "rb")}

response = requests.post(url, headers=headers, files=files)
print(response.json())