Printssistant API

Use your tools programmatically from any script, CLI, or integration.

Authentication

Every authenticated request carries an X-API-Key header with a key you mint from your profile page. Keys begin with psa_live_ and are shown once at creation — store them somewhere safe (a password manager or secrets file).

API keys inherit the limits of the account that owns them: free accounts get 3 uses per week per tool, Pro accounts get unlimited tool calls (with a 20/month cap on AI features). Public tools like /api/v1/tools/evenodd need no auth at all.

curl.exe -X POST "https://printssistant.com/api/v1/tools/duplexer" \
  -H "X-API-Key: YOUR_API_KEY" \
  -F "file=@document.pdf" \
  -F "group_size=1" \
  -F "copies=2"

Note: API keys are deliberately blocked from the key-management endpoints (/api/v1/keys). To list, create, or revoke keys you must sign in with your account on the website — a leaked API key cannot mint or revoke other keys.

Endpoints

Base URL: https://printssistant.com

PDF tools

EndpointMethodAuthParametersDescription
/api/v1/tools/duplexer POST API key (free) file (PDF), group_size (int, default 1), copies (int, default 2) Create duplex-ready imposed PDFs.
/api/v1/tools/cropper POST API key (free) file (PDF), mode (grid|reader_spreads), rows (int, default 2), cols (int, default 2) Auto-crop a grid layout or split reader spreads.
/api/v1/tools/insert POST API key (free) base_file (PDF), insert_file (PDF, optional), interval (int, required), blank_mode (interval|cover, optional) Insert pages from another PDF (or blanks) every N pages.
/api/v1/tools/shuffler/validate POST API key (free) files (2+ PDFs) Pre-check page counts and detect mismatches before merging. Cheap, no output file.
/api/v1/tools/shuffler POST API key (free) files (2+ PDFs), mode (append_remainder|loop_shorter|pad_blanks|truncate, default append_remainder) Round-robin interleave pages from multiple PDFs.
/api/v1/tools/mirror POST API key (free) file (PDF), axis (vertical|horizontal, default vertical) Mirror PDF pages along an axis.
/api/v1/tools/extractor POST API key (free) file (PDF), preset (string, default plus_cover) Split a PDF into a cover file and a body file. Returns two filenames.
/api/v1/tools/evenodd POST None start (int), end (int), type (even|odd) Generate a comma-separated list of even or odd integers.

Image tools

EndpointMethodAuthParametersDescription
/api/v1/tools/vectorizer POST API key (free); ai_enhance=true requires Pro file (image), preset (string, default laser_bw), overrides (JSON string, optional), output_format (svg|pdf, default svg), ai_enhance (true|empty) Vectorize an image with a named preset. Returns preview_bw data URL plus stats.
/api/v1/tools/vectorizer/auto POST API key (free); ai_enhance=true requires Pro file (image), output_format (svg|pdf, default svg), ai_enhance (true|empty) Smart auto-vectorization — no preset selection required.
/api/v1/tools/vectorizer/params GET None preset (query string, default laser_bw) Inspect the tunable parameters for a preset (use to build overrides JSON).
/api/v1/tools/enhancer POST API key, Pro only (20/month cap) file (image), preset (default print_enhance; see /enhancer/presets) AI image enhancement via Claid.ai (background removal, smart crop, print enhance).
/api/v1/tools/enhancer/presets GET None (none) List available enhancer presets and their descriptions.
/api/v1/tools/swatchset POST API key (free) base_c, base_m, base_y, base_k (ints 0-100), goal_type (string, required), goal_r, goal_g, goal_b (ints, optional), goal_hex (string, optional), goal_pantone (string, optional), output_format (pdf|eps, default pdf), reference_image (image upload, optional) Generate a CMYK swatch book to match a target color.

Key management (JWT only)

These endpoints only accept a website session token. API keys are rejected with 403 to prevent a leaked key from minting or revoking other keys. To use them, sign into the website and grab localStorage.getItem('ps_token') from your browser console, or use them server-side after your own login flow.

