API PDFThin

Chargez des PDFs, compressez par taille ou qualite et telechargez les resultats via une API REST.

100req/min
200 MBmax upload
1000max pages
60 heuresfile TTL

Vue d'ensemble

Tous les envois utilisent multipart/form-data. Les reponses sont JSON.

  • URL de base : https://pdfthin.com (ou votre SITE_URL).
  • Limite de debit : RATE_LIMIT_RPM par IP (defaut 60/min).
  • Taille max : MAX_UPLOAD_MB (defaut 200 Mo).
  • Les fichiers sont supprimés après 60 heures.
  • Entrees prises en charge : fichier PDF ; filigrane PNG/JPG jusqu'a 5 Mo.
  • Variantes de televersement : un fichier (optimize/split) ou plusieurs fichiers (organize).

Configuration serveur

Variables d'environnement cles qui influencent le comportement de l'API.

  • REDIS_URL : file de jobs et stockage du statut.
  • S3_ENDPOINT/S3_BUCKET/S3_ACCESS_KEY/S3_SECRET_KEY : stockage objet (optionnel, sinon local).
  • Les fichiers sont supprimés après 60 heures.
  • RATE_LIMIT_RPM et DOWNLOAD_TOKEN_TTL_MIN.

Creer un job (optimize ou split)

POST /api/jobs avec multipart/form-data.

  • mode=split ignore quality et renvoie des parties si besoin.
  • Quand quality est defini, preset/custom_mb est ignore.
  • Avec quality_mode=smart, l'API tente des qualites du plus haut au plus bas pour tenir la taille.
file
file (PDF) obligatoire
Fichier PDF a traiter.
mode
string optionnel
optimize (defaut) ou split.
preset
string optionnel
gmail25 | outlook20 | outlook25 | custom. Obligatoire pour les objectifs de taille si quality n'est pas defini.
custom_mb
int optionnel
Obligatoire si preset=custom. Taille cible en Mo.
quality
string optionnel
screen | ebook | printer | prepress ou 1-100. Interdit pour split.
quality_mode
string optionnel
Utilisez "smart" pour atteindre la taille cible en testant des niveaux de qualite; requiert preset/custom_mb.
watermark
file (PNG/JPG) optionnel
Image de filigrane jusqu'a 5 Mo.
cURL : preset de taille
curl -X POST https://pdfthin.com/api/jobs   -F "[email protected]"   -F "preset=gmail25"   -F "mode=optimize"
cURL : qualite intelligente (taille cible)
curl -X POST https://pdfthin.com/api/jobs   -F "[email protected]"   -F "preset=custom"   -F "custom_mb=12"   -F "quality_mode=smart"   -F "mode=optimize"
cURL : qualite fixe
curl -X POST https://pdfthin.com/api/jobs   -F "[email protected]"   -F "quality=printer"   -F "mode=optimize"

Creer un job (organize)

Utilisez mode=organize pour fusionner, faire pivoter, supprimer, reordonner et diviser des pages.

  • Si plusieurs fichiers sont televerses, ils sont fusionnes dans l'ordre d'envoi.
  • Au moins une operation ou plusieurs fichiers sont requis.
file
file (PDF) obligatoire
Un ou plusieurs fichiers PDF (multiples autorises).
mode
string obligatoire
organize.
rotate_angle
int optionnel
90 | 180 | 270.
rotate_pages
string optionnel
Liste de pages comme 1,3-5.
delete_pages
string optionnel
Pages a supprimer, ex. 2,4,7-9.
order_pages
string optionnel
Ordre explicite des pages, ex. 3,1,2.
split_after
string optionnel
Diviser apres des pages, ex. 2,4,7.
watermark
file (PNG/JPG) optionnel
Image de filigrane jusqu'a 5 Mo.
cURL : fusion + rotation
curl -X POST https://pdfthin.com/api/jobs   -F "[email protected]"   -F "[email protected]"   -F "mode=organize"   -F "rotate_angle=90"   -F "rotate_pages=1-2"

Verifier le statut

GET /api/jobs/{id} renvoie l'etat du job et les fichiers resultats.

  • Valeurs de statut : queued | processing | done | failed.
Exemple de reponse
{
  "id": "job-id",
  "status": "done",
  "progress_pct": 100,
  "expires_at": "2026-01-22T11:02:51Z",
  "result": {
    "kind": "single",
    "files": [
      {
        "name": "output.pdf",
        "size": 503937,
        "download_url": "/api/jobs/job-id/download?index=0"
      }
    ]
  }
}

Telecharger les resultats

GET /api/jobs/{id}/download?index=0

  • Utilisez index=0..n pour les sorties en plusieurs parties.
  • Sans token, l'API renvoie une redirection avec un token de courte duree.
  • TTL du token : DOWNLOAD_TOKEN_TTL_MIN minutes.
cURL : telechargement
curl -L "https://pdfthin.com/api/jobs/job-id/download?index=0" -o output.pdf

Supprimer le job

DELETE /api/jobs/{id} supprime les fichiers stockes et le statut.

  • Retourne 204 No Content.
cURL : suppression
curl -X DELETE https://pdfthin.com/api/jobs/job-id

Codes d'erreur

Les erreurs utilisent JSON : {"error":{"code":"...","message":"..."}}

  • ERR_INVALID_FILE
  • ERR_TOO_LARGE
  • ERR_PASSWORD_PROTECTED
  • ERR_CANNOT_FIT_SINGLE_PAGE
  • ERR_TIMEOUT
  • ERR_INTERNAL
  • ERR_NOT_FOUND
  • ERR_NOT_READY
  • ERR_TOKEN_USED
  • ERR_FORBIDDEN

OpenAPI (brouillon)

Extrait OpenAPI 3.0 minimal pour une integration rapide.

openapi.yaml
openapi: 3.0.3
info:
  title: PDFThin API
  version: "1.0"
paths:
  /api/jobs:
    post:
      summary: Create a job
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
                mode:
                  type: string
                preset:
                  type: string
                custom_mb:
                  type: integer
                quality:
                  type: string
                quality_mode:
                  type: string
                watermark:
                  type: string
                  format: binary
      responses:
        "202":
          description: Accepted
  /api/jobs/{id}:
    get:
      summary: Get job status
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        "200":
          description: OK
    delete:
      summary: Delete job
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        "204":
          description: No Content
  /api/jobs/{id}/download:
    get:
      summary: Download result
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
        - in: query
          name: index
          schema:
            type: integer
      responses:
        "303":
          description: See Other