Skip to main content

CSV Import API (v3)

Summary

  1. OverviewQuick start
  2. Key concepts
  3. Operation semantics (insert / update / delete)
  4. Step 1: Upload the ZIP file
  5. Step 2: Check the import status
  6. The ZIP contents
  7. File reference
  8. Examples
  9. Troubleshooting
  10. API Reference

1. Overview

The CSV Import API (v3) lets you massively create and update customizable products — and the entities around them (variants, sides, print areas, printing methods, sales-channel mappings, translations) — by uploading a single ZIP archive of CSV files.

Every entity is addressed by a stable key you choose (EntityReferenceKey), so the same import performs an upsert: a row creates the entity when the key is new and updates it when the key already exists. Re-posting the same archive produces no further changes (the operation is idempotent).

The import is asynchronous and works in two steps, each with a dedicated endpoint:

  1. Upload the ZIP archive. The call starts a background task and immediately returns a TaskID.
  2. Poll the status of the task with that TaskID until it reaches a terminal state.
Which CSV version should I use?
  • CSV Import API (v3) — this page. The current CSV format, based on the canonical files described below. Use it for new integrations.
  • CSV Import API (legacy) — the older products.txt / sides.txt / areas.txt format. Kept for backward compatibility only.
No-code alternative

The same import is also available as a no-code wizard in the Zakeke Backoffice, under Tools → Bulk import. There you can upload the ZIP, map your columns to the canonical fields, validate the data and start the import without calling the API. It uses the same canonical files and semantics described on this page.

Please note

If the Product Catalog API is active, the variants specified in the CSV must exactly match the products in the Product Catalog API. Otherwise, conflicts may occur, preventing proper variant management.

Quick start

The smallest possible import is a single customizable product with one side and one print area — four CSV files zipped together.

1. Build the four CSV files (a "simple" product uses one variant with the reserved key DEFAULT_VARIANT):

PRODUCTS.CSV

EntityReferenceKey,Name
MUG001,Plain Mug

VARIANTS.CSV

ProductReferenceKey,EntityReferenceKey,Name
MUG001,DEFAULT_VARIANT,Default

SIDES.CSV

ProductReferenceKey,VariantReferenceKey,EntityReferenceKey,Name,ImageSideUrl,PPCM
MUG001,DEFAULT_VARIANT,MUG001_front,Front,https://example.com/mug-front.png,100

PRINTAREAS.CSV

ProductReferenceKey,VariantReferenceKey,SideReferenceKey,Name,DefinitionType,X,Y,Width,Height
MUG001,DEFAULT_VARIANT,MUG001_front,Front Area,Rectangle,0,110,860,320

2. Zip them and upload — the call returns a TaskID:

curl -X POST https://api.zakeke.com/v3/csv/import \
-H "Authorization: Bearer <Access-Token>" \
-H "Content-Type: multipart/form-data" \
-F data="@catalog.zip"

3. Poll the status with that TaskID until it reaches a terminal state (Completed, CompletedWithErrors or Error):

curl https://api.zakeke.com/v3/csv/status/123654 \
-H "Authorization: Bearer <Access-Token>"

That's the whole loop. From here, add more files (variants, printing methods, sales channels, …) as your catalog grows — see File reference for every column and Examples for richer, ready-to-adapt archives.

Ready-made example archives

Prefer to start from a working file? Download the minimal product archive — or browse the full set of examples (multi-variant, printing methods, effects, resizable, sales channels, deletions) in Download ready-made archives. The same examples are also available in the Backoffice wizard under Tools → Bulk import.

2. Key concepts

Before building your archive, make sure the following entities are clear.

  • Product — a customizable item. It contains one or more variants.
  • Variant — a purchasable version of the product identified by a combination of attributes (e.g. color / size). A product without variants (a "simple product") must still declare a single default variant with EntityReferenceKey = DEFAULT_VARIANT.
  • Side — a customizable surface of a variant (e.g. front / back of a t-shirt). A side has a background image and a resolution (PPCM).
  • Print area — the region inside a side where the end user can place text and graphics.

The catalog hierarchy is therefore:

Product                 (PRODUCTS.CSV)
└─ Variant (VARIANTS.CSV) — DEFAULT_VARIANT for simple products
└─ Side (SIDES.CSV) — background image + PPCM
└─ Print area (PRINTAREAS.CSV) — Rectangle / Ellipse / PNGMask / LayeredPDF

Each level lives in its own CSV file and points to its parent by reference key. Other entities you can import:

  • Printing methods — how a product can be personalized and how print-ready files are generated (output formats, DPI, colour limits, effects). Assigned to products/sides by key.
  • Sales channels — mapping between a Zakeke product/variant and the corresponding product on an external storefront.
  • Resizable products — products whose dimensions the end user can change (posters, banners, …). They add RESIZABLEOPTIONS / RESIZABLEPRESETS / PRODUCT3DSETTINGS and cannot have multiple variants.
  • Translations — language-specific versions of source strings.

