Skip to main content
open-toolsopen-tools

API

open-tools API

Programmatic access to all our tools. Use it to wire bulk PDF or image jobs into your own pipelines.

Quick start

  1. Create an account if you don't already have one.
  2. Mint an API key from Account → API Keys. The full token is shown once; copy it now.
  3. Pass the token as Authorization: Bearer otk_… on every request.

Reference

Browse the full API in a fast, searchable reference — every endpoint, its parameters and request/response shapes, with copy-ready examples.

Open the interactive API reference →

Prefer the raw spec or a live console? The machine-readable OpenAPI JSON and the Swagger / ReDoc explorers are available to signed-in accounts:

Example — split a PDF

Upload a file and poll for the result:

# 1. Upload and create the job
curl -X POST 'https://api.open-tools.app/api/upload' \
  -H 'Authorization: Bearer otk_YOUR_KEY' \
  -F 'file=@input.pdf' \
  -F 'job_type=pdf-split' \
  -F 'parameters={"pages": "1-3"}'
# → {"job_id": "abc123", "status": "queued", "ws_token": "..."}

# 2. Poll job status (or subscribe via WebSocket /ws/<job_id>?token=<ws_token>)
curl 'https://api.open-tools.app/api/jobs/abc123' \
  -H 'Authorization: Bearer otk_YOUR_KEY'
# → {"status": "completed", "output_file_url": "https://api.open-tools.app/api/download/users/42/..."}

# 3. Download the result
curl -o output.pdf 'https://api.open-tools.app/api/download/users/42/<uuid>.pdf' \
  -H 'Authorization: Bearer otk_YOUR_KEY'

Error codes

All errors share the same envelope shape:

{
  "detail": {
    "error": {
      "code": "INVALID_FILE_TYPE",
      "message": "image-resize requires PNG, JPG, or WEBP.",
      "details": { "expected_extensions": [".png", ".jpg", ".webp"] }
    }
  }
}
HTTPCodeMeaning
400INVALID_FILE_TYPEFile extension not in this job's allow-list.
400INVALID_FILE_SIGNATUREMagic bytes don't match the extension.
400INVALID_PARAMETERSThe parameters JSON failed schema validation.
401AUTH_REQUIREDNo session cookie or API key on the request.
403REAUTH_REQUIREDSensitive action; session older than 15 min.
413FILE_TOO_LARGEUpload exceeds the 50 MB cap.
429RATE_LIMITEDTier window exceeded. See Retry-After.
500INTERNAL_ERRORBug. Please include the request_id header.

Rate limits & usage

Every account gets per-minute, per-hour, per-day and per-month buckets. The current usage is visible at your account dashboard. Hit a 429? Wait for the window to slide; the response includesRetry-After seconds.