Quick Start
Get up and running with Synergy in 5 minutes:
Create an Account
Sign up at printwithsynergy.com/register
Create an API Key
Go to Settings → API Keys → Create New Key
Upload Your First Asset
Navigate to Assets and click Upload
Create a Pipeline
Use the visual builder to transform data
Account Setup
Creating Your Account
To get started with Synergy:
- Visit the registration page
- Enter your name, email, and password
- Check your email for a confirmation link
- Click the link to verify your account
- Log in to access your dashboard
Workspaces
Each account has a workspace that contains all your assets, pipelines, and settings. Workspaces provide complete data isolation between accounts.
Authentication
Synergy uses API keys for authentication. All API requests must include your API key in the header:
Authorization: Bearer syn_your_api_key_here
API Key Format
API keys follow this format: syn_xxxxxxxxxxxx
- syn_ - Standard prefix for all Synergy API keys
- Keys are 64 characters long (including prefix)
- Keys are hashed with SHA-256 and never stored in plain text
Dashboard
The dashboard provides an overview of your workspace:
Total Assets
Number of files uploaded to your workspace
Storage Used
Total storage consumed by your assets
Active Pipelines
Pipelines ready to process data
API Calls
API requests this billing period
Recent Activity
The dashboard shows your recent uploads and pipeline executions for quick access.
Assets
Assets are files you upload to Synergy. We automatically extract metadata from each file.
Supported File Types
| Type | Extensions | Metadata Extracted |
|---|---|---|
| Images | JPEG, PNG, TIFF, PSD, WebP | Dimensions, DPI, color space, ICC profile, transparency |
| PDFs | Page count, dimensions, fonts, color space, PDF/X compliance | |
| Fonts | TTF, OTF, WOFF, WOFF2 | Family, weight, style, glyph count |
| Design | AI, EPS, SVG | Dimensions, layer info (where available) |
Uploading Files
- Navigate to the Assets page
- Click the Upload button
- Drag and drop files or click to browse
- Files are processed automatically
- Metadata is extracted and made searchable
Searching Assets
Use the search bar to find assets by:
- Filename
- File type
- Metadata (dimensions, color space, etc.)
- Tags
- Collection name
Filtering by Type
Use the sidebar filters to show only specific file types: All, Images, PDFs, Fonts, or Design Files.
Downloading Assets
Click on any asset to view details, then click Download to get the original file. Downloads use signed URLs that expire after 1 hour.
Collections
Collections help you organize assets into logical groups (like folders).
Creating a Collection
- From the Dashboard sidebar, click New Collection
- Enter a name and optional description
- Click Create
Adding Assets to Collections
- When uploading: Select a collection from the dropdown
- After upload: Open asset details → Change Collection
- Bulk: Select multiple assets → Move to Collection
Pipelines
Pipelines are the core of Synergy. They let you transform data between systems without writing code.
What Pipelines Do
- Receive incoming API requests or webhook data
- Parse JSON, XML, or JDF data
- Transform field mappings and data structure
- Forward to external APIs
- Respond with transformed data
Creating a Pipeline
- Navigate to the Pipelines page
- Click Create Pipeline
- Enter a name and description
- Click Open Builder to use the visual editor
Visual Pipeline Builder
The visual builder uses a drag-and-drop interface:
Input Blocks
Receive incoming data (HTTP, webhook)
Parse Blocks
Parse JSON, XML, or JDF data
Transform Blocks
Map fields, convert formats
Forward Blocks
Send data to external APIs
Pipeline Endpoints
Each pipeline gets a unique endpoint URL:
POST https://printwithsynergy.com/api/v1/pipelines/{pipeline_id}/execute
Testing Pipelines
Use the Test button in the pipeline builder to send sample data and see the transformation results.
Scheduled Automation
Automate pipeline execution with cron schedules, time intervals, or collection watchers that trigger when new files arrive.
Trigger Types
| Type | Description | Use Case |
|---|---|---|
| Cron Schedule | Standard 5-field cron expression | Daily batch processing at 2 AM, weekly reports |
| Interval | Run every X minutes (min: 5) | Polling external APIs, status checks |
| Collection Watch | Trigger when new files arrive | Process uploads automatically, hot folders |
Creating a Schedule
- Navigate to Schedules from the sidebar
- Click New Schedule
- Select a pipeline to run
- Choose a trigger type (Cron, Interval, or Collection Watch)
- Configure the trigger settings
- Click Create Schedule
Cron Expression Examples
| Expression | Description |
|---|---|
0 * * * * |
Every hour at minute 0 |
0 2 * * * |
Daily at 2:00 AM |
0 9 * * 1 |
Every Monday at 9:00 AM |
0 0 1 * * |
First day of each month at midnight |
*/15 * * * * |
Every 15 minutes |
Collection Watchers
Collection watchers monitor a specific collection for new files. When new assets are uploaded to the watched collection, the schedule triggers and processes each new file through the pipeline.
- Watchers check for new files every 5 minutes
- New files are processed in batch
- Each asset is passed to the pipeline as input data
- Run history shows processed and failed asset counts
Managing Schedules
- Pause/Resume: Temporarily disable a schedule without deleting it
- Run Now: Manually trigger a schedule immediately
- View Runs: See execution history with status, timing, and asset counts
schedule.triggered, schedule.completed, and
schedule.failed events.
Connections
Connections store credentials for external services your pipelines connect to.
Connection Types
| Category | Examples | Auth Methods |
|---|---|---|
| Generic | Any REST API | API Key, Bearer Token, Basic Auth |
| Cloud Storage | S3, Azure Blob, Google Cloud | Access Keys, Service Account |
| PrintOS, Enfocus Switch | API Key, OAuth | |
| Notifications | Slack, Email, Webhooks | Webhook URL, API Key |
Creating a Connection
- Navigate to Connections
- Click Add Connection
- Select the connection type
- Enter the connection name and credentials
- Click Test Connection to verify
- Click Save
Webhooks
Receive real-time notifications when events occur in your workspace. Webhooks push data to your systems automatically.
Available Events
| Event | Description |
|---|---|
asset.uploaded |
A new asset has been uploaded |
asset.processed |
Asset metadata extraction completed |
asset.deleted |
An asset has been deleted |
pipeline.started |
Pipeline execution has begun |
pipeline.completed |
Pipeline execution succeeded |
pipeline.failed |
Pipeline execution encountered an error |
Creating a Webhook
- Navigate to Webhooks
- Click Create Webhook
- Enter a name and your endpoint URL
- Select which events to subscribe to
- Optionally add a secret for HMAC verification
- Click Save
Payload Verification
Secure your webhooks with HMAC-SHA256 verification. When you provide a secret, Synergy includes a signature header:
X-Synergy-Signature: sha256=abc123...
Verify the signature in your code by computing HMAC-SHA256 of the raw request body with your secret.
Delivery History
View delivery attempts, response codes, and retry failed deliveries from the webhook detail page. Failed deliveries are automatically retried up to 3 times with exponential backoff.
Audit Logs
Track all actions in your workspace with comprehensive audit logging. Essential for compliance, debugging, and security monitoring.
Tracked Actions
- Asset Actions: Upload, download, delete, metadata changes
- Pipeline Actions: Create, update, delete, execute
- User Actions: Login, logout, password changes, API key creation
- Settings Changes: Profile updates, connection modifications
Viewing Audit Logs
- Navigate to Audit Log
- Use filters to narrow by date range, action type, or status
- Click any entry to view full details including IP address and user agent
Exporting Logs
Export your audit logs as JSON or CSV for compliance reporting or external analysis. Click Export and select your preferred format.
Log Details
Each log entry includes:
- Timestamp and action type
- User who performed the action
- Resource affected (asset, pipeline, etc.)
- IP address and user agent
- Success/failure status
- Additional context and metadata
Part Extraction
Extract components from complex files automatically. Get individual pages from PDFs, layers from PSDs, or embedded images from documents.
Supported Extractions
| Source File | Extractable Parts | Output Format |
|---|---|---|
| Individual pages, embedded images | PNG, JPG | |
| PSD | Individual layers, flattened composite | PNG |
| AI/EPS | Rasterized preview | PNG |
| Multi-page TIFF | Individual frames | PNG, JPG |
Using Part Extraction
- Open an asset detail view by clicking on any compatible file
- Click the Extract Parts button
- Select which parts to extract (pages, layers, images)
- Extracted parts become new assets in your workspace
API Access
Extract parts programmatically:
curl -X POST "https://printwithsynergy.com/api/v1/assets/:id/extract" \
-H "Authorization: Bearer syn_your_api_key" \
-H "Content-Type: application/json" \
-d '{ "type": "pages", "pages": [1, 2, 3] }'
Print Metadata
Synergy automatically extracts print-relevant metadata from uploaded files:
- DPI/Resolution: Dots per inch for print quality verification
- Color Space: CMYK, RGB, Grayscale, or LAB detection
- ICC Profiles: Embedded color profiles (sRGB, Adobe RGB, FOGRA, etc.)
- Bleed/Trim: Bleed box and trim box detection for PDFs
- Font Embedding: Lists all fonts and whether they're embedded
- Transparency: Detects if the file contains transparency
- Spot Colors: Identifies Pantone and other spot colors
Profile Settings
Manage your account information from the Settings page.
Personal Information
- Name: Update your display name
- Email: Contact support to change your email
Preferences
- Dark Mode: Toggle between light and dark themes
- Email Notifications: Enable/disable email alerts
Security
- Change Password: Update your password (requires current password)
- Active Sessions: View and revoke active login sessions
API Keys
API keys authenticate your applications with Synergy.
Creating an API Key
- Go to Settings → API Keys
- Click Create API Key
- Enter a name (e.g., "Production Server")
- Copy the key immediately - it won't be shown again
Managing API Keys
- View key prefix and last used date
- Delete keys that are no longer needed
- Create separate keys for different environments
Billing
Manage your subscription and payment methods.
Current Plan
View your current plan, usage, and renewal date in the Billing section of Settings.
Usage Tracking
- Storage: Total GB used across all assets
- API Calls: Requests this billing period
- Pipeline Runs: Pipeline executions this period
- File Processing: Files processed this period
Upgrading Your Plan
Click Manage Subscription to upgrade, downgrade, or view invoices through our billing portal.
API Overview
The Synergy API is RESTful and returns JSON responses.
Base URL
https://printwithsynergy.com/api/v1
Authentication
Include your API key in the Authorization header:
curl -H "Authorization: Bearer syn_your_key" \
https://printwithsynergy.com/api/v1/assets
Response Format
All responses follow this structure:
{
"success": true,
"data": { ... },
"meta": {
"page": 1,
"limit": 20,
"total": 100
}
}
Error Responses
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid file type"
}
}
Rate Limits
Global rate limit: 500 requests per minute per API key.
API Endpoints
Assets
| Method | Endpoint | Description |
|---|---|---|
| GET | /assets |
List all assets |
| GET | /assets/:id |
Get asset details |
| POST | /assets/upload |
Upload a file |
| DELETE | /assets/:id |
Delete an asset |
| GET | /assets/:id/download |
Get download URL |
Pipelines
| Method | Endpoint | Description |
|---|---|---|
| GET | /pipelines |
List all pipelines |
| GET | /pipelines/:id |
Get pipeline details |
| POST | /pipelines |
Create a pipeline |
| PUT | /pipelines/:id |
Update a pipeline |
| POST | /pipelines/:id/execute |
Execute a pipeline |
Collections
| Method | Endpoint | Description |
|---|---|---|
| GET | /collections |
List all collections |
| POST | /collections |
Create a collection |
| PUT | /collections/:id |
Update a collection |
| DELETE | /collections/:id |
Delete a collection |
Webhooks
| Method | Endpoint | Description |
|---|---|---|
| GET | /webhooks |
List all webhooks |
| POST | /webhooks |
Create a webhook |
| PATCH | /webhooks/:id |
Update a webhook |
| DELETE | /webhooks/:id |
Delete a webhook |
Assets API
Complete examples for managing assets via the API.
List Assets
Get a paginated list of all assets in your workspace.
curl -X GET "https://printwithsynergy.com/api/v1/assets?page=1&limit=20" \
-H "Authorization: Bearer syn_your_api_key"
Query Parameters:
page- Page number (default: 1)limit- Items per page (default: 20, max: 100)type- Filter by type: image, pdf, font, designcollection_id- Filter by collection
// Response
{
"success": true,
"data": [
{
"id": "asset_abc123",
"filename": "brochure.pdf",
"mime_type": "application/pdf",
"file_size": 2457600,
"status": "ready",
"metadata": {
"page_count": 4,
"dimensions": { "width": 612, "height": 792 },
"color_space": "CMYK"
},
"created_at": "2026-01-02T15:30:00Z"
}
],
"meta": { "page": 1, "limit": 20, "total": 45 }
}
Get Asset Details
Retrieve full details and metadata for a specific asset.
curl -X GET "https://printwithsynergy.com/api/v1/assets/asset_abc123" \
-H "Authorization: Bearer syn_your_api_key"
// Response
{
"success": true,
"data": {
"id": "asset_abc123",
"filename": "product-photo.jpg",
"original_filename": "IMG_1234.jpg",
"mime_type": "image/jpeg",
"file_size": 3145728,
"status": "ready",
"metadata": {
"width": 4000,
"height": 3000,
"dpi": 300,
"color_space": "RGB",
"has_transparency": false,
"icc_profile": "sRGB"
},
"collection_id": "col_xyz789",
"tags": ["product", "hero"],
"created_at": "2026-01-02T15:30:00Z",
"updated_at": "2026-01-02T15:30:05Z"
}
}
Upload Asset
Upload a file to your workspace. Use multipart/form-data.
curl -X POST "https://printwithsynergy.com/api/v1/assets/upload" \
-H "Authorization: Bearer syn_your_api_key" \
-F "file=@/path/to/brochure.pdf" \
-F "collection_id=col_xyz789" \
-F "tags=marketing,print"
Form Fields:
file- The file to upload (required)collection_id- Optional collection to add totags- Comma-separated tags
// Response
{
"success": true,
"data": {
"id": "asset_new456",
"filename": "brochure.pdf",
"status": "processing",
"message": "Asset uploaded, processing metadata..."
}
}
Download Asset
Get a signed download URL for an asset (valid for 1 hour).
curl -X GET "https://printwithsynergy.com/api/v1/assets/asset_abc123/download" \
-H "Authorization: Bearer syn_your_api_key"
// Response
{
"success": true,
"data": {
"url": "https://storage.printwithsynergy.com/...",
"expires_at": "2026-01-02T16:30:00Z"
}
}
Delete Asset
Permanently delete an asset. This cannot be undone.
curl -X DELETE "https://printwithsynergy.com/api/v1/assets/asset_abc123" \
-H "Authorization: Bearer syn_your_api_key"
// Response
{
"success": true,
"data": { "message": "Asset deleted successfully" }
}
Pipelines API
Create and execute data transformation pipelines.
List Pipelines
curl -X GET "https://printwithsynergy.com/api/v1/pipelines" \
-H "Authorization: Bearer syn_your_api_key"
// Response
{
"success": true,
"data": [
{
"id": "pipe_abc123",
"name": "Order to JDF",
"description": "Convert e-commerce orders to JDF format",
"status": "active",
"execution_count": 1542,
"last_executed_at": "2026-01-02T15:00:00Z",
"created_at": "2025-12-01T10:00:00Z"
}
]
}
Create Pipeline
Create a new pipeline with blocks configuration.
curl -X POST "https://printwithsynergy.com/api/v1/pipelines" \
-H "Authorization: Bearer syn_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Order Processor",
"description": "Process incoming orders",
"blocks": [
{ "type": "input", "config": { "format": "json" } },
{ "type": "transform", "config": { "mapping": {...} } },
{ "type": "output", "config": { "format": "xml" } }
]
}'
Execute Pipeline
Run a pipeline with input data and get transformed output.
curl -X POST "https://printwithsynergy.com/api/v1/pipelines/pipe_abc123/execute" \
-H "Authorization: Bearer syn_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"order_id": "ORD-12345",
"customer": "Acme Corp",
"items": [
{ "sku": "BRC-001", "quantity": 500 }
]
}'
// Response (transformed to JDF)
{
"success": true,
"data": {
"execution_id": "exec_xyz789",
"status": "completed",
"output": "<JDF...>...</JDF>",
"duration_ms": 45
}
}
Pipeline Block Types
| Block Type | Purpose | Config Options |
|---|---|---|
input |
Receive incoming data | format: json, xml, jdf |
parse |
Parse string data | format, encoding |
transform |
Map and transform fields | mapping, expressions |
validate |
Validate data schema | schema, strict mode |
forward |
Send to external API | connection_id, method, path |
cache |
Cache responses | ttl_seconds, key_pattern |
output |
Return response | format, template |
Collections API
Organize assets into collections.
List Collections
curl -X GET "https://printwithsynergy.com/api/v1/collections" \
-H "Authorization: Bearer syn_your_api_key"
// Response
{
"success": true,
"data": [
{
"id": "col_xyz789",
"name": "Marketing Materials",
"description": "Brochures and flyers",
"asset_count": 24,
"created_at": "2025-12-15T09:00:00Z"
}
]
}
Create Collection
curl -X POST "https://printwithsynergy.com/api/v1/collections" \
-H "Authorization: Bearer syn_your_api_key" \
-H "Content-Type: application/json" \
-d '{ "name": "Q1 Campaign", "description": "Assets for Q1" }'
Get Collection Assets
curl -X GET "https://printwithsynergy.com/api/v1/collections/col_xyz789/assets" \
-H "Authorization: Bearer syn_your_api_key"
Add Asset to Collection
curl -X PUT "https://printwithsynergy.com/api/v1/assets/asset_abc123" \
-H "Authorization: Bearer syn_your_api_key" \
-H "Content-Type: application/json" \
-d '{ "collection_id": "col_xyz789" }'
Connections API
Manage external service connections for use in pipelines.
List Connections
curl -X GET "https://printwithsynergy.com/api/v1/connectors" \
-H "Authorization: Bearer syn_your_api_key"
// Response
{
"success": true,
"data": [
{
"id": "conn_abc123",
"name": "Production MIS",
"type": "generic_rest",
"category": "print",
"base_url": "https://api.example-mis.com",
"auth_type": "bearer",
"status": "active",
"last_used_at": "2026-01-02T14:00:00Z"
}
]
}
Create Connection
curl -X POST "https://printwithsynergy.com/api/v1/connectors" \
-H "Authorization: Bearer syn_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Slack Notifications",
"type": "webhook",
"category": "notifications",
"config": {
"webhook_url": "https://hooks.slack.com/..."
}
}'
Test Connection
curl -X POST "https://printwithsynergy.com/api/v1/connectors/conn_abc123/test" \
-H "Authorization: Bearer syn_your_api_key"
Webhooks API
Manage webhook subscriptions programmatically.
List Webhooks
curl -X GET "https://printwithsynergy.com/api/v1/webhooks" \
-H "Authorization: Bearer syn_your_api_key"
// Response
{
"success": true,
"data": [
{
"id": "wh_abc123",
"name": "Order Notifications",
"url": "https://your-server.com/webhooks/synergy",
"events": ["asset.uploaded", "pipeline.completed"],
"status": "active",
"created_at": "2026-01-02T10:00:00Z"
}
]
}
Create Webhook
curl -X POST "https://printwithsynergy.com/api/v1/webhooks" \
-H "Authorization: Bearer syn_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Asset Notifications",
"url": "https://your-server.com/webhooks",
"events": ["asset.uploaded", "asset.processed"],
"secret": "your-hmac-secret"
}'
Update Webhook
curl -X PATCH "https://printwithsynergy.com/api/v1/webhooks/wh_abc123" \
-H "Authorization: Bearer syn_your_api_key" \
-H "Content-Type: application/json" \
-d '{ "status": "inactive" }'
Delete Webhook
curl -X DELETE "https://printwithsynergy.com/api/v1/webhooks/wh_abc123" \
-H "Authorization: Bearer syn_your_api_key"
Webhook Payload Format
All webhook payloads follow this structure:
{
"id": "evt_xyz789",
"event": "asset.uploaded",
"created_at": "2026-01-02T15:30:00Z",
"data": {
"asset": {
"id": "asset_abc123",
"filename": "brochure.pdf",
"mime_type": "application/pdf",
"file_size": 2457600
}
}
}
Schedules API
Manage pipeline schedules programmatically.
Create Schedule
curl -X POST "https://printwithsynergy.com/api/v1/pipelines/:pipelineId/schedules" \
-H "Authorization: Bearer syn_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Daily Order Sync",
"trigger_type": "cron",
"cron_expression": "0 2 * * *",
"timezone": "America/New_York"
}'
List All Schedules
curl -X GET "https://printwithsynergy.com/api/v1/schedules" \
-H "Authorization: Bearer syn_your_api_key"
Trigger Types
When creating a schedule, set the appropriate fields for your trigger type:
| trigger_type | Required Fields |
|---|---|
cron |
cron_expression, timezone (optional, default UTC)
|
interval |
interval_minutes (min: 5) |
collection_watch |
watch_collection_id |
Pause Schedule
curl -X POST "https://printwithsynergy.com/api/v1/schedules/:id/pause" \
-H "Authorization: Bearer syn_your_api_key"
Resume Schedule
curl -X POST "https://printwithsynergy.com/api/v1/schedules/:id/resume" \
-H "Authorization: Bearer syn_your_api_key"
Manual Trigger
curl -X POST "https://printwithsynergy.com/api/v1/schedules/:id/trigger" \
-H "Authorization: Bearer syn_your_api_key"
Get Schedule Runs
curl -X GET "https://printwithsynergy.com/api/v1/schedules/:id/runs?limit=20" \
-H "Authorization: Bearer syn_your_api_key"
// Response
{
"success": true,
"data": {
"runs": [
{
"id": "run_abc123",
"status": "completed",
"scheduled_for": "2026-01-02T02:00:00Z",
"started_at": "2026-01-02T02:00:01Z",
"completed_at": "2026-01-02T02:00:45Z",
"assets_processed": 15,
"assets_failed": 0
}
]
}
}
Delete Schedule
curl -X DELETE "https://printwithsynergy.com/api/v1/schedules/:id" \
-H "Authorization: Bearer syn_your_api_key"
Search API
Full-text search across assets and metadata.
Search Assets
curl -X GET "https://printwithsynergy.com/api/v1/search?q=brochure&type=pdf" \
-H "Authorization: Bearer syn_your_api_key"
Query Parameters:
q- Search query (searches filename, tags, metadata)type- Filter by file typecollection_id- Search within collectioncolor_space- Filter by CMYK, RGB, etc.min_dpi- Minimum DPI for imagespage,limit- Pagination
// Response
{
"success": true,
"data": [
{
"id": "asset_abc123",
"filename": "product-brochure.pdf",
"mime_type": "application/pdf",
"relevance_score": 0.95,
"highlight": {
"filename": ["product-<em>brochure</em>.pdf"]
}
}
],
"meta": { "query": "brochure", "total": 12 }
}
Advanced Search Examples
Find CMYK images with at least 300 DPI
curl "https://printwithsynergy.com/api/v1/search?type=image&color_space=CMYK&min_dpi=300"
Find PDFs with 4+ pages
curl "https://printwithsynergy.com/api/v1/search?type=pdf&min_pages=4"
Find assets with specific tag
curl "https://printwithsynergy.com/api/v1/search?tags=hero,featured"
Format Translation API
Translate between JSON, XML, JDF, and JMF formats automatically.
Detect Format
curl -X POST "https://printwithsynergy.com/api/v1/format/detect" \
-H "Authorization: Bearer syn_your_api_key" \
-H "Content-Type: application/json" \
-d '{ "content": "<?xml version=\"1.0\"?><root>...</root>" }'
Translate Content
curl -X POST "https://printwithsynergy.com/api/v1/format/translate" \
-H "Authorization: Bearer syn_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"content": "{ \"order_id\": \"12345\" }",
"from_format": "json",
"to_format": "jdf"
}'
Supported Formats
| Format | Description |
|---|---|
json |
Standard JSON format |
xml |
Generic XML format |
jdf |
Job Definition Format (CIP4 JDF 1.5) |
jmf |
Job Messaging Format for print equipment |
Get JDF Templates
curl -X GET "https://printwithsynergy.com/api/v1/format/templates/jdf" \
-H "Authorization: Bearer syn_your_api_key"
Print Packages API
Create print-ready packages and compare PDFs.
Create Print Package
Bundle multiple assets into a ZIP with metadata, preflight reports, and font lists.
curl -X POST "https://printwithsynergy.com/api/v1/assets/export-package" \
-H "Authorization: Bearer syn_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"asset_ids": ["asset_abc123", "asset_def456"],
"name": "Job-12345-Package",
"include_metadata_json": true,
"include_metadata_csv": true,
"include_preflight_report": true,
"include_font_list": true
}'
Compare PDFs
Visual diff comparison of two PDF files, page by page.
curl -X POST "https://printwithsynergy.com/api/v1/assets/compare" \
-H "Authorization: Bearer syn_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"asset_id_a": "asset_abc123",
"asset_id_b": "asset_xyz789"
}'
// Response
{
"success": true,
"data": {
"comparison_id": "cmp_abc123",
"status": "completed",
"pages_compared": 4,
"differences_found": 2,
"pages": [
{ "page": 1, "difference_percent": 0 },
{ "page": 2, "difference_percent": 5.2 },
{ "page": 3, "difference_percent": 0 },
{ "page": 4, "difference_percent": 12.8 }
]
}
}
List Packages
curl -X GET "https://printwithsynergy.com/api/v1/packages" \
-H "Authorization: Bearer syn_your_api_key"
Bulk Operations API
Perform operations on multiple assets at once.
Bulk Add Tags
curl -X POST "https://printwithsynergy.com/api/v1/assets/bulk/tag" \
-H "Authorization: Bearer syn_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"asset_ids": ["asset_abc123", "asset_def456"],
"tags": ["approved", "print-ready"]
}'
Bulk Move to Collection
curl -X POST "https://printwithsynergy.com/api/v1/assets/bulk/move" \
-H "Authorization: Bearer syn_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"asset_ids": ["asset_abc123", "asset_def456"],
"collection_id": "col_xyz789"
}'
Bulk Delete
curl -X POST "https://printwithsynergy.com/api/v1/assets/bulk/delete" \
-H "Authorization: Bearer syn_your_api_key" \
-H "Content-Type: application/json" \
-d '{ "asset_ids": ["asset_abc123", "asset_def456"] }'
Error Codes
Common error codes and how to handle them.
| Code | HTTP Status | Description |
|---|---|---|
UNAUTHORIZED |
401 | Missing or invalid API key |
FORBIDDEN |
403 | API key lacks required permissions |
NOT_FOUND |
404 | Resource does not exist |
VALIDATION_ERROR |
400 | Invalid request parameters |
FILE_TOO_LARGE |
413 | File exceeds 500MB limit |
UNSUPPORTED_TYPE |
415 | File type not supported |
RATE_LIMITED |
429 | Too many requests, slow down |
QUOTA_EXCEEDED |
402 | Plan limits exceeded |
SERVER_ERROR |
500 | Internal error, contact support |
error.message field for specific details
about what went wrong.
Code Examples
Example code in popular languages.
JavaScript / Node.js
const SYNERGY_API_KEY = process.env.SYNERGY_API_KEY;
const BASE_URL = 'https://printwithsynergy.com/api/v1';
// List assets
async function listAssets() {
const response = await fetch(`${BASE_URL}/assets`, {
headers: {
'Authorization': `Bearer ${SYNERGY_API_KEY}`
}
});
return response.json();
}
// Upload a file
async function uploadFile(file) {
const formData = new FormData();
formData.append('file', file);
const response = await fetch(`${BASE_URL}/assets/upload`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${SYNERGY_API_KEY}`
},
body: formData
});
return response.json();
}
// Execute a pipeline
async function executePipeline(pipelineId, data) {
const response = await fetch(`${BASE_URL}/pipelines/${pipelineId}/execute`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${SYNERGY_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
});
return response.json();
}
Python
import os
import requests
SYNERGY_API_KEY = os.environ.get('SYNERGY_API_KEY')
BASE_URL = 'https://printwithsynergy.com/api/v1'
headers = {'Authorization': f'Bearer {SYNERGY_API_KEY}'}
# List assets
def list_assets():
response = requests.get(f'{BASE_URL}/assets', headers=headers)
return response.json()
# Upload a file
def upload_file(filepath):
with open(filepath, 'rb') as f:
files = {'file': f}
response = requests.post(
f'{BASE_URL}/assets/upload',
headers=headers,
files=files
)
return response.json()
# Execute a pipeline
def execute_pipeline(pipeline_id, data):
response = requests.post(
f'{BASE_URL}/pipelines/{pipeline_id}/execute',
headers={**headers, 'Content-Type': 'application/json'},
json=data
)
return response.json()
PHP
<?php
$apiKey = getenv('SYNERGY_API_KEY');
$baseUrl = 'https://printwithsynergy.com/api/v1';
// List assets
function listAssets() {
global $apiKey, $baseUrl;
$ch = curl_init("$baseUrl/assets");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer $apiKey"
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
// Upload a file
function uploadFile($filepath) {
global $apiKey, $baseUrl;
$ch = curl_init("$baseUrl/assets/upload");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer $apiKey"
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, [
'file' => new CURLFile($filepath)
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}