Guia completo para integrar e utilizar a API de certificação digital do SimpleSigner.
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://www.simplesigner.com.br/
Formato de Resposta: JSON
Protocolo: HTTPS recomendado para produçã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.
X-Auth-Token: SEU_TOKEN_AQUI
| Status Code | Descrição |
|---|---|
401 | Token inválido ou ausente |
403 | Token válido mas acesso negado ao recurso |
Envia um arquivo PDF para ser assinado digitalmente com o certificado A1 configurado na sua conta.
/Sign/Upload
| Header | Valor |
|---|---|
X-Auth-Token | Seu token de autenticação |
Content-Type | multipart/form-data |
| Header | Descrição |
|---|---|
X-Caller-Key | Identificador do sistema chamador (para rastreamento nos logs). Padrão: Desconhecido |
X-Include-QRCode | Alternativa ao parâmetro include_qrcode via header. Valores: true / false |
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
file | File | Sim | Arquivo PDF a ser assinado (máx. 50MB) |
include_qrcode | Boolean | Não | Define se o QR Code de validação será adicionado na última página. Padrão: true |
clinicidcompany | Integer | Não | ID da clínica associada ao documento — isenta do controle de quota mensal |
{
"success": true,
"message": "Arquivo assinado com sucesso",
"link": "https://www.simplesigner.com.br/Sign/DownloadDoc/abc123def456...",
"validationCode": "abc123def456",
"secretCode": "472819",
"qrCodeUrl": "https://www.simplesigner.com.br/Sign/Validate/abc123def456"
}
| Campo | Descrição |
|---|---|
link | URL para download do PDF assinado |
validationCode | Código UUID para validação pública do documento |
secretCode | Código numérico de 6 dígitos exibido no rodapé do documento assinado |
qrCodeUrl | URL de validação embutida no QR Code do documento |
| Status | Resposta | Descriçã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 |
Atualiza ou cadastra o certificado digital A1 (.pfx) da empresa. Este certificado será usado para assinar todos os documentos.
/Sign/UploadCertificate
| Header | Valor |
|---|---|
X-Auth-Token | Seu token de autenticação |
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
file | File | Sim | Arquivo .pfx do certificado digital A1 |
password | String | Não | Senha do arquivo .pfx (pode ser vazio se o certificado não tiver senha) |
{
"success": true,
"message": "Certificado salvo com sucesso"
}
| Status | Resposta | Descriçã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 |
Verifica se há um certificado cadastrado, se está válido e ativo.
/Sign/CheckCertificateStatus
| Header | Valor |
|---|---|
X-Auth-Token | Seu token de autenticação |
{
"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
}
{
"success": true,
"certificateRegistered": true,
"certificateValid": false,
"certificateActive": false,
"message": "O certificado expirou em 15/01/2025 10:30:00"
}
{
"success": true,
"certificateRegistered": false,
"certificateValid": false,
"certificateActive": false,
"message": "Certificado não cadastrado"
}
| Status | Resposta | Descrição |
|---|---|---|
401 | {"success": false, "message": "Não autorizado..."} | Token inválido ou ausente |
500 | {"success": false, "message": "Erro interno..."} | Erro ao validar credenciais |
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 |
"success" (boolean) e "message" (string) para facilitar o tratamento de erros.
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://www.simplesigner.com.br/Sign/Upload", form);
var result = await response.Content.ReadAsStringAsync();
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://www.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://www.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://www.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())