Documentation API

API REST conv2pdf — convertissez, fusionnez, divisez, compressez et protégez des PDF depuis votre application. Hébergement UE, RGPD strict, pas de tier US dans la chaîne.

Démarrage rapide

  1. Créez un compte (gratuit, magic link par email)
  2. Depuis votre tableau de bord, créez une clé API (plan Dev gratuit, 100 conversions/mois pour démarrer)
  3. Authentifiez vos appels avec l'en-tête Authorization: Bearer cpdf_live_…

Base URL

https://api.conv2pdf.com/v1

Authentification

Chaque requête doit inclure l'en-tête HTTP Authorization: Bearer <votre_clé>. Une clé révoquée ou inexistante renvoie un code 401. Un quota dépassé renvoie 429 avec les détails de réinitialisation.

Endpoints

GET /v1/tools

Renvoie la liste des outils disponibles, leurs limites et formats acceptés.

curl https://api.conv2pdf.com/v1/tools \
  -H "Authorization: Bearer cpdf_live_xxx"

POST /v1/convert/:tool

Effectue une conversion. Les fichiers sont envoyés en multipart/form-data.

Outils disponibles : image-to-pdf, office-to-pdf, merge-pdf, split-pdf, compress-pdf, protect-pdf.

Paramètres optionnels (champs form-data) :

Exemple — Image → PDF (curl)

curl -X POST https://api.conv2pdf.com/v1/convert/image-to-pdf \
  -H "Authorization: Bearer cpdf_live_xxx" \
  -F "file=@photo.jpg"

Exemple — Fusion PDF (curl)

curl -X POST https://api.conv2pdf.com/v1/convert/merge-pdf \
  -H "Authorization: Bearer cpdf_live_xxx" \
  -F "file=@doc1.pdf" \
  -F "file=@doc2.pdf" \
  -F "file=@doc3.pdf"

Exemple — Compression (curl)

curl -X POST https://api.conv2pdf.com/v1/convert/compress-pdf \
  -H "Authorization: Bearer cpdf_live_xxx" \
  -F "file=@gros.pdf" \
  -F "quality=medium"

Exemple — Protection par mot de passe (curl)

curl -X POST https://api.conv2pdf.com/v1/convert/protect-pdf \
  -H "Authorization: Bearer cpdf_live_xxx" \
  -F "file=@confidentiel.pdf" \
  -F "password=secret123" \
  -F "prevent_print=on" \
  -F "prevent_copy=on"

Chiffrement AES-256. Le PDF résultant demandera le mot de passe à l'ouverture et appliquera les restrictions cochées.

Réponse en cas de succès

{
  "job_id": "abc123…",
  "status": "success",
  "download_url": "/v1/download/abc123…",
  "size_bytes": 124533,
  "quota": {
    "plan": "starter",
    "monthly_quota": 500,
    "used": 42,
    "period_end": 1715789012345
  }
}

GET /v1/download/:jobId

Télécharge le fichier converti. Le PDF est servi avec Content-Type: application/pdf et Cache-Control: no-store. Disponible 1 heure après la conversion.

curl https://api.conv2pdf.com/v1/download/abc123… \
  -H "Authorization: Bearer cpdf_live_xxx" \
  -o sortie.pdf

Exemples — Node.js

import { readFile } from 'node:fs/promises';

const file = await readFile('./photo.jpg');
const formData = new FormData();
formData.append('file', new Blob([file]), 'photo.jpg');

const res = await fetch('https://api.conv2pdf.com/v1/convert/image-to-pdf', {
  method: 'POST',
  headers: { 'Authorization': 'Bearer cpdf_live_xxx' },
  body: formData
});
const data = await res.json();
console.log(data.download_url);

Exemples — Python

import requests

with open('photo.jpg', 'rb') as f:
    r = requests.post(
        'https://api.conv2pdf.com/v1/convert/image-to-pdf',
        headers={'Authorization': 'Bearer cpdf_live_xxx'},
        files={'file': f}
    )
print(r.json()['download_url'])

Codes d'erreur

CodeErreurCause
400not_enough_files / too_many_filesNombre de fichiers hors bornes pour l'outil
401missing_bearer_token / invalid_api_keyAuth manquante ou clé invalide
403forbiddenJob appartient à une autre clé
404tool_not_found / job_not_foundOutil ou job inexistant
409job_not_readyConversion non terminée
410file_expiredFichier supprimé (TTL 1 h dépassé)
413file_too_largeFichier > 200 Mo (limite API)
415unsupported_formatExtension non acceptée par l'outil
429quota_exceededQuota mensuel atteint
500failedErreur de conversion serveur (détail dans le champ error)

Quotas et réinitialisation

Chaque clé API a un quota mensuel selon son plan (voir tarifs). La période est roulante sur 30 jours à partir de la date de création de la clé. À la fin de chaque période, used_current_period est automatiquement remis à zéro.

Confidentialité

Aucun fichier (entrée ou sortie) n'est conservé au-delà de 1 heure. Aucun cache résultat n'est appliqué. L'intégralité du traitement a lieu sur des serveurs UE (OVH Gravelines). Voir notre politique de confidentialité pour le détail.

Support

Pour toute question technique, utilisez notre formulaire de contact (sujet « Question technique »). Plans Business et Enterprise : support prioritaire avec SLA contractuel.