Identity & references. Every row is identified by its EntityReferenceKey (unique within its scope). Child files reference their parent by key — for example a SIDES.CSV row points to its variant with VariantReferenceKey, and to its product with ProductReferenceKey. The parent must exist, either already in Zakeke or in the same archive.

3. Operation semantics (insert / update / delete)

The import distinguishes omitted vs empty vs explicit values, and treats list cells as authoritative sets.

CaseCell contentEffect
Omitted columnthe column is not in the fileLeave the stored value unchanged
Empty cell`` (nothing)Leave the stored value unchanged
Reset token__NULL__Clear the value (reset to the system default)
Valueany non-empty valueCreate if absent, overwrite if present

Additional rules:

  • Upsert by key. A row creates the entity when its EntityReferenceKey is new, and updates it when the key already exists. Only the columns you include are touched.
  • Lists are authoritative. A list cell (e.g. PrintingMethodReferenceKeys, OutputTypes, PaletteColors) replaces the whole stored list. To add one value you must resend the existing ones too. List values are separated by a semicolon ; (see the format notes).
  • Print areas / sides are authoritative per parent. When you send a side's print areas, or a variant's sides, the provided set replaces the stored one.
  • Deletions are never implicit. Omitting an entity never deletes it. To remove a Product, a Printing method or a Translation, list its key in DELETES.CSV.
  • Idempotency. Re-posting the same archive after a successful run results in no net changes.

4. Step 1: Upload the ZIP file

Starts the background task that imports the archive. Returns a TaskID used to poll the status.

4.1 Endpoint

POST https://api.zakeke.com/v3/csv/import

4.2 Authentication

Like every Zakeke API call, this endpoint requires authentication and authorization. It must be called in S2S (server-to-server) mode with a Server-to-Server authorization token. See how to get an S2S OAuth token.

4.3 Parameters

The call uses the multipart/form-data encoding to upload the ZIP archive. The Content-Type header must be multipart/form-data and the body must contain the file bytes.

The archive must be a ZIP containing the canonical CSV files described in section 6. Maximum archive size: 200 MB.

cURL example

curl -X POST https://api.zakeke.com/v3/csv/import \
-H "Accept: application/json" \
-H "Authorization: Bearer <Access-Token>" \
-H "Content-Type: multipart/form-data" \
-F data="@c:/user/data/catalog.zip"

.NET C# example

using System;
using System.Net.Http;
using System.IO;
using System.Threading.Tasks;
using System.Text.Json;

class Program
{
static async Task Main()
{
var url = "https://api.zakeke.com/v3/csv/import";
var filePath = @"path/to/catalog.zip"; // your ZIP archive
var bearerToken = "your_s2s_token_here"; // your S2S access token

using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", bearerToken);

using var content = new MultipartFormDataContent();
var fileContent = new ByteArrayContent(File.ReadAllBytes(filePath));
fileContent.Headers.ContentType =
new System.Net.Http.Headers.MediaTypeHeaderValue("application/zip");
content.Add(fileContent, "data", Path.GetFileName(filePath));

var response = await client.PostAsync(url, content);
var body = await response.Content.ReadAsStringAsync();

if (response.IsSuccessStatusCode)
{
var result = JsonSerializer.Deserialize<ImportTaskResponse>(body);
Console.WriteLine($"Import started. TaskID: {result.TaskID}");
}
else
{
Console.WriteLine($"Upload failed ({(int)response.StatusCode}): {body}");
}
}
}

public class ImportTaskResponse
{
public long TaskID { get; set; }
}

4.4 Output

A JSON object with the identifier of the created task:

PropertyTypeDescription
TaskIDintegerIdentifier of the import task. Use it to poll the status (step 2).
{
"TaskID": 123654
}

4.5 HTTP response codes

CodeDescription
200The import task was created successfully. The body contains the TaskID.
400The archive could not be accepted (e.g. malformed ZIP/CSV, or blocking validation errors). The body contains an error message.
403The seller is not authenticated / not authorized.
415The request is not multipart/form-data, or no file was provided.
note

Validation runs synchronously before the task is enqueued: if the archive is structurally invalid the call returns 400 and no task is created. Cross-entity issues discovered while the task runs are reported through the status endpoint (see step 2).

5. Step 2: Check the import status

Uses the TaskID from step 1 to monitor the task until it reaches a terminal state.

5.1 Endpoint

GET https://api.zakeke.com/v3/csv/status/{taskID}

5.2 Parameters

The endpoint accepts the taskID returned by the upload endpoint as a path parameter.

5.3 Output

PropertyTypeDescription
TaskIDintegerThe task identifier.
StatusstringCurrent state of the task (see table below).
Errorsarray of stringList of error messages, if any.

Possible Status values:

