Printago API
POST /v1/customizer/configs/{configId}/shopify-publication

Publish customizer config to Shopify

Publish the config to Shopify. Embed mode writes the `printago.sku_id` metafield on the chosen product (the only product write — listings are never created or overwritten) so the theme app extension block renders the customizer there. Direct mode exposes the app-proxy customizer URL as a standalone storefront page.

Requires: customizer.manage

Path Parameters

configId required
string
The customizer config ID

Request Body

CustomizerPublishBody
integrationIdoptional
string
pattern: ^[a-z0-9]{24}$
moderequired
"embed_product_page" | "direct_page"
embed_product_pagedirect_page
shopifyProductHandleoptional
string
shopifyProductIdoptional
string

Example Request

application/json
{
  "mode": "embed_product_page",
  "integrationId": "string",
  "shopifyProductId": "string",
  "shopifyProductHandle": "string"
}

Response Schema

CustomizerPublicationState
directUrlrequirednullable
string
Storefront URL for the direct-to-customizer page (app proxy).
integrationrequirednullable
object
integrationIdrequired
string
shoprequired
string
shopNamerequired
string
productCandidatesrequired
object[]
handlerequired
string
productIdrequired
string
statusrequired
string
titlerequired
string
publicationrequirednullable
object
Shopify publishing state for a customizer config on one integration. Embed mode writes the `printago.sku_id` product metafield the theme app extension block reads; direct mode exposes the app-proxy customizer URL as a standalone storefront page.
configIdrequired
string
pattern: ^[a-z0-9]{24}$
createdAtrequired
string
format: date-time
idrequired
string
pattern: ^[a-z0-9]{24}$
integrationIdrequired
string
pattern: ^[a-z0-9]{24}$
lastErrorrequirednullable
string
metafieldSetAtrequirednullable
string
format: date-time
moderequired
"embed_product_page" | "direct_page"
embed_product_pagedirect_page
shopifyProductHandlerequirednullable
string
shopifyProductIdrequirednullable
string
statusrequired
"published" | "unpublished" | "error"
publishedunpublishederror
storeIdrequired
string
pattern: ^[a-z0-9]{24}$
updatedAtrequired
string
format: date-time
skuCoderequirednullable
string
skuIdrequirednullable
string
pattern: ^[a-z0-9]{24}$
themeEditorUrlrequirednullable
string
Theme-editor deep link that pre-adds the customizer block.

Example Response

201 OK — application/json
{
  "publication": {
    "configId": "string",
    "integrationId": "string",
    "mode": "embed_product_page",
    "shopifyProductId": "string",
    "shopifyProductHandle": "string",
    "status": "published",
    "metafieldSetAt": "2025-01-15T12:00:00.000Z",
    "lastError": "string",
    "id": "string",
    "storeId": "string",
    "createdAt": "2025-01-15T12:00:00.000Z",
    "updatedAt": "2025-01-15T12:00:00.000Z"
  },
  "integration": {
    "integrationId": "string",
    "shop": "string",
    "shopName": "string"
  },
  "skuId": "string",
  "skuCode": "string",
  "productCandidates": [
    {
      "productId": "string",
      "title": "string",
      "handle": "string",
      "status": "string"
    }
  ],
  "directUrl": "string",
  "themeEditorUrl": "string"
}