Ir para o conteúdo principal
PapyDocs

PapyDocs para desenvolvedores

A API Papy leva o processamento de documentos do PapyDocs para seus aplicativos, sites e softwares por meio de uma interface REST simples e versionada.

  • Cada endpoint documentado executa os mesmos mecanismos das ferramentas do PapyDocs.
  • As chaves são armazenadas como impressões (hash), exibidas uma única vez e podem ser renovadas ou revogadas.
  • Os arquivos são processados em memória e nunca armazenados; só os contadores de uso são mantidos.

Verificando a disponibilidade…

Início rápido

  1. Peça uma chave de API ao administrador desta instalação do PapyDocs (criada em “Chaves e uso”, abaixo).
  2. Envie uma requisição POST multipart/form-data para /api/v1/OPERATION com seus arquivos PDF e parâmetros.
  3. Inclua o cabeçalho Authorization: Bearer YOUR_KEY em cada requisição.
  4. Leia o resultado JSON ou salve o PDF ou ZIP retornado. Os erros sempre voltam em JSON com um código estável.
Listar as operações disponíveis nesta instalação
curl https://papydocs.vercel.app/api/v1

Autenticação

Cada requisição é autenticada com uma chave de API enviada no cabeçalho Authorization.

HTTP
Authorization: Bearer papy_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  • O PapyDocs guarda apenas uma impressão SHA-256 de cada chave, nunca a chave em si.
  • Uma nova chave é exibida uma única vez, na criação. Guarde-a no seu cofre de segredos: ela não poderá ser exibida de novo.
  • A renovação emite uma nova chave e revoga a anterior imediatamente; a revogação vale a partir da requisição seguinte.
  • Chame a API a partir do seu servidor. Nunca coloque uma chave em uma página web ou em um aplicativo móvel.

Referência dos endpoints

Todas as operações são requisições POST para /api/v1/OPERATION com corpo multipart/form-data. Operações JSON retornam application/json; operações com arquivos retornam diretamente o PDF ou o ZIP.

Operações com documentos

POST/api/v1/info— Informações do documento

Retorna o número de páginas, o tamanho e os metadados de um PDF.

CampoTipoObrigatório
fileArquivo PDFSim

Resposta: JSON

Exemplos de código e de resposta
cURL
curl -X POST "https://papydocs.vercel.app/api/v1/info" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf"
Exemplo de resposta (resumido)
{
  "pages": 2,
  "bytes": 48213,
  "metadata": {
    "title": "Contract",
    "author": "",
    "subject": "",
    "keywords": "",
    "creator": "",
    "producer": "pdf-lib",
    "creationDate": "2026-10-14T09:00:00.000Z",
    "modificationDate": null,
    "customKeys": [],
    "hasXmp": false,
    "hasJavaScript": false,
    "hasEmbeddedFiles": false,
    "pageCount": 2
  }
}

POST/api/v1/merge— Juntar

Junta vários PDFs na ordem em que são enviados.

CampoTipoObrigatório
filesVários arquivos PDFSim

Resposta: Arquivo PDF

Exemplos de código e de resposta
cURL
curl -X POST "https://papydocs.vercel.app/api/v1/merge" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "files=@document.pdf" \
  -F "files=@other.pdf" \
  -o result.pdf

POST/api/v1/split— Dividir

Divide um PDF por intervalos de páginas (ex.: 1-2,5) ou em um arquivo por página; retorna um ZIP.

CampoTipoObrigatório
fileArquivo PDFSim
modeUm entre (ranges | every-page)Não
rangesTextoNão

Resposta: Arquivo ZIP com PDFs

Exemplos de código e de resposta
cURL
curl -X POST "https://papydocs.vercel.app/api/v1/split" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf" \
  -F 'mode=ranges' \
  -F 'ranges=1-2,5' \
  -o result.zip

POST/api/v1/compress— Comprimir

Otimização estrutural sem perdas de um PDF (as imagens não são recodificadas).

CampoTipoObrigatório
fileArquivo PDFSim

Resposta: Arquivo PDF

Exemplos de código e de resposta
cURL
curl -X POST "https://papydocs.vercel.app/api/v1/compress" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf" \
  -o result.pdf

POST/api/v1/rotate— Girar

Gira todas as páginas em 90, 180 ou 270 graus.

CampoTipoObrigatório
fileArquivo PDFSim
angleUm entre (90 | 180 | 270)Não

Resposta: Arquivo PDF

Exemplos de código e de resposta
cURL
curl -X POST "https://papydocs.vercel.app/api/v1/rotate" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf" \
  -F 'angle=90' \
  -o result.pdf

POST/api/v1/page-numbers— Números de página

Adiciona números de página a partir de um modelo com as variáveis {page} e {total} (caracteres latinos).

CampoTipoObrigatório
fileArquivo PDFSim
formatTextoNão
startNúmeroNão

Resposta: Arquivo PDF

Exemplos de código e de resposta
cURL
curl -X POST "https://papydocs.vercel.app/api/v1/page-numbers" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf" \
  -F 'format={page} / {total}' \
  -F 'start=1' \
  -o result.pdf

POST/api/v1/watermark— Marca d’água

