Back to Website
Show / Hide Table of Contents

Rendering print files with data

  • Last updated on October 27, 2025
  • •
  • 4 minutes to read

After you have created a design and prepared and saved VDP data to the design, you can apply this data while rendering print files.

This guide explains how to render designs with variable data using Customers Canvas. You'll learn how to configure a pipeline with the render-vdp-hires task, run a project via the Storefront API, and manage the resulting artifacts.

Step 1: Configure the pipeline

To render high-resolution print files, create a pipeline in your Customer's Canvas account first. The pipeline must include the render-vdp-hires task to apply data samples stored in the rendered designs. Below is an example configuration:

{
    "tasks": [
        {
            "description": "Extract design from project",
            "name": "extract",
            "type": "extract-project-design",
            "parameters": {},
            "outputArtifacts": [
                "design"
            ]
        },
        {
            "description": "Render multipage print file",
            "name": "render-vdp-hires",
            "type": "render-vdp-hires",
            "inputArtifacts": [
                "design"
            ],
            "parameters": {
                "hiResOutputDpi": 300,
                "hiResOutputFileFormat": "pdf",
                "hiResOutputColorSpace": "cmyk",
                "hiResOutputRgbColorProfileName": "",
                "hiResOutputCmykColorProfileName": "",
                "hiResOutputGrayscaleColorProfileName": "",
                "hiResOutputToSeparateFiles": false,
                "hiResOutputChannelContainersToSeparateFiles": false,
                "hiResOutputChannelContainersRenderEmptyPage": true,
                "hiResOutputBackgroundColor": "White",
                "hiResOutputCompression": "Jpeg",
                "hiResOutputJpegCompressionQuality": 90,
                "hiResOutputFlipMode": "None",
                "hiResOutputRotateMode": "None",
                "hiResOutputPdfTextMode": "Text",
                "hiResOutputPdfAuthor": "",
                "hiResOutputPdfCreator": "",
                "hiResOutputPdfKeywords": "",
                "hiResOutputPdfSubject": "",
                "hiResOutputPdfTitle": "",
                "hiResOutputInStringPlaceholderHintsEnabled": false,
                "hiResOutputArchiveType": "None",
                "hiResOutputArchiveCompressionType": "LZMA"
            },
            "outputArtifacts": [
                "printFile"
            ]
        },
        {
            "description": "Finalize",
            "name": "finalize",
            "type": "finalize",
            "finalArtifacts": [
                "printFile"
            ]
        }
    ]
}

Step 2: Create a project via API

First, choose the right endpoint. Customer's Canvas provides two endpoints for creating projects for processing VDP data:

  1. POST /api/storefront/v1/projects/with-single-item

    Use this endpoint when your PIM products are linked via a product reference (e.g., an online store product ID).

    Example: You have a product in your e-commerce system, and you want to personalize it with VDP data.

  2. POST /api/storefront/v1/projects/by-scenario/specific-pipeline

    Use this endpoint when you haven't linked products by product reference, need to process multiple line items in an order, or only render design files.

    Example: You want to render multiple designs in a single project without direct product references.

Once a project is created, the system will automatically run the pipeline linked to the product or specified in the request parameters.

Option 1: Using /projects/with-single-item

This endpoint is used when your products are linked via a product reference in your online store.

  • cURL
  • HTTP
  • C#
  • TS
  • PHP
curl -X POST "https://api.customerscanvashub.com/api/storefront/v1/projects?storefrontId=12" \
-H "accept: text/plain" \
-H "Authorization: Bearer <TOKEN>" \
-d '{
     "orderId": 1004,
     "item": {
          "productReference": "invitation",
          "designIds": ["642e793dc46d098d64514607"]
     }
}'
POST https://api.customerscanvashub.com/api/storefront/v1/projects?storefrontId=12
Content-Type: application/json
{
    "orderId": 1004,
    "item": {
        "productReference": "invitation",
        "designIds": ["642e793dc46d098d64514607"]
    }
}
// Set a real storefront ID
var storefrontId = 12;
// Set a product reference, order ID, and design IDs
var body = """
{
     "orderId": 1004,
     "item": {
          "productReference": "invitation",
          "designIds": ["642e793dc46d098d64514607"]
     }
}
""";
var project = await projectsApiClient.CreateWithSingleItemAsync(storefrontId, null, body);
// Set a real storefront ID
var storefrontId = 12;
// Set a product reference, order ID, and design IDs
var body = `
{
     "orderId": 1004,
     "item": {
          "productReference": "invitation",
          "designIds": ["642e793dc46d098d64514607"]
     }
}`;
var project = _projectsApiClient.createWithSingleItem(storefrontId, null, body);
// Set a real storefront ID
$storefrontId = 12;
// Set a product reference, order ID, and design IDs
$body = '
{
     "orderId": 1004,
     "item": {
          "productReference": "invitation",
          "designIds": ["642e793dc46d098d64514607"]
     }
}';
$project = $projectsApiClient->projectsCreate($storefrontId, null, $body);

