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
| Endpoint | Method | Auth | Parameters | Description |
|---|---|---|---|---|
/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
| Endpoint | Method | Auth | Parameters | Description |
|---|---|---|---|---|
/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.
| Endpoint | Method | Auth | Body | Description |
|---|---|---|---|---|
/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— success400— bad parameters (invalid mode, missing required field)401— missing, invalid, or revoked API key403— Pro-only feature, or key tried to manage other keys413— 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 output429— 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 429with adetailmessage 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.