Developers

Toolorah API

Run our tools programmatically over HTTPS — one consistent endpoint per tool, JSON in and JSON out. Available on Pro (1,000 calls/day) and Elite (10,000 calls/day).

Quickstart

Every tool lives at the endpoint shown below. Send your API key as a bearer token and a JSON body containing input and options. Here is the same call in three languages: POST /api/v1/<tool> { input, options }

curl -X POST https://toolorah.com/api/v1/base64 \
  -H "Authorization: Bearer nt_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{"input":"hello world","options":{"mode":"encode"}}'

Authentication

Create a key on your API keys page, then send it as a bearer token on every request: Get your API key

Authorization: Bearer nt_live_xxxxxxxxxxxxxxxx

Keys carry the permissions of the plan they were created under. Treat them like passwords — keep them server-side, and revoke any key that leaks from the keys page.

Requests & responses

All endpoints use POST and accept a JSON body with two fields:

  • input — the text (or, for PDF tools, base64 file) to process.
  • options — a per-tool object of settings. Optional; sensible defaults apply.

A successful call returns 200 with this envelope:

{
  "tool": "base64",
  "result": "aGVsbG8gd29ybGQ=",
  "meta": { }
}

Errors return a non-2xx status with a single error field:

{ "error": "Invalid or revoked API key." }

Rate limits

  • Pro — 1,000 calls/day
  • Elite — 10,000 calls/day

Limits reset at 00:00 UTC. Every response includes your current budget:

X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 942

Once you are over the limit, calls return 429 with a Retry-After header. Malformed requests do not count against your quota.

Endpoints

Text and utility tools. Pass the listed options to control behaviour.

ToolEndpointOptions
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 Decodes header and payload (no signature verification).
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 Returns word, character, and sentence counts.
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 } Cleans whitespace and special characters.
remove-duplicate-lines POST /api/v1/remove-duplicate-lines { "caseSensitive": false } Removes duplicate lines.
text-sorter POST /api/v1/text-sorter { "order": "asc", "numeric": false } Sorts lines.
text-reverser POST /api/v1/text-reverser { "mode": "characters" } mode: characters | words | lines
markdown-formatter POST /api/v1/markdown-formatter Converts Markdown to HTML.
lorem-ipsum POST /api/v1/lorem-ipsum { "count": 3, "unit": "paragraphs" } unit: paragraphs | sentences | words (no input needed)
password-generator POST /api/v1/password-generator { "length": 16, "symbols": true } No input needed.
random-number POST /api/v1/random-number { "min": 1, "max": 100, "count": 5 } No input needed.
percentage-calculator POST /api/v1/percentage-calculator { "operation": "percentOf", "a": 20, "b": 150 } operation: percentOf | isWhatPercentOf | percentChange
uuid-generator POST /api/v1/uuid-generator { "count": 5, "upper": false, "noHyphens": false, "braces": false } Generates v4 UUIDs (no input needed).
timestamp-converter POST /api/v1/timestamp-converter Accepts a Unix timestamp in seconds or milliseconds and returns ISO, UTC, local, and epoch values.
css-minifier POST /api/v1/css-minifier Minifies CSS by removing comments and whitespace.
html-formatter POST /api/v1/html-formatter { "mode": "beautify", "indent": 2 } mode: beautify | minify (indent: number | "tab")
markdown-preview POST /api/v1/markdown-preview Converts Markdown to HTML.

PDF endpoints

PDF tools work on files, so requests carry base64-encoded files in the JSON body and the response result is the base64 output PDF. Keep total decoded payload under about 4 MB per request. WebP images are browser-only — send PNG or JPG to the API.

ToolEndpointBody
pdf-merger POST /api/v1/pdf-merger { "files": ["<base64>", "<base64>", …] } 2–20 PDFs, merged in array order.
pdf-splitter POST /api/v1/pdf-splitter { "file": "<base64>", "options": { "mode": "extract", "pages": "1-3, 5" } } mode: extract | remove. Page ranges work like the UI tool.
png-to-pdf POST /api/v1/png-to-pdf { "images": ["<base64>", …], "options": { "pageSize": "a4", "orientation": "auto", "margin": "small" } } 1–50 PNG/JPG images, one page each. pageSize: a4 | letter | fit; margin: none | small | large.
# Merge two PDFs (bash)
curl -X POST https://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

Errors

  • 401 — missing or invalid API key
  • 403 — your plan has no API access
  • 404 — unknown tool
  • 422 — bad input (for example invalid JSON or regex)
  • 429 — daily limit reached