Aller au contenu principal
PapyDocs

PapyDocs pour les développeurs

L’API Papy intègre le traitement de documents de PapyDocs à vos applications, sites web et logiciels grâce à une interface REST simple et versionnée.

  • Chaque point d’accès documenté exécute les mêmes moteurs que les outils PapyDocs.
  • Les clés sont stockées sous forme d’empreintes, affichées une seule fois, et peuvent être renouvelées ou révoquées.
  • Les fichiers sont traités en mémoire et jamais conservés ; seuls des compteurs d’utilisation sont gardés.

Vérification de la disponibilité…

Démarrage rapide

  1. Demandez une clé d’API à l’administrateur de ce déploiement PapyDocs (créée dans « Clés et utilisation » ci-dessous).
  2. Envoyez une requête POST multipart/form-data à /api/v1/OPERATION avec vos fichiers PDF et paramètres.
  3. Ajoutez l’en-tête Authorization: Bearer YOUR_KEY à chaque requête.
  4. Lisez le résultat JSON, ou enregistrez le PDF ou le ZIP renvoyé. Les erreurs sont toujours renvoyées en JSON avec un code stable.
Lister les opérations disponibles sur ce déploiement
curl https://papydocs.com/api/v1

Authentification

Chaque requête est authentifiée par une clé d’API envoyée dans l’en-tête Authorization.

HTTP
Authorization: Bearer papy_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  • PapyDocs ne conserve qu’une empreinte SHA-256 de chaque clé, jamais la clé elle-même.
  • Une nouvelle clé n’est affichée qu’une fois, à sa création. Rangez-la dans votre gestionnaire de secrets : elle ne pourra plus être affichée.
  • Le renouvellement émet une nouvelle clé et révoque immédiatement l’ancienne ; la révocation s’applique dès la requête suivante.
  • Appelez l’API depuis votre serveur. Ne placez jamais une clé dans une page web ou dans une application mobile.

Référence des points d’accès

Toutes les opérations sont des requêtes POST vers /api/v1/OPERATION avec un corps multipart/form-data. Les opérations JSON renvoient application/json ; les opérations sur fichiers renvoient directement le PDF ou le ZIP.

Opérations sur les documents

POST/api/v1/info— Informations sur le document

Renvoie le nombre de pages, la taille et les métadonnées d’un PDF.

ChampTypeObligatoire
fileFichier PDFOui

Réponse : JSON

