API

Tout ce que fait le site se fait aussi en HTTP. Une clé, une requête, un identifiant de travail à interroger. Les exemples ci-dessous sont copiables tels quels : remplacez la clé, ils fonctionnent.

Toutes nos clés commencent par prk_. Ce préfixe permet aux détecteurs de secrets de GitHub de vous prévenir si l'une d'elles est publiée par erreur.

Démarrer en deux minutes

Aucune clé n'est nécessaire. C'est le premier appel à tenter quand quelque chose ne va pas.

curl https://pdfremakeit.app/v1/status

Authentification

Chaque appel porte votre clé dans l'en-tête Authorization. La clé vaut mot de passe : elle ne doit jamais partir dans du code exécuté par le navigateur, ni dans un dépôt public.

Adresse de base : https://pdfremakeit.app

Authorization: Bearer prk_…

Clés d'API

Une clé par usage : un environnement compromis se révoque seul.

Vous pouvez avoir jusqu'à 10 clés actives.

Derniers appels

Aucun appel enregistré. Les appels apparaissent ici quelques secondes après leur exécution.

Le détail des appels est conservé trente jours.

Points d'entrée

AppelCléEffet
GET /v1Liste des points d'entrée.
GET /v1/statusÉtat du service et capacité.
GET /v1/toolsCatalogue des outils serveur et formats acceptés.
GET /v1/accountouiFormule, limites et consommation.
GET /v1/logsouiDerniers appels de vos clés.
POST /v1/tools/{outil}ouiSoumet un document. Rend un travail.
GET /v1/jobs/{id}ouiÉtat d'un travail.
GET /v1/jobs/{id}/contentouiTélécharge le résultat.
GET /v1/workflowsouiVos enchaînements enregistrés.
POST /v1/workflowsouiEnregistre un enchaînement.
DELETE /v1/workflows/{id}ouiSupprime un enchaînement. Les exécutions passées restent.
POST /v1/workflows/{id}/runouiLance un enchaînement sur un document.
GET /v1/runsouiVos dernières exécutions.
GET /v1/runs/{id}ouiÉtat d'une exécution, étape par étape.
GET /v1/runs/{id}/contentouiTélécharge le résultat final.
POST /v1/runs/{id}/replayouiRejoue une exécution sur le même document.
POST /v1/ai/summarizeouiRésume un texte.
POST /v1/ai/translateouiTraduit un texte.

Convertir un document en PDF

Le document part dans le corps de la requête, brut. Le nom d'origine voyage dans l'en-tête X-Source-Name : c'est son extension qui décide du traitement.

# 1. Envoyer le document. La réponse porte l'identifiant du travail.
curl -X POST https://pdfremakeit.app/v1/tools/office \
  -H "Authorization: Bearer prk_VOTRE_CLE" \
  -H "X-Source-Name: rapport.docx" \
  --data-binary @rapport.docx

# 2. Interroger le travail jusqu'à "done".
curl https://pdfremakeit.app/v1/jobs/JOB_ID \
  -H "Authorization: Bearer prk_VOTRE_CLE"

# 3. Récupérer le PDF.
curl -L https://pdfremakeit.app/v1/jobs/JOB_ID/content \
  -H "Authorization: Bearer prk_VOTRE_CLE" \
  -o rapport.pdf

Reconnaître le texte d'un scan

Même déroulé que la conversion : seuls l'outil et ses réglages changent. La langue se passe en paramètre d'adresse.

curl -X POST "https://pdfremakeit.app/v1/tools/ocr?langues=fra" \
  -H "Authorization: Bearer prk_VOTRE_CLE" \
  -H "X-Source-Name: scan.pdf" \
  --data-binary @scan.pdf

Résumer un texte

Le résumé ne prend pas de fichier mais du texte : extrayez-le d'abord, par exemple avec l'outil OCR ci-dessus, ou depuis votre propre source.

curl -X POST https://pdfremakeit.app/v1/ai/summarize \
  -H "Authorization: Bearer prk_VOTRE_CLE" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Le rapport annuel 2025 fait état d un chiffre d affaires de 184 000 euros...",
    "length": "short",
    "format": "bullets"
  }'

Traduire au fil de l'eau

Avec "stream": true, la réponse est un flux NDJSON : un objet JSON par ligne. C'est ce qui permet d'afficher le texte pendant qu'il s'écrit.

curl -N -X POST https://pdfremakeit.app/v1/ai/translate \
  -H "Authorization: Bearer prk_VOTRE_CLE" \
  -H "Content-Type: application/json" \
  -d '{"text": "Bonjour le monde.", "targetLanguage": "en", "stream": true}'

# {"t":"debut","blocs":1,...}
# {"t":"texte","v":"Hello"}
# {"t":"texte","v":" world."}
# {"t":"fin","caracteres":12}

Enchaîner plusieurs outils

Un workflow s'enregistre une fois, puis se lance d'un seul appel : le résultat de chaque étape devient l'entrée de la suivante. Réservé aux formules payantes. Cinq étapes au plus, et seule la première peut refuser le PDF.