Option 2: Using /projects/by-scenario/specific-pipeline

This endpoint is ideal for processing multiple line items in an order when products are not linked by a product reference.

  • cURL
  • HTTP
  • C#
  • TS
  • PHP
curl -X POST \
  "https://api.customerscanvashub.com/api/storefront/v1/projects/by-scenario/specific-pipeline?storefrontId=12" \
  -H "accept: text/plain" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <TOKEN>" \
  -d '{
    "orderDetails": {"orderId": "1004"},
    "ownerId": "6527afc635b52bfadd355226",
    "items": [{
      "designIds": ["62da200abb25c5477797d9cb"]
    }],
    "scenario": {"pipelineId": 247}
  }'
POST https://api.customerscanvashub.com/api/storefront/v1/projects/by-scenario/specific-pipeline?storefrontId=12
Content-Type: application/json
Authorization: Bearer <TOKEN>

{
  "orderDetails": {"orderId": "1004"},
  "ownerId": "6527afc635b52bfadd355226",
  "items": [{
    "designIds": ["62da200abb25c5477797d9cb"]
  }],
  "scenario": {"pipelineId": 247}
}
var storefrontId = 12;
var body = """
{
  "orderDetails": {"orderId": "1004"},
  "ownerId": "6527afc635b52bfadd355226",
  "items": [{
    "designIds": ["62da200abb25c5477797d9cb"]
  }],
  "scenario": {"pipelineId": 247}
}
""";
var project = await projectsApiClient.CreateBySpecificPipelineScenarioAsync(storefrontId, null, body);
var storefrontId = 12;
var body = {
  "orderDetails": {"orderId": "1004"},
  "ownerId": "6527afc635b52bfadd355226",
  "items": [{
    "designIds": ["62da200abb25c5477797d9cb"]
  }],
  "scenario": {"pipelineId": 247}
};
var project = _projectsApiClient.createBySpecificPipelineScenario(storefrontId, null, JSON.stringify(body));
// Set a real storefront ID
$storefrontId = 12;
// Set a product reference, order ID, and design IDs
$body = '
{
  "orderDetails": {"orderId": "1004"},
  "ownerId": "6527afc635b52bfadd355226",
  "items": [{
    "designIds": ["62da200abb25c5477797d9cb"]
  }],
  "scenario": {"pipelineId": 247}
}';
$project = $projectsApiClient->projectsCreateBySpecificPipelineScenario($storefrontId, null, $body);

Step 3: Retrieve rendered files

You can find artifact links through the BackOffice UI or implement sending the results outside of Customer's Canvas:

  • Use the artifact links provided in the project results.
  • For push strategies, add tasks like upload-to-ftp, invoke-url, or export-to-ecommerce to your pipeline.

To access artifacts, you can log in to your Customer's Canvas account and find the artifact links in the Projects section: click your projects and then click the Results tab.

To automatically deliver rendered files, extend your pipeline with tasks like:

{
  "tasks": [
    {
      "description": "Upload to FTP",
      "name": "upload-to-ftp",
      "type": "upload-to-ftp",
      "inputArtifacts": ["printFile"],
      "parameters": {
        "ftpHost": "ftp.example.com",
        "ftpUser": "user",
        "ftpPassword": "password",
        "ftpPath": "/output/"
      }
    }
  ]
}

Learn more:

  • VDP preview pipeline example
  • Delivering pipeline results
  • Working with Project API
Was this page helpful?
Thanks for your feedback!
Back to top Copyright © 2001–2025 Aurigma, Inc. All rights reserved.
Loading...
    Thank for your vote
    Your opinion is important to us. To provide details, send feedback.
    Send feedback