Exemples de code et de réponse
cURL
curl -X POST "https://papydocs.com/api/v1/info" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf"
Exemple de réponse (abrégé)
{
  "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— Fusionner

Fusionne plusieurs PDF dans l’ordre d’envoi.

ChampTypeObligatoire
filesPlusieurs fichiers PDFOui

Réponse : Fichier PDF

Exemples de code et de réponse
cURL
curl -X POST "https://papydocs.com/api/v1/merge" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "files=@document.pdf" \
  -F "files=@other.pdf" \
  -o result.pdf

POST/api/v1/split— Diviser

Divise un PDF par plages de pages (ex. 1-2,5) ou en un fichier par page ; renvoie un ZIP.

ChampTypeObligatoire
fileFichier PDFOui
modeUne valeur parmi (ranges | every-page)Non
rangesTexteNon

Réponse : Archive ZIP de fichiers PDF

Exemples de code et de réponse
cURL
curl -X POST "https://papydocs.com/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— Compresser

Optimisation structurelle sans perte d’un PDF (les images ne sont pas réencodées).

ChampTypeObligatoire
fileFichier PDFOui

Réponse : Fichier PDF

Exemples de code et de réponse
cURL
curl -X POST "https://papydocs.com/api/v1/compress" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf" \
  -o result.pdf

POST/api/v1/rotate— Faire pivoter

Fait pivoter toutes les pages de 90, 180 ou 270 degrés.

ChampTypeObligatoire
fileFichier PDFOui
angleUne valeur parmi (90 | 180 | 270)Non

Réponse : Fichier PDF

Exemples de code et de réponse
cURL
curl -X POST "https://papydocs.com/api/v1/rotate" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf" \
  -F 'angle=90' \
  -o result.pdf

POST/api/v1/page-numbers— Numéros de page

Ajoute des numéros de page à partir d’un modèle utilisant les variables {page} et {total} (caractères latins).

ChampTypeObligatoire
fileFichier PDFOui
formatTexteNon
startNombreNon

Réponse : Fichier PDF

Exemples de code et de réponse
cURL
curl -X POST "https://papydocs.com/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— Filigrane

Ajoute un filigrane de texte en diagonale sur chaque page (caractères latins).

ChampTypeObligatoire
fileFichier PDFOui
textTexteOui
opacityNombreNon

Réponse : Fichier PDF

Exemples de code et de réponse
cURL
curl -X POST "https://papydocs.com/api/v1/watermark" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf" \
  -F 'text=CONFIDENTIAL' \
  -F 'opacity=0.2' \
  -o result.pdf

Intelligence documentaire

POST/api/v1/text— Extraire le texte

Renvoie le texte de chaque page et indique si le document semble numérisé (needsOcr). Aucun OCR n’est effectué sur le serveur.

ChampTypeObligatoire
fileFichier PDFOui

Réponse : JSON

Exemples de code et de réponse
cURL
curl -X POST "https://papydocs.com/api/v1/text" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf"
Exemple de réponse (abrégé)
{
  "pages": [
    {
      "page": 1,
      "text": "Facture N° FAC-2026-0042\nTotal TTC 144,00 €"
    }
  ],
  "characters": 41,
  "needsOcr": false
}

POST/api/v1/invoice— Extraire les données de factures

Extrait fournisseur, client, numéro, dates, devise, montants, lignes d’articles, conditions de paiement et référence de commande, chacun avec sa page et sa ligne source, ainsi que des contrôles de cohérence. Les valeurs manquantes sont renvoyées à null, jamais estimées.

ChampTypeObligatoire
fileFichier PDFOui

Réponse : JSON

Exemples de code et de réponse
cURL
curl -X POST "https://papydocs.com/api/v1/invoice" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf"
Exemple de réponse (abrégé)
{
  "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— Analyser un contrat

Renvoie les titres de clauses, les passages par thème (parties, paiement, durée, résiliation…), les dates, montants, préavis et passages à vérifier, tous copiés du document avec leur page. Repères par mots-clés, pas un conseil juridique.

ChampTypeObligatoire
fileFichier PDFOui

Réponse : JSON

Exemples de code et de réponse
cURL
curl -X POST "https://papydocs.com/api/v1/contract" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf"
Exemple de réponse (abrégé)
{
  "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— Comparer deux versions

Compare le texte de deux PDF page par page et renvoie les passages ajoutés, supprimés et modifiés avec leur contexte.

ChampTypeObligatoire
originalFichier PDFOui
revisedFichier PDFOui

Réponse : JSON

Exemples de code et de réponse
cURL
curl -X POST "https://papydocs.com/api/v1/compare" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "original=@contract-v1.pdf" \
  -F "revised=@contract-v2.pdf"
Exemple de réponse (abrégé)
{
  "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— Corriger

Applique les règles de correction locales de PapyDocs (espacement, ponctuation, mots répétés, majuscules, fautes courantes) et renvoie chaque problème avec sa correction et sa position.

ChampTypeObligatoire
fileFichier PDFOui
languageUne valeur parmi (auto | fr | en | es | pt)Non

Réponse : JSON

Exemples de code et de réponse
cURL
curl -X POST "https://papydocs.com/api/v1/proofread" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf" \
  -F 'language=auto'
Exemple de réponse (abrégé)
{
  "language": "fr",
  "engine": "local-rules",
  "issues": [
    {
      "page": 1,
      "start": 11,
      "end": 15,
      "original": "recu",
      "suggestion": "reçu",
      "category": "spelling",
      "rule": "misspelling"
    }
  ]
}

Sécurité et confidentialité

POST/api/v1/remove-metadata— Supprimer les métadonnées

Supprime les métadonnées du document et le contenu actif (JavaScript, fichiers joints).

ChampTypeObligatoire
fileFichier PDFOui

Réponse : Fichier PDF

Exemples de code et de réponse
cURL
curl -X POST "https://papydocs.com/api/v1/remove-metadata" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf" \
  -o result.pdf

POST/api/v1/protect— Protéger par mot de passe

Chiffre un PDF (AES-256) avec un mot de passe d’ouverture.

ChampTypeObligatoire
fileFichier PDFOui
passwordTexteOui
owner_passwordTexteNon

Réponse : Fichier PDF

Exemples de code et de réponse
cURL
curl -X POST "https://papydocs.com/api/v1/protect" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf" \
  -F 'password=your-password' \
  -o result.pdf

POST/api/v1/unlock— Retirer un mot de passe

Déchiffre un PDF lorsque le bon mot de passe est fourni.

ChampTypeObligatoire
fileFichier PDFOui
passwordTexteOui

Réponse : Fichier PDF

Exemples de code et de réponse
cURL
curl -X POST "https://papydocs.com/api/v1/unlock" \
  -H "Authorization: Bearer $PAPY_API_KEY" \
  -F "file=@document.pdf" \
  -F 'password=your-password' \
  -o result.pdf

Points d’accès de gestion des clés

Réservés à l’administrateur du déploiement, authentifié par le jeton administrateur (et non par une clé d’API). Ils sont utilisés par la section « Clés et utilisation » de cette page.

  • GET/api/v1/keys— Lister les clés (sans les secrets)
  • POST/api/v1/keys— Créer une clé (corps JSON avec un nom) ; le secret n’est renvoyé qu’une fois
  • DELETE/api/v1/keys/{id}— Révoquer une clé
  • POST/api/v1/keys/{id}/rotate— Renouveler une clé ; le nouveau secret n’est renvoyé qu’une fois
  • GET/api/v1/usage?days=30— Compteurs d’utilisation par jour, clé et opération

Erreurs et limites

Les erreurs utilisent les codes HTTP standard et un corps JSON avec un code stable, lisible par une machine. Les messages ne sont pas traduits : associez le code dans votre application.

Format des erreurs
{
  "error": {
    "code": "authorization-required"
  }
}
StatutSignificationCodes d’erreur
200Succès
400Paramètre manquant ou invalideinvalid-options, empty-selection
401Clé absente, invalide ou révoquée (ou jeton administrateur)authorization-required
404Opération ou clé inconnueinvalid-options
413Requête ou fichier trop volumineuxrequest-too-large, file-too-large
415Le fichier n’est pas un PDFunsupported-type
422Le PDF ne peut pas être traité (endommagé, chiffré, mauvais mot de passe, sans texte…)corrupt, encrypted, wrong-password, no-text, invalid-range
429Limite horaire atteinte : attendez le nombre de secondes indiqué dans Retry-Afterrate-limited
503L’API, ou la gestion des clés, n’est pas activée sur ce déploiementserver-unavailable

Limites

  • Limite par défaut : 120 requêtes par heure et par clé (configurable par le déploiement).
  • Chaque réponse contient X-RateLimit-Limit, X-RateLimit-Remaining et X-RateLimit-Reset (en secondes).
  • Jusqu’à 100 Mo par PDF, 200 Mo par requête et 60 fichiers par requête.
  • Les opérations sur le texte lisent jusqu’à 500 pages par document ; les recherches sont limitées à 200 caractères et 100 résultats.
  • Les documents numérisés sans couche de texte sont refusés par les opérations d’analyse (erreur no-text) : lancez d’abord un OCR, par exemple avec l’outil OCR de PapyDocs.

Console de test

Envoyez une vraie requête à ce déploiement avec votre clé. La clé reste dans la mémoire de cette page, n’est envoyée qu’à ce site et n’est jamais enregistrée. Les fichiers choisis sont envoyés à l’API pour cette requête uniquement.

Commence par papy_. Non enregistrée.

Clés et utilisation

Pour l’administrateur de ce déploiement. Saisissez le jeton administrateur configuré sur le serveur (son empreinte est définie dans PAPY_ADMIN_TOKEN_HASH). Le jeton reste uniquement dans la mémoire de cette page.

Non enregistré. Envoyé uniquement à ce site.

Protection des données

  • Les fichiers envoyés à l’API sont traités en mémoire pendant la durée de la requête et ne sont pas conservés.
  • PapyDocs n’écrit dans ses journaux ni contenu de document, ni nom de fichier, ni paramètre, ni clé.
  • Les statistiques d’utilisation sont des compteurs agrégés conservés 90 jours.
  • Utilisez uniquement HTTPS. L’API exécute les moteurs de PapyDocs sur ce serveur ; elle n’envoie pas vos documents à un fournisseur d’IA.