NowToPrint PDF Engine API
World-class PDF prepress analysis, print readiness certification, and smart print routing — available as a REST API and TypeScript SDK.
Capabilities
PDF/X Compliance
PDF/X-4 and PDF/X-6 standard validation
Print IQ Score
0-100 quality score across 6 categories
Smart Routing
Match PDFs to 14+ printing machines
Certificates
SHA-256 tamper-proof print readiness certificates
ICC Profiles
FOGRA, GRACoL, SWOP color profile detection
Ink Coverage
TAC analysis per ISO 12647-2 standards
Visual Anomaly
AI-powered visual defect detection (Gemini)
Webhooks
HMAC-SHA256 signed async notifications
API Reference (v2)
| Method | Endpoint | Description | Auth | Rate Limit |
|---|---|---|---|---|
| POST | /api/v2/pdf/analyze | Submit PDF analysis results for server-side processing. | 🔒 | 20 req/min |
| GET | /api/v2/pdf/analyze?jobId=xxx | Poll for analysis job status and results. | 🔒 | 20 req/min |
| POST | /api/v2/pdf/batch | Batch analysis — up to 20 PDFs in a single request. | 🔒 | 5 req/min |
| GET | /api/v2/pdf/batch | List analysis job history with pagination. | 🔒 | 20 req/min |
| GET | /api/v2/certificate/verify?hash=xxx | Public certificate verification — no auth required. | 🌐 | 30 req/min |
| POST | /api/v1/pdf/preflight | Upload PDF for preliminary validation (v1 gateway). | 🔒 | 10 req/min |
🔑 API Key Authentication
All API requests require authentication. Pass your API key in the Authorization header or X-API-Key depending on the endpoint.
Authorization: Bearer YOUR_API_KEY // or X-API-Key: YOUR_API_KEY
📈 Rate Limiting
API limits are enforced per minute based on your tier. If exceeded, a 429 Too Many Requests response is returned.
- Free Tier: 10 requests / minute
- Pro Tier: 100 requests / minute
- Enterprise Tier: 1000 requests / minute
Resources & Downloads
Code Examples
Node.js (SDK)
import { PrepressClient } from '@nowtoprint/prepress-sdk';
import { readFileSync } from 'fs';
const client = new PrepressClient({
baseUrl: 'https://api.nowtoprint.com',
apiKey: process.env.API_KEY,
});
const fileData = new Blob([readFileSync('print.pdf')]);
const result = await client.analyze(fileData, {
machineType: 'sheetfed_offset'
});
console.log(result.data?.message);Python (Requests)
import requests
url = "https://api.nowtoprint.com/v2/pdf/analyze"
headers = {"Authorization": "Bearer YOUR_API_KEY"}
with open("print.pdf", "rb") as f:
files = {"file": f}
response = requests.post(
url, headers=headers, files=files
)
print(response.json())cURL
curl -X POST https://api.nowtoprint.com/v2/pdf/analyze \ -H "Authorization: Bearer YOUR_API_KEY" \ -F "file=@print.pdf" \ -F "machineType=sheetfed_offset"
Webhook Events
analysis.completedFired when a PDF analysis job finishes successfully.
analysis.failedFired when a PDF analysis job fails.
batch.completedFired when an entire batch job completes.
certificate.generatedFired when a new print readiness certificate is issued.
HMAC-SHA256. Verify the X-NowToPrint-Signature header before processing.