Adiciona uma marca d’água de texto na diagonal em cada página (caracteres latinos).

CampoTipoObrigatório
fileArquivo PDFSim
textTextoSim
opacityNúmeroNão

Resposta: Arquivo PDF

Exemplos de código e de resposta
cURL
curl -X POST "https://papydocs.vercel.app/api/v1/watermark" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf" \
  -F 'text=CONFIDENTIAL' \
  -F 'opacity=0.2' \
  -o result.pdf

Inteligência documental

POST/api/v1/text— Extrair texto

Retorna o texto de cada página e indica se o documento parece digitalizado (needsOcr). Nenhum OCR é feito no servidor.

CampoTipoObrigatório
fileArquivo PDFSim

Resposta: JSON

Exemplos de código e de resposta
cURL
curl -X POST "https://papydocs.vercel.app/api/v1/text" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf"
Exemplo de resposta (resumido)
{
  "pages": [
    {
      "page": 1,
      "text": "Facture N° FAC-2026-0042\nTotal TTC 144,00 €"
    }
  ],
  "characters": 41,
  "needsOcr": false
}

POST/api/v1/invoice— Extrair dados de faturas

Extrai fornecedor, cliente, número, datas, moeda, valores, itens, condições de pagamento e referência do pedido, cada um com sua página e linha de origem, além de verificações de coerência. Valores ausentes são retornados como null, nunca estimados.

CampoTipoObrigatório
fileArquivo PDFSim

Resposta: JSON

Exemplos de código e de resposta
cURL
curl -X POST "https://papydocs.vercel.app/api/v1/invoice" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf"
Exemplo de resposta (resumido)
{
  "fields": {
    "invoiceNumber": {
      "value": "FAC-2026-0042",
      "status": "found",
      "source": {
        "pageNumber": 1,
        "excerpt": "Facture N° FAC-2026-0042"
      }
    },
    "total": {
      "value": "144",
      "status": "found",
      "source": {
        "pageNumber": 1,
        "excerpt": "Total TTC 144,00 €"
      }
    },
    "dueDate": {
      "value": null,
      "status": "missing",
      "source": null
    }
  },
  "lineItems": [
    {
      "description": "Ramette papier A4",
      "quantity": 10,
      "unitPrice": 5,
      "amount": 50,
      "source": {
        "pageNumber": 1,
        "excerpt": "Ramette papier A4 10 5,00 € 50,00 €"
      }
    }
  ],
  "checks": [
    {
      "code": "missing",
      "field": "dueDate"
    }
  ]
}

POST/api/v1/contract— Analisar um contrato

Retorna os títulos de cláusulas, trechos por tema (partes, pagamento, vigência, rescisão…), datas, valores, avisos prévios e trechos a verificar, todos copiados do documento com sua página. Indicações por palavras-chave, não assessoria jurídica.

CampoTipoObrigatório
fileArquivo PDFSim

Resposta: JSON

Exemplos de código e de resposta
cURL
curl -X POST "https://papydocs.vercel.app/api/v1/contract" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf"
Exemplo de resposta (resumido)
{
  "notice": "Passages are copied from the document; categories and flags are keyword-based pointers to verify, not legal advice.",
  "pageCount": 2,
  "clauses": [
    {
      "heading": "Article 7 - Résiliation",
      "pageNumber": 2
    }
  ],
  "findings": [
    {
      "category": "termination",
      "pageNumber": 2,
      "clause": "Article 7 - Résiliation",
      "excerpt": "Chaque partie peut résilier le contrat moyennant un préavis de 3 mois."
    }
  ],
  "flags": [
    {
      "reason": "auto-renewal",
      "pageNumber": 1,
      "clause": "Article 2 - Durée",
      "excerpt": "Il est renouvelé par tacite reconduction…",
      "match": "tacite reconduction"
    }
  ],
  "facts": [
    {
      "type": "notice",
      "value": "préavis de 3 mois",
      "pageNumber": 2,
      "clause": "Article 7 - Résiliation",
      "excerpt": "…"
    }
  ],
  "sentenceCount": 14
}

POST/api/v1/compare— Comparar duas versões

Compara o texto de dois PDFs página por página e retorna os trechos incluídos, excluídos e alterados com seu contexto.

CampoTipoObrigatório
originalArquivo PDFSim
revisedArquivo PDFSim

Resposta: JSON

Exemplos de código e de resposta
cURL
curl -X POST "https://papydocs.vercel.app/api/v1/compare" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "original=@contract-v1.pdf" \
  -F "revised=@contract-v2.pdf"
Exemplo de resposta (resumido)
{
  "identical": false,
  "pageCountOriginal": 2,
  "pageCountRevised": 2,
  "wordsAdded": 11,
  "wordsRemoved": 1,
  "changes": [
    {
      "type": "modified",
      "pageNumber": 1,
      "before": "12",
      "after": "24",
      "context": "Le contrat est conclu pour une durée de 24 mois."
    }
  ]
}

POST/api/v1/proofread— Revisar

Aplica as regras de revisão locais do PapyDocs (espaçamento, pontuação, palavras repetidas, maiúsculas, erros comuns) e retorna cada problema com sua correção e posição.

