Toolorah API
L’accès à l’API n’est pas disponible pour les nouveaux abonnements.
Démarrage rapide
Chaque outil utilise l’endpoint indiqué ci-dessous. Envoyez votre clé API comme jeton bearer et un corps JSON contenant input et options. Voici le même appel dans trois langages : POST /api/v1/<tool> { input, options }
curl -X POST https://www.toolorah.com/api/v1/base64 \
-H "Authorization: Bearer nt_live_xxx" \
-H "Content-Type: application/json" \
-d '{"input":"hello world","options":{"mode":"encode"}}' const res = await fetch("https://www.toolorah.com/api/v1/base64", {
method: "POST",
headers: {
"Authorization": "Bearer nt_live_xxx",
"Content-Type": "application/json",
},
body: JSON.stringify({ input: "hello world", options: { mode: "encode" } }),
});
const data = await res.json();
console.log(data.result); // "aGVsbG8gd29ybGQ=" import requests
res = requests.post(
"https://www.toolorah.com/api/v1/base64",
headers={"Authorization": "Bearer nt_live_xxx"},
json={"input": "hello world", "options": {"mode": "encode"}},
)
print(res.json()["result"]) # aGVsbG8gd29ybGQ= Authentification
Créez une clé sur la page des clés API, puis envoyez-la comme jeton bearer avec chaque requête : Obtenir une clé API
Authorization: Bearer nt_live_xxxxxxxxxxxxxxxx Les clés disposent des autorisations du forfait avec lequel elles ont été créées. Traitez-les comme des mots de passe : conservez-les côté serveur et révoquez toute clé exposée depuis la page des clés.
Requêtes et réponses
Tous les endpoints utilisent POST et acceptent un corps JSON avec deux champs :
input— le texte (ou le fichier base64 pour les outils PDF) à traiter.options— un objet de paramètres propre à l’outil. Facultatif ; des valeurs par défaut adaptées sont utilisées.
Un appel réussi renvoie 200 avec cette structure :
{
"tool": "base64",
"result": "aGVsbG8gd29ybGQ=",
"meta": { }
} Les erreurs renvoient un statut autre que 2xx avec un seul champ error :
{ "error": "Invalid or revoked API key." } Limites de débit
- Pro — 1 000 appels/jour
- Elite — 10 000 appels/jour
Les limites sont réinitialisées à 00:00 UTC. Chaque réponse indique votre budget actuel :
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 942 Une fois la limite dépassée, les appels renvoient 429 avec un en-tête Retry-After. Les requêtes mal formées ne sont pas décomptées.
Requêtes par lot
Traitez plusieurs entrées en une seule requête au lieu de boucler un appel HTTP par élément. Envoyez inputs sous forme de tableau de chaînes ; options s'applique à chaque élément. Disponible sur Pro (25 entrées par requête) et Elite (250).
curl -X POST https://www.toolorah.com/api/v1/base64/batch -H "Authorization: Bearer nt_live_..." -H "Content-Type: application/json" -d '{"inputs":["hello","world"],"options":{"mode":"encode"}}' {
"tool": "base64",
"count": 2,
"succeeded": 2,
"failed": 0,
"results": [
{ "index": 0, "result": "aGVsbG8=" },
{ "index": 1, "result": "d29ybGQ=" }
]
} Chaque entrée consomme un appel de votre quota quotidien : les lots économisent des allers-retours, pas du quota. Un lot qui dépasserait votre limite quotidienne est refusé en entier et rien n'est traité, vous ne recevez donc jamais un ensemble de résultats incomplet.
Les résultats reviennent dans le même ordre que les entrées, chacun étiqueté avec son index. Une entrée incorrecte n'annule pas les autres : elle renvoie un champ error pour cet index tandis que tous les autres résultats aboutissent. Vérifiez succeeded et failed dans la réponse.
| Offre | Entrées par requête |
|---|---|
| Free | — |
| Pro | 25 |
| Elite | 250 |
Endpoints utilitaires
Deux endpoints GET pour découvrir ce que vous pouvez appeler et le quota qu'il vous reste. Les deux nécessitent la même clé bearer.
| Endpoint | Corps |
|---|---|
GET /api/v1/tools | Liste tous les outils appelables avec leur endpoint, s'ils acceptent du texte ou un fichier, et la limite de lot de votre offre. Utilisez-le plutôt que de coder en dur une liste qui se périmera dès que nous ajouterons des outils. |
GET /api/v1/usage | Renvoie votre offre, l'utilisation du jour et les appels restants, votre limite de lot et l'heure de réinitialisation du quota. Il ne compte PAS dans votre quota, vous pouvez donc l'interroger sans risque. |
{
"plan": "pro",
"daily": { "limit": 1000, "used": 42, "remaining": 958 },
"batch": { "maxInputsPerRequest": 25 },
"resetsAt": "2026-08-24T00:00:00.000Z"
} Endpoints
Outils de texte et utilitaires. Utilisez les options indiquées pour contrôler leur comportement.
| Outil | Endpoint | Options |
|---|---|---|
base64 | POST /api/v1/base64 | { "mode": "encode" } mode: encode | decode |
url-encoder | POST /api/v1/url-encoder | { "mode": "encode" } mode: encode | decode |
json-formatter | POST /api/v1/json-formatter | { "mode": "format", "indent": 2 } mode: format | minify | validate |
jwt-decoder | POST /api/v1/jwt-decoder | Décode l’en-tête et le payload (sans vérifier la signature). |
hash-generator | POST /api/v1/hash-generator | { "algo": "SHA-256" } algo: SHA-1 | SHA-256 | SHA-512 |
regex-tester | POST /api/v1/regex-tester | { "pattern": "\\d+", "flags": "g", "mode": "match" } mode: match | replace (+ replaceWith) |
word-counter | POST /api/v1/word-counter | Renvoie le nombre de mots, caractères et phrases. |
case-converter | POST /api/v1/case-converter | { "type": "title" } type: upper, lower, title, sentence, camel, pascal, snake, kebab, constant |
text-cleaner | POST /api/v1/text-cleaner | { "trim": true, "collapseSpaces": true } Nettoie les espaces et caractères spéciaux. |
remove-duplicate-lines | POST /api/v1/remove-duplicate-lines | { "caseSensitive": false } Supprime les lignes en double. |
text-sorter | POST /api/v1/text-sorter | { "order": "asc", "numeric": false } Trie les lignes. |
text-reverser | POST /api/v1/text-reverser | { "mode": "characters" } mode: characters | words | lines |
markdown-formatter | POST /api/v1/markdown-formatter | Convertit Markdown en HTML. |
lorem-ipsum | POST /api/v1/lorem-ipsum | { "count": 3, "unit": "paragraphs" } unit: paragraphs | sentences | words (aucun input requis) |
password-generator | POST /api/v1/password-generator | { "length": 16, "symbols": true } Aucun input requis. |
random-number | POST /api/v1/random-number | { "min": 1, "max": 100, "count": 5 } Aucun input requis. |
percentage-calculator | POST /api/v1/percentage-calculator | { "operation": "percentOf", "a": 20, "b": 150 } operation: percentOf | isWhatPercentOf | percentChange |
bmi-calculator | POST /api/v1/bmi-calculator | { "weight": 70, "height": 175 } |
emi-calculator | POST /api/v1/emi-calculator | { "principal": 300000, "rate": 6.5, "months": 360 } |
sip-calculator | POST /api/v1/sip-calculator | { "amount": 10000, "rate": 12, "years": 10, "mode": "sip", "stepUp": 0 } |
gst-calculator | POST /api/v1/gst-calculator | { "amount": 1000, "rate": 18, "mode": "add", "supply": "intra" } |
income-tax-calculator | POST /api/v1/income-tax-calculator | { "income": 1500000, "regime": "new", "age": "below60", "deductions": 0 } |
uuid-generator | POST /api/v1/uuid-generator | { "count": 5, "upper": false, "noHyphens": false, "braces": false } Génère des UUID v4 (aucun input requis). |
timestamp-converter | POST /api/v1/timestamp-converter | Accepte un timestamp Unix en secondes ou millisecondes et renvoie les valeurs ISO, UTC, locales et epoch. |
css-minifier | POST /api/v1/css-minifier | Minifie le CSS en supprimant commentaires et espaces. |
html-formatter | POST /api/v1/html-formatter | { "mode": "beautify", "indent": 2 } mode: beautify | minify (indent: number | "tab") |
markdown-preview | POST /api/v1/markdown-preview | Convertit Markdown en HTML. |
Endpoints PDF
Les outils PDF traitent des fichiers. Les requêtes contiennent les fichiers encodés en base64 dans le JSON et result contient le PDF de sortie en base64. Gardez la charge décodée sous environ 4 Mo. WebP est réservé au navigateur ; envoyez du PNG ou du JPG.
| Outil | Endpoint | Corps |
|---|---|---|
pdf-merger | POST /api/v1/pdf-merger | { "files": ["<base64>", "<base64>", …] } De 2 à 20 PDF, fusionnés dans l’ordre du tableau. |
pdf-splitter | POST /api/v1/pdf-splitter | { "file": "<base64>", "options": { "mode": "extract", "pages": "1-3, 5" } } mode: extract | remove. Les plages de pages fonctionnent comme dans l’interface. |
png-to-pdf | POST /api/v1/png-to-pdf | { "images": ["<base64>", …], "options": { "pageSize": "a4", "orientation": "auto", "margin": "small" } } De 1 à 50 images PNG/JPG, une par page. pageSize: a4 | letter | fit ; margin: none | small | large. |
# Merge two PDFs (bash)
curl -X POST https://www.toolorah.com/api/v1/pdf-merger \
-H "Authorization: Bearer nt_live_xxx" \
-H "Content-Type: application/json" \
-d "{\"files\":[\"$(base64 -w0 a.pdf)\",\"$(base64 -w0 b.pdf)\"]}" \
| jq -r '.result' | base64 -d > merged.pdf Erreurs
401— clé API absente ou invalide403— votre forfait ne donne pas accès à l’API404— outil inconnu422— entrée incorrecte (par exemple JSON ou regex invalide)429— limite quotidienne atteinte