StatusMeaning
WaitingThe task is queued, waiting to be processed.
ProcessingThe system is processing the task.
CompletedThe task completed successfully, with no errors.
CompletedWithErrorsThe task completed, but some rows/entities failed (usually validation errors). See Errors.
ErrorThe task failed due to a system error.
{
"TaskID": 123654,
"Status": "Completed",
"Errors": []
}

5.4 HTTP response codes

CodeDescription
200Status retrieved successfully. See the body for the current state and any errors.
404The task was not found or the taskID is not valid.
Please note

While a previous import for the same seller is in Waiting or Processing state, a new import for that seller is serialized and executed only after the running one finishes.

6. The ZIP contents

The archive contains one CSV file per entity type. Only the files you need are required — you can send a single PRODUCTS.CSV for a minimal catalog, or a DELETES.CSV on its own to remove entities.

FileContents
PRODUCTS.CSVTop-level productsMain entry
VARIANTS.CSVProduct variants (use DEFAULT_VARIANT for simple products)Required to create a product
SIDES.CSVCustomizable sides of each variantRequired to create a variant
PRINTAREAS.CSVPrint areas of each sideRequired to create a side
PRINTINGMETHODS.CSVPrinting methods (DPI, output formats, colour limits)Optional
PRINTINGMETHODEFFECTS.CSVVisual effects (Engraving / Wood / Pixelation) of a printing methodOptional
SALESCHANNELS.CSVProduct ↔ external storefront mappingOptional
SALESCHANNELSATTRIBUTES.CSVVariant attribute ↔ external storefront mappingOptional
RESIZABLEOPTIONS.CSVResize settings for resizable productsOptional
RESIZABLEPRESETS.CSVPredefined sizes for resizable productsOptional
PRODUCT3DSETTINGS.CSV3D / AR settings (resizable products)Optional
TRANSLATIONS.CSVTranslations of source stringsOptional
DELETES.CSVEntities to removeOptional

Format notes

  • Files are standard UTF-8 CSV with a header row and a comma (,) as the column delimiter.
  • Inside a single cell, list values (e.g. multiple printing-method keys, multiple output formats) are separated by a semicolon (;) — for example DTG;EMB-1c. Do not use commas inside a cell, they would be interpreted as column separators.
  • Use the exact canonical column names shown in section 7.
  • A simple product (no real variants) must declare one variant with EntityReferenceKey = DEFAULT_VARIANT.
Image requirements

Every image referenced by a URL column (ImageUrl, ImageSideUrl, MaskUrl, …) must be publicly reachable and follow these rules:

  • The URL must start with http or https and be encoded per RFC 2396 / RFC 1738 (for example, a comma becomes %2C).
  • Product and side images must be a non-animated GIF (.gif), JPEG (.jpg / .jpeg) or PNG (.png). Mask images (MaskUrl) must be PNG.
  • Upload the image at its real size — do not send thumbnails or upscaled images.
  • Do not add promotional text, watermarks or borders to the image.

7. File reference

The Required column means: mandatory when creating the entity; it can be omitted on updates that don't change it, unless marked Always (identifying/parent keys, always needed).

  • Always — always required (identifying and parent keys).
  • On create — required the first time the entity is created; optional on update.
  • Conditional — required only in certain cases (explained in the notes).
  • Optional — never required.

7.1 PRODUCTS.CSV

ColumnTypeRequiredDescription
EntityReferenceKeystringAlwaysYour unique identifier for the product (SKU or product code). Used to upsert.
NamestringOn createProduct name shown to the end user in the customizer and the catalog.
ImageUrlstring (URL)OptionalMain thumbnail. If omitted, the first side's image is used. Keep it ≤ 2000×2000 px.
StateenumOptionalpublished or unpublished. Defaults to unpublished if omitted.
PrintingMethodReferenceKeyslistOptionalSemicolon-separated keys of the printing methods enabled on this product (e.g. DTG;EMB-1c).

7.2 VARIANTS.CSV

ColumnTypeRequiredDescription
ProductReferenceKeystringAlwaysReference key of the parent product.
EntityReferenceKeystringAlwaysUnique identifier of the variant. Use DEFAULT_VARIANT for a simple (single-variant) product.
NamestringOn createDisplay name of the variant (e.g. Red — XL). Ignored for DEFAULT_VARIANT.
AttributesstringOptionalVariant attributes, separated by ;. Each one is AttributeCode:AttributeName=OptionCode:OptionValue — all four parts required (e.g. Color_001:Color=Black_001:Black;Size_001:Size=S_001:S). Required for products with multiple variants.
DEFAULT_VARIANT

A product with a single variant must use EntityReferenceKey = DEFAULT_VARIANT. A product with more than one variant must not use it. DEFAULT_VARIANT variants cannot carry Attributes or sales-channel attribute mappings.

Choosing which variants to import

In Zakeke you only declare the customizable variants of a product — which can be a subset of the variants that exist on your store. Add one VARIANTS.CSV row per customizable variant, all pointing to the same ProductReferenceKey.