CampoTipoObrigatório
fileArquivo PDFSim
languageUm entre (auto | fr | en | es | pt)Não

Resposta: JSON

Exemplos de código e de resposta
cURL
curl -X POST "https://papydocs.vercel.app/api/v1/proofread" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf" \
  -F 'language=auto'
Exemplo de resposta (resumido)
{
  "language": "fr",
  "engine": "local-rules",
  "issues": [
    {
      "page": 1,
      "start": 11,
      "end": 15,
      "original": "recu",
      "suggestion": "reçu",
      "category": "spelling",
      "rule": "misspelling"
    }
  ]
}

Segurança e privacidade

POST/api/v1/remove-metadata— Remover metadados

Remove os metadados do documento e o conteúdo ativo (JavaScript, arquivos incorporados).

CampoTipoObrigatório
fileArquivo PDFSim

Resposta: Arquivo PDF

Exemplos de código e de resposta
cURL
curl -X POST "https://papydocs.vercel.app/api/v1/remove-metadata" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf" \
  -o result.pdf

POST/api/v1/protect— Proteger com senha

Criptografa um PDF (AES-256) com uma senha de abertura.

CampoTipoObrigatório
fileArquivo PDFSim
passwordTextoSim
owner_passwordTextoNão

Resposta: Arquivo PDF

Exemplos de código e de resposta
cURL
curl -X POST "https://papydocs.vercel.app/api/v1/protect" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf" \
  -F 'password=your-password' \
  -o result.pdf

POST/api/v1/unlock— Remover uma senha

Descriptografa um PDF quando a senha correta é informada.

CampoTipoObrigatório
fileArquivo PDFSim
passwordTextoSim

Resposta: Arquivo PDF

Exemplos de código e de resposta
cURL
curl -X POST "https://papydocs.vercel.app/api/v1/unlock" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf" \
  -F 'password=your-password' \
  -o result.pdf

Endpoints de gestão de chaves

Reservados ao administrador da instalação, autenticado com o token de administrador (e não com uma chave de API). São usados pela seção “Chaves e uso” desta página.

  • GET/api/v1/keys— Listar as chaves (sem os segredos)
  • POST/api/v1/keys— Criar uma chave (corpo JSON com um nome); o segredo é retornado uma única vez
  • DELETE/api/v1/keys/{id}— Revogar uma chave
  • POST/api/v1/keys/{id}/rotate— Renovar uma chave; o novo segredo é retornado uma única vez
  • GET/api/v1/usage?days=30— Contadores de uso por dia, chave e operação

Erros e limites

Os erros usam códigos HTTP padrão e um corpo JSON com um código estável e legível por máquina. As mensagens não são traduzidas: trate o código no seu aplicativo.

Formato dos erros
{
  "error": {
    "code": "authorization-required"
  }
}
StatusSignificadoCódigos de erro
200Sucesso
400Parâmetro ausente ou inválidoinvalid-options, empty-selection
401Chave ausente, inválida ou revogada (ou token de administrador)authorization-required
404Operação ou chave desconhecidainvalid-options
413Requisição ou arquivo grande demaisrequest-too-large, file-too-large
415O arquivo não é um PDFunsupported-type
422O PDF não pode ser processado (danificado, criptografado, senha incorreta, sem texto…)corrupt, encrypted, wrong-password, no-text, invalid-range
429Limite por hora atingido: aguarde os segundos indicados em Retry-Afterrate-limited
503A API, ou a gestão de chaves, não está ativada nesta instalaçãoserver-unavailable

Limites

  • Limite padrão: 120 requisições por hora e por chave (configurável pela instalação).
  • Cada resposta inclui X-RateLimit-Limit, X-RateLimit-Remaining e X-RateLimit-Reset (em segundos).
  • Até 100 MB por PDF, 200 MB por requisição e 60 arquivos por requisição.
  • As operações de texto leem até 500 páginas por documento; as pesquisas são limitadas a 200 caracteres e 100 resultados.
  • Documentos digitalizados sem camada de texto são recusados pelas operações de análise (erro no-text): rode um OCR antes, por exemplo com a ferramenta de OCR do PapyDocs.

Console de testes

Envie uma requisição real a esta instalação com a sua chave. A chave fica na memória desta página, é enviada apenas a este site e nunca é salva. Os arquivos escolhidos são enviados à API apenas para esta requisição.

Começa com papy_. Não é salva.

Chaves e uso

Para o administrador desta instalação. Digite o token de administrador configurado no servidor (sua impressão é definida em PAPY_ADMIN_TOKEN_HASH). O token fica apenas na memória desta página.

Não é salvo. Enviado apenas a este site.

Proteção de dados

  • Os arquivos enviados à API são processados em memória durante a requisição e não são armazenados.
  • O PapyDocs não grava em seus logs conteúdo de documentos, nomes de arquivos, parâmetros nem chaves.
  • As estatísticas de uso são contadores agregados guardados por 90 dias.
  • Use apenas HTTPS. A API executa os mecanismos do PapyDocs neste servidor; ela não envia seus documentos a nenhum provedor de IA.