Assinatura digital de documentos PDF
API para assinatura digital ICP-Brasil no padrão PAdES, com carimbo do tempo, selo visual, página adicional de autenticação, QR Code e resposta enriquecida para auditoria.
Status da API
Primeiros passos
O consumo básico da API pode ser concluído em cinco etapas.
Solicite uma API Key à P&S2B.
Leia o arquivo PDF e converta o conteúdo para Base64.
Envie um POST para /api/v1/sign.
Informe a chave no cabeçalho X-API-Key.
Decodifique data.signedPdfBase64 e salve o PDF assinado.
URL base
https://sign.pes2b.com
Autenticação
Todos os endpoints protegidos exigem uma API Key válida no cabeçalho X-API-Key.
X-API-Key: SUA_CHAVE
Resposta de autenticação inválida
HTTP/1.1 401 Unauthorized
{
"success": false,
"message": "Acesso não autorizado.",
"requestId": "req_20260714_170835_3e0bc98e",
"data": null,
"errors": [
{
"code": "UNAUTHORIZED",
"message": "API Key ausente ou inválida.",
"field": null
}
],
"warnings": []
}
Health checks
/api/v1/health
Público
/actuator/health/actuator/infoAssinar PDF
/api/v1/sign
API Key
Recebe um PDF em Base64 e devolve o mesmo documento assinado digitalmente.
Requisição
{
"pdfBase64": "JVBERi0xLjQK...",
"originalFileName": "documento.pdf"
}
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
pdfBase64 | String | Sim | Conteúdo integral do PDF codificado em Base64. |
originalFileName | String | Não | Nome original do arquivo. Quando informado, a API devolve também o nome sugerido do arquivo assinado. |
O campo pdfBase64 aceita Base64 puro ou Data URI.
Resposta de sucesso
{
"success": true,
"message": "Documento assinado com sucesso.",
"requestId": "req_20260714_170835_3e0bc98e",
"data": {
"signedPdfBase64": "JVBERi0xLjQK...",
"documentIdentifier": "C0470A15CB41",
"signedAt": "2026-07-14T14:08:35.691467758-03:00",
"signatureStandard": "PAdES-T",
"signatureFormat": "PAdES",
"timestampApplied": true,
"certificate": {
"signerName": "JORGEPLA CONTABILIDADE LTDA",
"signerDocument": "10576541000116",
"certificateAuthority": "AC SAFEWEB RFB v5",
"certificateSerialNumber": "7E16BE1EB4D3B67B",
"validFrom": "2025-12-11T09:08:03-03:00",
"validUntil": "2026-12-11T09:08:03-03:00"
},
"document": {
"originalFileName": "documento.pdf",
"signedFileName": "documento - Assinado.pdf",
"mimeType": "application/pdf",
"sizeBytes": 182833,
"sha256": "b8407cd9f1cd8011633f88d1729412aa263bf0c41f154604835edf41ef9ad283"
}
},
"errors": [],
"warnings": []
}
O consumidor deve decodificar data.signedPdfBase64 e salvar o resultado com extensão .pdf.
Rastreabilidade
requestId
Identifica uma chamada específica da API e permite localizar a execução nos logs.
documentIdentifier
Código impresso no selo e na página adicional do PDF. É diferente do requestId.
SHA-256
Hash calculado sobre os bytes finais do PDF assinado.
signedAt
Data e hora da assinatura em ISO 8601 com fuso horário.
Modos de aparência visual
O modo visual é configurado no servidor.
NONE
Assinatura criptográfica sem aparência adicional.
STAMP_ONLY
Selo visual aplicado nas páginas do documento.
PAGE_ONLY
Página adicional com informações de autenticação e QR Code.
STAMP_AND_PAGE
Selo nas páginas e página adicional premium.
Exemplo em cURL
curl --request POST \
"https://sign.pes2b.com/api/v1/sign" \
--header "Content-Type: application/json" \
--header "X-API-Key: SUA_CHAVE" \
--data '{
"pdfBase64": "JVBERi0xLjQK...",
"originalFileName": "documento.pdf"
}'
Exemplo em JavaScript
const response = await fetch(
"https://sign.pes2b.com/api/v1/sign",
{
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": process.env.PES2B_API_KEY
},
body: JSON.stringify({
pdfBase64,
originalFileName: "documento.pdf"
})
}
);
const result = await response.json();
if (!response.ok || !result.success) {
throw new Error(result.errors?.[0]?.message ?? result.message);
}
const signedPdfBase64 = result.data.signedPdfBase64;
Configuração no n8n
Use um node HTTP Request.
Método POST e URL https://sign.pes2b.com/api/v1/sign.
Envie o cabeçalho X-API-Key por credencial segura.
Use body JSON com pdfBase64 e originalFileName.
Reconstrua o arquivo usando data.signedPdfBase64.
Grave requestId, documentIdentifier, signedAt e sha256 nos metadados.
Códigos de erro
| Código | HTTP | Descrição |
|---|---|---|
UNAUTHORIZED | 401 | API Key ausente ou inválida. |
VALIDATION_ERROR | 400 | Campo obrigatório ausente ou inválido. |
INVALID_JSON | 400 | Corpo da requisição não contém JSON válido. |
INVALID_REQUEST | 400 | Não foi possível processar os dados enviados. |
INVALID_PDF | 400 | Conteúdo não corresponde a um PDF válido. |
FILE_TOO_LARGE | 400/413 | Arquivo superior ao limite permitido. |
TIMESTAMP_ERROR | 400/500 | Falha ao obter ou incorporar o carimbo do tempo. |
INTERNAL_ERROR | 500 | Erro interno ao processar o documento. |
{
"success": false,
"message": "Não foi possível assinar o documento.",
"requestId": "req_20260714_170835_3e0bc98e",
"data": null,
"errors": [
{
"code": "INVALID_PDF",
"message": "O conteúdo informado não corresponde a um PDF válido.",
"field": "pdfBase64"
}
],
"warnings": []
}
Downloads
OpenAPI 3
Definição atual da API.
Baixar OpenAPICollection oficial
Health, Info e assinatura de PDF.
Baixar CollectionDocumentação completa
Versão técnica para compartilhamento.
Baixar MarkdownChangelog
Histórico das alterações publicadas.
Baixar ChangelogVersionamento
A versão estável atual da API é v1.
/api/v1Estáveldata.signedPdfBase64 foi mantido no mesmo local para preservar a compatibilidade das integrações existentes.Changelog
- Resposta enriquecida com requestId e identificador do documento.
- Dados do certificado utilizados na assinatura.
- Data e hora da assinatura com fuso horário.
- Tamanho e SHA-256 do PDF final.
- Erros padronizados em JSON, inclusive falha de autenticação.
- Campo opcional originalFileName.
Segurança
- Utilize sempre HTTPS.
- Guarde a API Key em cofre, variável de ambiente ou credencial do n8n.
- Não registre o conteúdo Base64 nos logs.
- Não envie arquivo PFX nem senha do certificado nas requisições.
- Preserve os bytes do PDF final exatamente como retornados pela API.
- Guarde o requestId para suporte e auditoria.