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.
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"
}