Include a variant only when it needs its own customization (different sides, print areas or images). Consider a t-shirt sold in two sizes (S, M) and two colors (Red, Yellow) — four store variants in total:

  • If customization depends on color only (the print area is the same for every size), declare just two variants, one per color.
  • If customization must also differ per size, declare all four combinations, one row each.

The Attributes cell describes what distinguishes each variant, as a ;-separated list of AttributeCode:AttributeName=OptionCode:OptionValue entries. For the color-only case you would have two rows with, respectively:

Color_001:Color=Red_001:Red
Color_001:Color=Yellow_001:Yellow

For the color-and-size case, four rows such as:

Size_001:Size=S_001:S;Color_001:Color=Red_001:Red
Size_001:Size=M_001:M;Color_001:Color=Red_001:Red
Size_001:Size=S_001:S;Color_001:Color=Yellow_001:Yellow
Size_001:Size=M_001:M;Color_001:Color=Yellow_001:Yellow

The attribute codes and option codes you choose here are the reference used by your product-page integration to identify the purchasable variant the customer selected. See the product-page integration for how these values are matched at customization time.

7.3 SIDES.CSV

ColumnTypeRequiredDescription
ProductReferenceKeystringAlwaysParent product.
VariantReferenceKeystringAlwaysParent variant the side belongs to.
EntityReferenceKeystringAlwaysUnique key of the side within its variant (e.g. front, back). When a side is shared across variants, use the same key.
NamestringOn createDisplay name of the side, shown when switching faces in the customizer.
ImageSideUrlstring (URL)ConditionalBackground image of the side. Required when creating a new side.
PPCMnumber (>0)ConditionalPixels-per-centimeter of the side image — drives the print scale and the dimensions shown to the user. Required when the side has print areas.
PrintingMethodReferenceKeyslistOptionalRestricts this side to a subset of the product-level printing methods. Semicolon-separated.
About PPCM

PPCM (pixels-per-centimeter) tells Zakeke the physical scale of the side image, which in turn drives the print resolution and the dimensions shown to the end user for the print areas defined on this side.

You can calculate it from any two points in the image whose real distance you know: divide the distance in pixels between the two points by the distance in centimeters between the same two points. For example, if two points that are 20 cm apart in reality span 380 pixels in the image, PPCM = 380 / 20 = 19.

PPCM becomes mandatory as soon as the side has print areas.

7.4 PRINTAREAS.CSV

ColumnTypeRequiredDescription
ProductReferenceKeystringAlwaysParent product.
VariantReferenceKeystringAlwaysParent variant.
SideReferenceKeystringAlwaysParent side that contains this area.
NamestringOptionalInternal name of the print area, for your own reference.
DefinitionTypeenumAlwaysShape of the area: Rectangle, Ellipse, PNGMask or LayeredPDF.
XnumberConditionalDistance from the left edge of the side, in pixels (Rectangle / Ellipse only).
YnumberConditionalDistance from the top edge of the side, in pixels (Rectangle / Ellipse only).
WidthnumberConditionalWidth of the area in pixels (Rectangle / Ellipse only).
HeightnumberConditionalHeight of the area in pixels (Rectangle / Ellipse only).
MaskUrlstring (URL)ConditionalURL of the transparent PNG that defines the printable region (PNGMask only).
LayeredPDFUrlstring (URL)ConditionalURL of the layered PDF describing the area, incl. bleed / cut lines (LayeredPDF only).
ClipOutbooleanOptionalWhether the user's texts and images are cropped to the area shape (true) or kept at least as wide and tall as the area outer bounds — which can produce output larger than the shape (false). Defaults to true.
note

For Rectangle / Ellipse areas, X, Y, Width, Height are required and must be greater than zero. For PNGMask provide MaskUrl; for LayeredPDF provide LayeredPDFUrl.

Defining a print area with a PNG mask

When DefinitionType = PNGMask, the printable region is described by a mask image: the print areas are the black pixels, and everything else is transparent. This lets you define areas of any shape, including complex or multiple shapes on the same side.

The images below show how to build the mask for two products — a t-shirt and a phone case. On the left are the print areas you want to obtain, in the center the side image uploaded via ImageSideUrl, and on the right the mask image to reference in MaskUrl.

T-shirt area mask

Phone cover area mask

Requirements for the mask image:

  • Use PNG (.png).
  • Paint one or more fully black shapes (black even inside) where the user may add text or images.
  • The background must be transparent.
  • The mask must have the same pixel size as the side image.
  • Leave a transparent border of at least 1 pixel around the edges.

You can download an example mask that contains three areas, both simple and complex.

warning

The mask image and the side image must have exactly the same size in pixels, and the mask must have a transparent background with a transparent border of at least one pixel.

Defining a print area with a layered PDF (cut / safety / bleed lines)

