Développeurs
Référence de l'API Toolty
Convertissez Word, Excel et PowerPoint en PDF, un PDF en Word, et rendez un PDF scanné cherchable depuis votre code. Ouverte à tout compte : facturée à la seconde de traitement, sur un solde prépayé rechargé dès 5 $.
Introduction
L'API est en REST sur HTTPS, avec des corps JSON. Les fichiers ne passent jamais par l'API elle-même : vous les déposez et les récupérez par des adresses signées de courte durée. Un travail tient en quatre appels : ouvrir, déposer, lancer, récupérer le résultat.
Adresse de base
https://toolty.io/api/v1/publicAuthentification
Envoyez votre clé dans l'en-tête Authorization. Créez vos clés dans votre compte, section API : une clé n'est montrée qu'une fois, seule son empreinte est gardée, et vous pouvez la révoquer à tout moment.
Authorization: Bearer tk_live_…Erreurs
Une erreur rend un statut HTTP et un corps JSON portant un code error.
| Statut | Code | Sens |
|---|---|---|
| 400 | tool_size_and_type_required | Un champ requis manque ou est invalide. |
| 400 | invalid_webhook_url | L'adresse du webhook n'est pas en HTTPS, ou mène à un réseau privé. |
| 401 | invalid_api_key | Clé absente, inconnue ou révoquée. |
| 402 | insufficient_balance | Votre solde ne couvre pas une minute de traitement de l'outil. |
| 403 | tool_not_available | L'outil n'est pas ouvert à l'API, ou fermé à votre compte. |
| 404 | — | Aucun travail de ce nom pour cette clé. |
| 429 | rate_limited | Plus de 60 appels en une minute avec cette clé. |
Limites et fichiers
60 appels par minute et par clé, deux travaux en cours à la fois. Les fichiers déposés et les résultats sont supprimés au plus tard une heure après le traitement.
Webhooks
Donnez une adresse HTTPS webhook au lancement d'un travail. À sa fin, nous y postons le travail, signé avec le secret de webhook de votre clé (affiché dans votre compte). Nous relançons après 1 min, 5 min, 30 min, 2 h, 6 h, 12 h et 24 h jusqu'à une réponse 2xx. Avec Zapier, Make ou n8n, passez par leurs modules HTTP génériques et un déclencheur « Catch hook ».
POST · job.completed
{
"id": "1d7e…",
"type": "job.completed",
"createdAt": "2026-11-05T14:42:10.000Z",
"data": {
"job": { "id": "6f1c…", "tool": "word-to-pdf", "status": "succeeded", "result": { "size": 51022, "expiresAt": "2026-11-05T15:42:00.000Z" } }
}
}Vérifier la signature
import crypto from "node:crypto"
// header = req.headers["toolty-signature"] → "t=1762351200,v1=5f2c…"
function verify(header, rawBody, secret) {
const { t, v1 } = Object.fromEntries(header.split(",").map((p) => p.split("=")))
const expected = crypto.createHmac("sha256", secret).update(`${t}.${rawBody}`).digest("hex")
const fresh = Math.abs(Date.now() / 1000 - Number(t)) < 300
return fresh && crypto.timingSafeEqual(Buffer.from(v1), Buffer.from(expected))
}Outils et prix
Tous les outils que l'API couvrira. Chaque résultat remis se facture à la seconde de traitement, du moment où un worker lance le travail à sa fin, arrondie à la seconde supérieure, au prix par seconde de l'outil. Un travail en échec n'est pas facturé. Ouvrir ou lancer un travail exige un solde qui couvre une minute de traitement de l'outil. Un outil marqué Bientôt est documenté mais pas encore appelable, et un travail ouvert avec lui est refusé par tool_not_available.
| Outil | Prix par seconde | Accepte |
|---|
Lister les outils
/toolsLes outils ouverts à l'API, leur prix par résultat, les formats acceptés, la taille admise et les réglages.
curl https://toolty.io/api/v1/public/tools \
-H "Authorization: Bearer tk_live_…"Réponse 200
{
"tools": [
{
"id": "word-to-pdf",
"title": "Word to PDF",
"pricePerSecondUsd": 0.001714,
"accepts": ["application/vnd.openxmlformats-officedocument.wordprocessingml.document"],
"maxSizeMb": 50,
"options": {}
}
]
}Lire le solde
/balanceVotre solde prépayé, en dollars américains.
curl https://toolty.io/api/v1/public/balance \
-H "Authorization: Bearer tk_live_…"Réponse 200
{
"balanceUsd": 12.5
}Ouvrir un travail
/jobsDéclare le fichier à traiter et rend l'adresse signée où le déposer. Le solde doit couvrir un résultat. Un dépôt ouvert à la fois par clé : un nouveau travail ferme le précédent si son fichier n'a jamais été déposé.
Corps
toolstringrequisUn identifiant d'outil de
/tools.sizeintegerrequisTaille du fichier, en octets.
typestringrequisType du fichier, parmi les
acceptsde l'outil.
curl -X POST https://toolty.io/api/v1/public/jobs \
-H "Authorization: Bearer tk_live_…" \
-H "Content-Type: application/json" \
-d '{"tool":"word-to-pdf","size":48213,"type":"application/vnd.openxmlformats-officedocument.wordprocessingml.document"}'
# Then upload the file to the signed URL
curl -X PUT "$UPLOAD_URL" \
-H "Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document" \
--data-binary @report.docxRéponse 201
{
"id": "6f1c…",
"upload": {
"url": "https://…signed…",
"method": "PUT",
"headers": { "content-type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document" }
}
}Lancer un travail
/jobs/{id}/startLance le travail une fois son fichier déposé. Les réglages sont vérifiés contre les options de l'outil ; ceux qui manquent prennent leur valeur par défaut.
Paramètres de chemin
iduuidrequisL'identifiant du travail.
Corps
optionsobjectLes réglages de l'outil, par identifiant.
webhookstring (https)Appelée à la fin du travail. Voir Webhooks.
curl -X POST https://toolty.io/api/v1/public/jobs/$JOB_ID/start \
-H "Authorization: Bearer tk_live_…" \
-H "Content-Type: application/json" \
-d '{"webhook":"https://example.com/hooks/toolty"}'Réponse 200
{
"id": "6f1c…",
"tool": "word-to-pdf",
"status": "queued"
}Lire un travail
/jobs/{id}L'état du travail : upload, queued (avec sa position), processing, succeeded, failed (avec un code error) ou expired.
Paramètres de chemin
iduuidrequisL'identifiant du travail.
curl https://toolty.io/api/v1/public/jobs/$JOB_ID \
-H "Authorization: Bearer tk_live_…"Réponse 200
{
"id": "6f1c…",
"tool": "word-to-pdf",
"status": "succeeded",
"result": { "size": 51022, "expiresAt": "2026-11-05T15:42:00.000Z" }
}Récupérer le résultat
/jobs/{id}/resultRend une adresse de téléchargement de courte durée. Le premier appel débite les secondes de traitement du travail sur votre solde et dit combien (billedSeconds, chargedUsd) ; les suivants rendent une adresse neuve sans frais. Le fichier est supprimé au plus tard une heure après le traitement.
Paramètres de chemin
iduuidrequisL'identifiant du travail.
curl -X POST https://toolty.io/api/v1/public/jobs/$JOB_ID/result \
-H "Authorization: Bearer tk_live_…"Réponse 200
{
"url": "https://…signed…",
"size": 51022,
"expiresAt": "2026-11-05T15:42:00.000Z",
"billedSeconds": 4,
"chargedUsd": 0.006856
}