# 1. Enregistrer l'enchaînement. Rendu une fois pour toutes.
curl -X POST https://pdfremakeit.app/v1/workflows \
  -H "Authorization: Bearer prk_VOTRE_CLE" \
  -H "Content-Type: application/json" \
  -d '{"name":"Courrier scanné",
       "steps":[{"tool":"ocr","settings":{"langues":"fra"}},
                {"tool":"pdfa","settings":{"niveau":"2b"}}]}'

# 2. Le lancer sur un document. Le quota des deux étapes est réservé ici.
curl -X POST https://pdfremakeit.app/v1/workflows/WORKFLOW_ID/run \
  -H "Authorization: Bearer prk_VOTRE_CLE" \
  -H "X-Source-Name: courrier.pdf" \
  --data-binary @courrier.pdf

# 3. Suivre, puis récupérer le PDF de la dernière étape.
curl https://pdfremakeit.app/v1/runs/RUN_ID -H "Authorization: Bearer prk_VOTRE_CLE"
curl -L https://pdfremakeit.app/v1/runs/RUN_ID/content \
  -H "Authorization: Bearer prk_VOTRE_CLE" \
  -o archive.pdf

Rejouer une exécution

Sans renvoyer le document : il est encore chez nous tant que court la conservation de votre formule. Passé ce délai, l'appel répond source_expired.

curl -X POST https://pdfremakeit.app/v1/runs/RUN_ID/replay \
  -H "Authorization: Bearer prk_VOTRE_CLE"

Lire son quota

À appeler avant une série d'appels plutôt qu'après un refus : `resetsAt` dit à quelle heure le compteur repart.

curl https://pdfremakeit.app/v1/account \
  -H "Authorization: Bearer prk_VOTRE_CLE"

Erreurs

Toutes les erreurs ont la même forme. Testez le code, jamais le message : le code fait partie du contrat, le message peut être réécrit.

{
  "error": {
    "code": "quota_exceeded",
    "message": "The daily job quota for this account is exhausted.",
    "plan": "libre",
    "used": 3,
    "limit": 3,
    "resetsAt": 1787011200000,
    "documentation": "https://pdfremakeit.app/api#quota_exceeded"
  }
}
codeHTTPCe qui s'est passéQue faire
missing_api_key401Aucune clé envoyée.Ajouter l'en-tête Authorization: Bearer.
invalid_api_key401Clé inconnue ou révoquée.Vérifier la clé, ou en créer une nouvelle.
rate_limited429Trop d'appels sur la minute.Attendre la durée annoncée par l'en-tête Retry-After, puis reprendre.
quota_exceeded429Quota du jour epuise.Reprendre à l'heure donnée par resetsAt, ou changer de formule.
too_many_concurrent_jobs429Trop de travaux en cours en même temps.Attendre qu'un travail aboutisse avant d'en lancer un autre.
unknown_tool404Outil inexistant.Voir GET /v1/tools.
unsupported_input415L'outil n'accepte pas cette extension.Consulter le champ accepts de la réponse.
missing_filename400Nom d'origine absent.Ajouter X-Source-Name, ou ?filename=.
empty_body400Corps de requête vide.Envoyer le document en corps brut.
file_too_large413Fichier au-delà de la limite.Voir maxUploadBytes dans la réponse.
invalid_request400Corps JSON mal formé.Vérifier le champ text.
text_too_short400Texte trop court — souvent un scan sans couche de texte.Passer le document à l'OCR d'abord.
text_too_long413Texte au-delà de la limite.Découper le document et recombiner les résultats.
unsupported_language400Langue cible hors du domaine du modèle.Voir le champ supported de la réponse.
job_not_ready409Le travail n'a pas encore abouti.Interroger /v1/jobs/{id} jusqu'à « done ».
result_expired410Résultat purgé.Relancer le travail ; voir la rétention de votre formule.
plan_required403Les workflows sont réservés aux formules payantes.Changer de formule, ou lancer les outils un par un.
invalid_workflow400Enchaînement refusé : étape inconnue, trop d'étapes, ou outil qui n'accepte pas le PDF ailleurs qu'en première position.Voir le champ details, qui nomme l'étape fautive.
too_many_workflows409Nombre maximal d'enchaînements atteint.Supprimer un enchaînement devenu inutile.
source_expired410Le document d'origine a été purgé : il n'y a plus rien à rejouer.Relancer le workflow en renvoyant le fichier.
not_found404Chemin ou travail inexistant.Vérifier l'identifiant.
service_capacity503Service suspendu, le temps d'absorber un afflux.Réessayer plus tard ; les formules payantes passent en premier.
internal_error500Panne de notre côté.Rien n'a été décompté : réessayer.

Quotas et débit

Une clé consomme le quota de son compte : passer par l'API ne double pas ce à quoi vous avez droit. Le débit, lui, se compte par clé — vos environnements ne se gênent pas entre eux.

  • 60 requêtes par minute et par clé.
  • Formule gratuite : 3 travaux et 20 000 caractères par jour.
  • Formule Pro : 3 000 travaux et 20 000 000 caractères par jour.

Voir les formules

Bibliothèques

Les deux bibliothèques couvrent l'attente d'un travail, les erreurs typées et le flux mot à mot. Elles ne sont pas obligatoires : l'API se consomme très bien avec curl.

npm install @pdfremakeit/sdk
pip install pdfremakeit