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/public

Authentification

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.

StatutCodeSens
400tool_size_and_type_requiredUn champ requis manque ou est invalide.
400invalid_webhook_urlL'adresse du webhook n'est pas en HTTPS, ou mène à un réseau privé.
401invalid_api_keyClé absente, inconnue ou révoquée.
402insufficient_balanceVotre solde ne couvre pas une minute de traitement de l'outil.
403tool_not_availableL'outil n'est pas ouvert à l'API, ou fermé à votre compte.
404—Aucun travail de ce nom pour cette clé.
429rate_limitedPlus 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.

OutilPrix par secondeAccepte

Lister les outils

GET/tools

Les 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

GET/balance

Votre 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

POST/jobs

Dé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

  • toolstringrequis

    Un identifiant d'outil de /tools.

  • sizeintegerrequis

    Taille du fichier, en octets.

  • typestringrequis

    Type du fichier, parmi les accepts de 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.docx

Réponse 201

{
  "id": "6f1c…",
  "upload": {
    "url": "https://…signed…",
    "method": "PUT",
    "headers": { "content-type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document" }
  }
}

Lancer un travail

POST/jobs/{id}/start

Lance 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

  • iduuidrequis

    L'identifiant du travail.

Corps

  • optionsobject

    Les 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

GET/jobs/{id}

L'état du travail : upload, queued (avec sa position), processing, succeeded, failed (avec un code error) ou expired.

Paramètres de chemin

  • iduuidrequis

    L'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

POST/jobs/{id}/result

Rend 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

  • iduuidrequis

    L'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
}