Documentation

Synergy Documentation

Complete guide to connecting your systems with Synergy

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:

  1. Visit the registration page
  2. Enter your name, email, and password
  3. Check your email for a confirmation link
  4. Click the link to verify your account
  5. 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.

Beta Note: During the private beta, new accounts require an invite code or beta access request approval.

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
Security: Never share your API key or commit it to version control. Use environment variables.

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 PDF 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

  1. Navigate to the Assets page
  2. Click the Upload button
  3. Drag and drop files or click to browse
  4. Files are processed automatically
  5. 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

  1. From the Dashboard sidebar, click New Collection
  2. Enter a name and optional description
  3. 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

  1. Navigate to the Pipelines page
  2. Click Create Pipeline
  3. Enter a name and description
  4. 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

  1. Navigate to Schedules from the sidebar
  2. Click New Schedule
  3. Select a pipeline to run
  4. Choose a trigger type (Cron, Interval, or Collection Watch)
  5. Configure the trigger settings
  6. 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
Schedules run in the background. You'll receive webhook notifications for 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
Print PrintOS, Enfocus Switch API Key, OAuth
Notifications Slack, Email, Webhooks Webhook URL, API Key

Creating a Connection

  1. Navigate to Connections
  2. Click Add Connection
  3. Select the connection type
  4. Enter the connection name and credentials
  5. Click Test Connection to verify
  6. Click Save
Credentials are encrypted at rest and never exposed after creation.

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

  1. Navigate to Webhooks
  2. Click Create Webhook
  3. Enter a name and your endpoint URL
  4. Select which events to subscribe to
  5. Optionally add a secret for HMAC verification
  6. 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

  1. Navigate to Audit Log
  2. Use filters to narrow by date range, action type, or status
  3. 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
PDF 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

  1. Open an asset detail view by clicking on any compatible file
  2. Click the Extract Parts button
  3. Select which parts to extract (pages, layers, images)
  4. 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
Tip: Use the Search API to filter assets by print metadata, e.g., find all CMYK images with 300+ DPI.

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

  1. Go to Settings → API Keys
  2. Click Create API Key
  3. Enter a name (e.g., "Production Server")
  4. Copy the key immediately - it won't be shown again
Important: API keys are only shown once at creation. Store them securely!

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, design
  • collection_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 to
  • tags - 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"

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"] }'

Tags API

Manage tags for organizing and filtering assets.

List All Tags

curl -X GET "https://printwithsynergy.com/api/v1/tags" \
  -H "Authorization: Bearer syn_your_api_key"
// Response
{
  "success": true,
  "data": {
    "tags": [
      { "name": "approved", "count": 45 },
      { "name": "print-ready", "count": 32 },
      { "name": "hero", "count": 12 }
    ]
  }
}

Add Tags to Asset

curl -X POST "https://printwithsynergy.com/api/v1/assets/:id/tags" \
  -H "Authorization: Bearer syn_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{ "tags": ["approved", "featured"] }'

Remove Tags from Asset

curl -X DELETE "https://printwithsynergy.com/api/v1/assets/:id/tags" \
  -H "Authorization: Bearer syn_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{ "tags": ["draft"] }'

Rename Tag

curl -X PUT "https://printwithsynergy.com/api/v1/tags/rename" \
  -H "Authorization: Bearer syn_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{ "old_name": "draft", "new_name": "pending-review" }'

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
Tip: Check the 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);
}

Need Help?

We're here to help you get the most out of Synergy.