When DefinitionType = LayeredPDF, LayeredPDFUrl is the URL of a layered PDF — the file that carries the cut, safety and bleed lines of the print area. Use it when the print area needs production marks rather than a plain shape.

The file must be a layered PDF (PDF-Layers / OCG): each layer holds vector paths for one kind of mark — a cut line, a safety line, a bleed line, or any other guide. Zakeke keeps each layer independent, so you decide per layer whether it is shown to the end user in the customizer, whether it appears in the final print-ready file, or both. At print time the layers are overlapped with the customer's design to produce the print-ready PDF.

For a step-by-step guide on preparing the file (layer setup, visibility options and examples), see How to add Cut / Safety / Bleed Lines to your customizable products.

7.5 PRINTINGMETHODS.CSV

ColumnTypeRequiredDescription
EntityReferenceKeystringAlwaysYour unique key for the printing method (e.g. DTG, EMB-1c).
NamestringOn createDisplay name of the printing method.
DPIinteger (>0)OptionalOutput resolution in dots per inch. Defaults to 300 if omitted.
OutputTypeslistOptionalSemicolon-separated output formats (e.g. PDF;PNG;SVG). Allowed: PDF, PNG, SVG, DXF. Defaults to all four if omitted.
MaxColorsinteger (≥0)OptionalMaximum number of distinct colours. 0 means unlimited.
SplitColorFilesbooleanOptionaltrue to emit one output file per colour.
PaletteColorslistOptionalAllowed palette as a semicolon-separated list of hex codes (e.g. #ff0000;#000000).

7.6 PRINTINGMETHODEFFECTS.CSV

One row per printing method that has a visual effect configured. EffectType selects which columns apply: Engraving uses the Preview* and Output* columns, Wood the Wood* columns, Pixelation PixelationLevel.

ColumnTypeRequiredDescription
PrintingMethodReferenceKeystringAlwaysPrinting method this effect belongs to.
EffectTypeenumAlwaysEngraving, Wood or Pixelation.
PreviewBlendModeenumOptionalBlend mode of the customizer preview layer (Engraving).
PreviewEnhanceBlendModebooleanOptionalEnable the enhanced blend mode on the preview (true / false).
PreviewOpacityinteger 0–100OptionalOpacity of the preview overlay layer.
PreviewTextColorhex colorOptionalColour applied to text elements in the preview.
PreviewImageEffectTypeenumOptionalImage effect preset applied to user images in the preview (e.g. Greyscale, Silhouette).
PreviewImageEffectOptionsJSONOptionalFine-tuning of the preview image effect. A JSON object whose keys are listed in Image effect options below.
OutputTextColorhex colorOptionalColour applied to text elements in the output file.
OutputImageEffectTypeenumOptionalImage effect preset applied to user images in the output.
OutputImageEffectOptionsJSONOptionalFine-tuning of the output image effect. Same JSON shape as PreviewImageEffectOptions — see Image effect options below.
WoodBlendModeenumOptionalBlend mode used by the Wood effect.
WoodEnhanceBlendModebooleanOptionalEnable the enhanced blend mode for the Wood effect (true / false).
WoodOpacityinteger 0–100OptionalOpacity used by the Wood effect.
PixelationLevelinteger 1–100OptionalStrength used by the Pixelation effect.

Allowed blend modes: normal, overlay, multiply, screen, soft-light, hard-light, color-dodge, color-burn, darken, lighten, difference, exclusion, hue, saturation, luminosity, color, lighter, darker, xor.

Allowed image effect types: None, Greyscale, Contrasted greyscale, Soft greyscale, Hard greyscale, Black and White, Black and Transparent, Dark and Light, Silhouette, Pixelation.

note

BlendMode, EnhanceBlendMode and Opacity apply to the Preview (and to Wood) only. The Output sub-settings carry just OutputTextColor, OutputImageEffectType and OutputImageEffectOptions.

Image effect options

PreviewImageEffectOptions and OutputImageEffectOptions hold a JSON object that fine-tunes the selected ImageEffectType. Only the keys relevant to the chosen effect are read; the rest are ignored. Keys are matched case-insensitively and spaces in the key name are optional (Threshold level, thresholdlevel and ThresholdLevel are all accepted); string values are matched case-insensitively too.

KeyType / allowed valuesDescription
HalftoneNone, Error diffusion, DitheringHalftone rendering applied to the image.
Threshold levelMinimum, Very Low, Low, Medium, Default, High, Very High, MaximumBlack/white threshold. Medium and Default are equivalent.
InvertbooleanInvert the effect result.
Overlay colorhex colorOverlay colour applied by the effect.
Dark colorhex colorColour mapped to the dark tones (e.g. Dark and Light).
Light colorhex colorColour mapped to the light tones (e.g. Dark and Light).
Remove whitebooleanDrop white pixels from the result.
Pixelationinteger 1–100Pixelation strength (when the effect uses pixelation).

Provide the value as a plain JSON scalar (string, number or boolean) — do not wrap it in an object. For example, use "Threshold level": "Default", not "Threshold level": { "value": "Default" }.

{ "Threshold level": "Default", "Invert": false, "Overlay color": "#823333" }

Because the cell is embedded in a CSV, wrap the whole JSON in double quotes and escape the inner quotes by doubling them:

PrintingMethodReferenceKey,EffectType,PreviewImageEffectType,PreviewImageEffectOptions
engraving-1,Engraving,Black and Transparent,"{""Threshold level"":""Default"",""Invert"":false,""Overlay color"":""#823333""}"

7.7 SALESCHANNELS.CSV

ColumnTypeRequiredDescription
ProductReferenceKeystringAlwaysZakeke product to map onto the external storefront.
SalesChannelNamestringAlwaysIdentifier of the channel as configured in the Sales Channels settings page. Use Master for the primary channel.
ProductCodestringAlwaysProduct SKU or ID on the external channel.

7.8 SALESCHANNELSATTRIBUTES.CSV

Maps a Zakeke variant's attribute options to the codes used on an external channel. Required only for products with multiple variants distributed on more than one channel. Not applicable to DEFAULT_VARIANT variants.

ColumnTypeRequiredDescription
ProductReferenceKeystringAlwaysZakeke product.
VariantReferenceKeystringAlwaysZakeke variant to map.
SalesChannelNamestringAlwaysChannel identifier (or Master).
AttributeCodestringAlwaysInternal code of the attribute on the external channel (e.g. color).
AttributeNamestringAlwaysDisplay name of the attribute on the external channel.
OptionCodestringAlwaysInternal code of the option value on the external channel (e.g. red).
OptionValuestringAlwaysDisplay value of the option on the external channel.

7.9 RESIZABLEOPTIONS.CSV

One row per resizable product. A product with a RESIZABLEOPTIONS row cannot have rows in VARIANTS.CSV. Dimensions are in centimeters.

ColumnTypeRequiredDescription
ProductReferenceKeystringAlwaysProduct to which the resize options apply.
EnableSyncSidesbooleanOptionalWhen true, all sides are kept synchronized to the same dimensions.
StartWidthinteger (cm)ConditionalInitial width when the user opens the customizer. Required when creating the resizable product.
StartHeightinteger (cm)ConditionalInitial height when the user opens the customizer. Required when creating the resizable product.
MinWidth MaxWidthinteger (cm)OptionalAllowed width range. MinWidth ≤ MaxWidth.
MinHeight MaxHeightinteger (cm)OptionalAllowed height range. MinHeight ≤ MaxHeight.
BorderTypeenumOptionalMirrored repeats the print on the bleed area; Colored fills the bleed with a flat colour.
BorderSizenumber (cm)OptionalBorder thickness.
BorderHexColorhex colorConditionalColour of the border. Required when BorderType = Colored.
IncludeBorderInPrintFilesbooleanOptionalWhen true, the border is baked into the output file.
MultiCanvasMinColumnWidthnumber (cm)OptionalMinimum cell width when the product is rendered as a grid of canvases.
MultiCanvasMinRowHeightnumber (cm)OptionalMinimum cell height when the product is rendered as a grid of canvases.

7.10 RESIZABLEPRESETS.CSV

Predefined sizes the customer can pick. Requires the same ProductReferenceKey to also have a row in RESIZABLEOPTIONS.CSV. Dimensions are in centimeters and must fall within the Measurements range.

ColumnTypeRequiredDescription
ProductReferenceKeystringAlwaysProduct the preset belongs to.
NamestringAlwaysDisplay name of the preset (e.g. A4, Business card).
Widthnumber (cm)AlwaysPreset width.
Heightnumber (cm)AlwaysPreset height.

7.11 PRODUCT3DSETTINGS.CSV

One row per product. Enables a 3D preview and Augmented Reality for a resizable product.

ColumnTypeRequiredDescription
ProductReferenceKeystringAlwaysParent product.
EntityReferenceKeystringAlwaysUnique key of the 3D/AR settings record (one per product).
TypeenumOn createGeneration mode of the 3D scene. Only AutoGenerated is supported: Zakeke builds the scene from the side images.
OptionsJSONOptionalExtra 3D parameters.
AREnabledbooleanOptionalWhen true, enables the Augmented Reality preview on supported devices.
ARAllowScalingbooleanOptionalWhen true, lets the customer scale the model in AR.
ARPlacementenumOptionalPlacement of the model in the AR scene: Standard (free in the space) or Wall.

7.12 TRANSLATIONS.CSV

One row per (original string, target language) pair.

ColumnTypeRequiredDescription
OriginalTextstringAlwaysSource string exactly as it appears in the system.
SourceLanguagestringAlwaysSource language as a 2-letter ISO code (e.g. en, it).
TargetLanguagestringAlwaysTarget language as a 2-letter ISO code (e.g. fr, de).
TranslatedTextstringAlwaysTranslation of OriginalText into TargetLanguage.

7.13 DELETES.CSV

Removes top-level entities. Can be sent on its own or together with the other files.

ColumnTypeRequiredDescription
EntityTypeenumAlwaysWhich kind of entity to remove: Product, PrintingMethod or Translation.
EntityReferenceKeystringAlwaysReference key of the entity to delete (for Translation, the original text). Must match an existing record.

8. Examples

Download ready-made archives

Each archive below is a complete, valid ZIP you can download, unzip, inspect and adapt to your own data. They are the same examples offered by the Backoffice wizard.

ArchiveWhat it shows
01 — Minimal productThe smallest valid catalog: one product, one variant, one side, one print area.
02 — Product with a printing methodA minimal product with one printing method (DPI, output types, palette) attached.
03 — T-shirt with multiple variantsA T-shirt with several color × size variants, each with its own side and print area.
04 — Engraving effectA printing method with an Engraving visual effect (preview and output settings).
05 — Resizable productA product the customer can resize, with min / max dimensions and size presets.
06 — Synced with WooCommerceA T-shirt mapped to a WooCommerce product, with variant attributes linked to channel codes.
07 — Multiple sales channelsThe same product synced to several storefronts at once, each with its own SKU and attribute mapping.
08 — Delete entitiesA delete-only import: removes products, printing methods or translations by reference key.

The inline examples below walk through the same scenarios file by file.

8.1 A simple product (no variants, one side, one print area)

A minimal ZIP with PRODUCTS.CSV, VARIANTS.CSV, SIDES.CSV, PRINTAREAS.CSV.

PRODUCTS.CSV

EntityReferenceKey,Name,ImageUrl,State,PrintingMethodReferenceKeys
MUG001,Plain Mug,https://example.com/mug.png,published,

VARIANTS.CSV

ProductReferenceKey,EntityReferenceKey,Name,Attributes
MUG001,DEFAULT_VARIANT,Default,

SIDES.CSV

ProductReferenceKey,VariantReferenceKey,EntityReferenceKey,Name,ImageSideUrl,PPCM,PrintingMethodReferenceKeys
MUG001,DEFAULT_VARIANT,MUG001_front,Front,https://example.com/mug-front.png,100,

PRINTAREAS.CSV

ProductReferenceKey,VariantReferenceKey,SideReferenceKey,Name,DefinitionType,X,Y,Width,Height,MaskUrl,LayeredPDFUrl
MUG001,DEFAULT_VARIANT,MUG001_front,Front Area,Rectangle,0,110,860,320,,

8.2 Update only the product name

Include only the identifying key plus the column you want to change. Everything else is left untouched.

PRODUCTS.CSV

EntityReferenceKey,Name
MUG001,Just a Mug

8.3 Clear a value

Send the reset token __NULL__ to clear an optional field — here, remove all printing methods assigned to the product.

PRODUCTS.CSV

EntityReferenceKey,PrintingMethodReferenceKeys
MUG001,__NULL__

8.4 Delete a product and a printing method

DELETES.CSV

EntityType,EntityReferenceKey
Product,MUG001
PrintingMethod,sublimation

8.5 A product with a printing method

Declare the printing method in PRINTINGMETHODS.CSV and reference it from the product by key.

PRODUCTS.CSV

EntityReferenceKey,Name,PrintingMethodReferenceKeys
MUG001,Plain Mug,sublimation

PRINTINGMETHODS.CSV

EntityReferenceKey,Name,MaxColors,SplitColorFiles,PaletteColors
sublimation,Sublimation,5,false,#000000;#b08585;#b34a4a;#512424;#601818

8.6 A printing method with an engraving effect

Add a PRINTINGMETHODEFFECTS.CSV row that points to the printing method. The PreviewImageEffectOptions / OutputImageEffectOptions JSON is quoted and its inner quotes doubled — see Image effect options.

PRINTINGMETHODS.CSV

EntityReferenceKey,Name,MaxColors,SplitColorFiles
engraving-1,Engraving,5,false

PRINTINGMETHODEFFECTS.CSV

PrintingMethodReferenceKey,EffectType,PreviewBlendMode,PreviewOpacity,PreviewTextColor,PreviewImageEffectType,PreviewImageEffectOptions,OutputTextColor,OutputImageEffectType,OutputImageEffectOptions
engraving-1,Engraving,normal,80,#000000,Black and Transparent,"{""Threshold level"":""Default"",""Invert"":false,""Overlay color"":""#823333""}",#000000,Black and Transparent,"{""Threshold level"":""Default"",""Invert"":false,""Overlay color"":""#823333""}"

8.7 A product with multiple variants

Each customizable variant is one row, all sharing the same ProductReferenceKey. Attributes uses AttributeCode:AttributeName=OptionCode:OptionValue entries joined by ;. Sides and print areas are declared per variant.

VARIANTS.CSV

ProductReferenceKey,EntityReferenceKey,Name,Attributes
TS001,TS001_black,Black,Color_001:Color=Black_001:Black
TS001,TS001_green,Green,Color_001:Color=Green_001:Green

SIDES.CSV

ProductReferenceKey,VariantReferenceKey,EntityReferenceKey,Name,ImageSideUrl,PPCM
TS001,TS001_black,TS001_front,Front,https://example.com/tshirt-front-black.png,58
TS001,TS001_green,TS001_front,Front,https://example.com/tshirt-front-green.png,58

PRINTAREAS.CSV

ProductReferenceKey,VariantReferenceKey,SideReferenceKey,Name,DefinitionType,X,Y,Width,Height
TS001,TS001_black,TS001_front,Area front,Rectangle,312,180,464,812
TS001,TS001_green,TS001_front,Area front,Rectangle,312,180,464,812

8.8 A resizable product

A resizable product has no VARIANTS.CSV rows; it adds RESIZABLEOPTIONS.CSV (and optionally RESIZABLEPRESETS.CSV). Sides still declare the reserved DEFAULT_VARIANT. Dimensions are in centimeters.

RESIZABLEOPTIONS.CSV

ProductReferenceKey,EnableSyncSides,StartWidth,StartHeight,MinWidth,MaxWidth,MinHeight,MaxHeight,BorderType,BorderSize,BorderHexColor,IncludeBorderInPrintFiles
RES001,true,10,10,5,20,5,20,Colored,1,#ff0000,true

RESIZABLEPRESETS.CSV

ProductReferenceKey,Name,Width,Height
RES001,Preset 1,10,15
RES001,Preset 2,15,10

8.9 Mapping a product to external sales channels

Map the Zakeke product to the storefront product in SALESCHANNELS.CSV, and (for multi-variant products) map each variant's attribute options in SALESCHANNELSATTRIBUTES.CSV.

SALESCHANNELS.CSV

ProductReferenceKey,SalesChannelName,ProductCode
TS001,Master,9967880700187
TS001,Shopify 4,12022349889854

SALESCHANNELSATTRIBUTES.CSV

ProductReferenceKey,VariantReferenceKey,SalesChannelName,AttributeCode,AttributeName,OptionCode,OptionValue
TS001,TS001_black,Shopify 4,1,Color,Black,Black
TS001,TS001_green,Shopify 4,1,Color,Green,Green

9. Troubleshooting

Most failures surface through the status endpoint as CompletedWithErrors (per-row validation) or Error (system failure). Structural problems with the archive are rejected up front with a 400 on upload. The table below maps the most common messages to their cause and fix.

Symptom / messageCauseFix
Invalid ...ImageEffectOptions.ThresholdLevel '{ ValueKind: ... }'The effect option value was wrapped in an object, or an invalid value was used.Pass a plain scalar ("Threshold level": "Default"), use one of the allowed values, and quote the JSON in the CSV with doubled inner quotes. See Image effect options.
Areas ... but no PPCM defined or it is not greater than 0A side has print areas but its PPCM is missing or ≤ 0.Set a positive PPCM on the side in SIDES.CSV (see the SIDES.CSV entry in File reference).
A single-variant product is rejected, or variants are duplicatedA simple product did not use DEFAULT_VARIANT, or a multi-variant product included DEFAULT_VARIANT, or two variants share the same key.A product with one variant must use EntityReferenceKey = DEFAULT_VARIANT; a product with several variants must not. Keys must be unique per product.
Resizable product rejectedThe product has both RESIZABLEOPTIONS.CSV and more than one VARIANTS.CSV row.Resizable products cannot have multiple variants — remove the extra variants.
MaskUrl is required... / LayeredPDFUrl is required... / X/Y/Width/Height is required...The columns required by the chosen DefinitionType are missing.Provide the fields for that type: geometry for Rectangle/Ellipse, MaskUrl for PNGMask, LayeredPDFUrl for LayeredPDF.
Required header ['...'] was not foundA mandatory column header is absent from a CSV file.Add the header (identifying and parent-key columns must always be present, even if some cells are blank). Use the exact canonical names from File reference.
A field you left blank was not clearedAn empty cell means "leave unchanged", not "clear".To clear an optional field, send the reset token __NULL__. See Operation semantics.
An added list value replaced the existing onesList cells (e.g. PrintingMethodReferenceKeys) are authoritative — they replace the whole stored list.Resend the existing values together with the new one, separated by ;.
A new import seems to be ignoredA previous import for the same seller is still Waiting or Processing.Imports for the same seller are serialized; wait for the running one to finish, then poll again.

If a value looks correct but is still rejected, remember that enum values (state, definition type, effect type, blend modes, image-effect types) are matched case-insensitively, and list/number cells must use ; and . respectively — never a comma inside a cell.

10. API Reference

For the full technical reference see API Reference.