EndpointMethodAuthBodyDescription
/api/v1/keys GET JWT only (none) List all of your API keys (active + revoked).
/api/v1/keys POST JWT only JSON: {"name": "My laptop"} Mint a new key. The full psa_live_... token is returned exactly once.
/api/v1/keys/{key_id} DELETE JWT only (none) Revoke a key immediately. Subsequent requests with it return 401.

Response format

On success, file-producing tools return:

{ "status": "success", "filename": "duplex_yourfile.pdf" }

Download the result from https://printssistant.com/download/{filename} within 10 minutes — files are deleted from the server after that.

Some tools return extra fields: extractor returns cover_filename + body_filename + page counts, shuffler returns output_pages, vectorizer returns preview_bw + stats, and enhancer returns a metadata object.

Errors come back in one of two shapes:

{ "status": "error", "message": "Failed to process PDF" }

# or for HTTP errors (4xx / 5xx):
{ "detail": "File too large. Maximum size is 50 MB." }

Common HTTP status codes:

  • 200 — success
  • 400 — bad parameters (invalid mode, missing required field)
  • 401 — missing, invalid, or revoked API key
  • 403 — Pro-only feature, or key tried to manage other keys
  • 413 — file exceeds your tier's size cap (50 MB free / 150 MB Pro for PDFs; 20 / 80 MB for images)
  • 422 — file processed but produced no usable output
  • 429 — rate-limited (free-tier weekly cap or Pro monthly cap reached)
  • 500 — server error

Quick start

Three flavors of the same call: upload a PDF to the duplexer, then download the result.

PowerShell (Windows)

# Use curl.exe — Invoke-WebRequest's multipart support is awkward
$key = "psa_live_YOUR_KEY_HERE"
curl.exe -X POST "https://printssistant.com/api/v1/tools/duplexer" `
  -H "X-API-Key: $key" `
  -F "file=@C:\path\to\document.pdf" `
  -F "group_size=1" `
  -F "copies=2"

# Response: {"status":"success","filename":"duplex_document.pdf"}

curl.exe -o "$HOME\Downloads\duplex_document.pdf" `
  "https://printssistant.com/download/duplex_document.pdf"

Bash (macOS / Linux)

KEY="psa_live_YOUR_KEY_HERE"

curl -X POST "https://printssistant.com/api/v1/tools/duplexer" \
  -H "X-API-Key: $KEY" \
  -F "file=@./document.pdf" \
  -F "group_size=1" \
  -F "copies=2"

# Response: {"status":"success","filename":"duplex_document.pdf"}

curl -o ~/Downloads/duplex_document.pdf \
  "https://printssistant.com/download/duplex_document.pdf"

Python (requests)

import requests

KEY = "psa_live_YOUR_KEY_HERE"
BASE = "https://printssistant.com"

with open("document.pdf", "rb") as f:
    r = requests.post(
        f"{BASE}/api/v1/tools/duplexer",
        headers={"X-API-Key": KEY},
        files={"file": ("document.pdf", f, "application/pdf")},
        data={"group_size": "1", "copies": "2"},
        timeout=60,
    )
    r.raise_for_status()
    filename = r.json()["filename"]

# Download the result (available for ~10 minutes)
result = requests.get(f"{BASE}/download/{filename}", timeout=30)
result.raise_for_status()
with open(f"out/{filename}", "wb") as f:
    f.write(result.content)

print(f"Saved out/{filename} ({len(result.content)} bytes)")

Rate limits

  • Free tier: 3 uses per week per tool. The week is anchored to your account creation date.
  • Pro: unlimited tool calls. AI features (image enhancer, vectorizer with ai_enhance=true) are capped at 20 per calendar month.
  • API keys inherit the owning account's tier — a key issued by a Pro account gets Pro limits, no extra configuration needed.
  • File size caps: 50 MB PDF / 20 MB image on free, 150 MB PDF / 80 MB image on Pro.
  • When a limit is reached, the API returns HTTP 429 with a detail message naming the limit and the tool. Retry after the next reset window.

Need higher limits for production use? Upgrade to Pro from your profile, or tell us about your use case.