Truncation guard
An import that would delete more than 90% of a catalog is refused and held for review. The rule exists because it happened once.
A unified eCommerce API for Shopify, WooCommerce, Magento 2, PrestaShop, BigCommerce, Wix and Google Merchant Center. Catalog reads on all seven, bulk price writes on six, and a result for every row you send.
PATCH /v1/connections/con_8f2a/prices Authorization: Bearer zk_live_•••• { "updates": [ { "sku": "TEE-BLK-M", "price": 29.90 }, { "sku": "TEE-BLK-L", "price": 29.90 } ] } → 200 OK { "applied": 2, "failed": 0 }
PATCH /v1/connections/con_3b71/prices Authorization: Bearer zk_live_•••• { "updates": [ { "sku": "TEE-BLK-M", "price": 29.90 }, { "sku": "TEE-BLK-L", "price": 29.90 } ] } → 200 OK { "applied": 2, "failed": 0 }
PATCH /v1/connections/con_9d04/prices Authorization: Bearer zk_live_•••• { "updates": [ { "sku": "TEE-BLK-M", "price": 29.90 }, { "sku": "TEE-BLK-L", "price": 29.90 } ] } → 200 OK { "applied": 2, "failed": 0 }
PATCH /v1/connections/con_51ce/prices Authorization: Bearer zk_live_•••• { "updates": [ { "sku": "TEE-BLK-M", "price": 29.90 }, { "sku": "TEE-BLK-L", "price": 29.90 } ] } → 200 OK { "applied": 2, "failed": 0 }
PATCH /v1/connections/con_7a2f/prices Authorization: Bearer zk_live_•••• { "updates": [ { "sku": "TEE-BLK-M", "price": 29.90 }, { "sku": "TEE-BLK-L", "price": 29.90 } ] } → 200 OK { "applied": 2, "failed": 0 }
PATCH /v1/connections/con_5f0b/prices Authorization: Bearer zk_live_•••• { "updates": [ { "sku": "TEE-BLK-M", "price": 29.90 }, { "sku": "TEE-BLK-L", "price": 29.90 } ] } → 200 OK { "applied": 2, "failed": 0 }
PATCH /v1/connections/con_c6e8/prices Authorization: Bearer zk_live_•••• { "updates": [ { "sku": "TEE-BLK-M", "price": 29.90 }, { "sku": "TEE-BLK-L", "price": 29.90 } ] } → 422 Unprocessable Entity { "error_code": "prices_not_writable", "message": "Google Merchant Center is read-only.", "errors": [] }
Catalog and variants read everywhere. Prices write on six. Google Merchant Center is read-only for now, and the table says so.
Google Merchant Center products come in without variants. Open a platform for how its stores connect.
From the first connection to the first webhook. One bearer token, one connection ID, JSON in and out.
curl -X POST https://api.zikkio.com/v1/connect/sessions \ -H "Authorization: Bearer zk_live_••••" \ -d '{ "platform": "shopify", "end_user_ref": "acme-42" }'
{
"session_id": "ses_3kd9",
"connect_url": "https://connect.zikkio.com/s/ses_3kd9",
"expires_in": 900
}
curl https://api.zikkio.com/v1/connections/con_8f2a/products?limit=2 \ -H "Authorization: Bearer zk_live_••••"
{
"data": [
{ "sku": "TEE-BLK-M", "name": "Black tee · M", "price": 29.90, "stock": 42 },
{ "sku": "TEE-BLK-L", "name": "Black tee · L", "price": 29.90, "stock": 17 }
],
"next_cursor": "eyJvZmZzZXQiOjJ9"
}
curl https://api.zikkio.com/v1/connections/con_8f2a/products/prod_41f \
-H "Authorization: Bearer zk_live_••••"
{
"id": "prod_41f",
"name": "Black tee",
"brand": "Acme",
"category": "Apparel / Tees",
"variants": [
{ "sku": "TEE-BLK-M", "price": 29.90, "cost": 11.20, "stock": 42 },
{ "sku": "TEE-BLK-L", "price": 29.90, "cost": 11.20, "stock": 17 }
]
}
curl -X PATCH https://api.zikkio.com/v1/connections/con_8f2a/prices \ -H "Authorization: Bearer zk_live_••••" \ -d '{ "updates": [ { "sku": "TEE-BLK-M", "price": 27.90 }, { "sku": "TEE-BLK-L", "price": 27.90 }, { "sku": "MUG-WHT", "price": 11.90 } ] }'
{
"applied": 2,
"failed": 1,
"rows": [
{ "sku": "TEE-BLK-M", "status": "applied", "price": 27.90 },
{ "sku": "TEE-BLK-L", "status": "applied", "price": 27.90 },
{ "sku": "MUG-WHT", "status": "failed",
"error_code": "sku_not_found" }
]
}
curl -X POST https://api.zikkio.com/v1/connections/con_8f2a/catalog/sync \
-H "Authorization: Bearer zk_live_••••"
{
"job_id": "job_9c1e",
"status": "queued",
"last_sync": "2026-10-07T06:12:00Z",
"rows": 12480
}
POST https://yourapp.example.com/webhooks/zikkio X-Zikkio-Signature: t=1759817520,v1=5f1c9e… Content-Type: application/json { "event": "catalog.synced", "connection_id": "con_8f2a", "rows": 12480, "added": 12, "removed": 3, "price_changes": 148, "occurred_at": "2026-10-07T06:14:33Z" }
HTTP/1.1 200 OK
A Shopify client takes a week. Keeping it alive on thousands of stores for years is the job.
An import that would delete more than 90% of a catalog is refused and held for review. The rule exists because it happened once.
Shopify tokens expire after an hour. Zikkio refreshes them, rotates the refresh token before its 90 days run out and locks the refresh across hosts, so a connected store stays connected.
Shopify bulk operations, resumable page downloads and retries on 429s and deadlocks keep catalogs with millions of rows complete.
Hundreds of prices in one call and a result for every SKU, on six platforms.
One row per variant with the same fields on every platform.
Magento attribute codes, PrestaShop XML webservices, stores behind Cloudflare: already in the code.
Public prices, a free plan that never expires and no metering on API calls. Every plan has a connect page, and webhooks come with every paid plan.
Build and test the integration, free for as long as you need.
$0 $0 /month
3 stores included
No credit card
For your first customers in production.
$99 $83 /month
15 stores, then $6 each
Billed monthly
$990 billed yearly
For products with a growing base of connected stores.
$299 $249 /month
75 stores, then $4 each
Billed monthly
$2,990 billed yearly
For platforms with hundreds of stores and a security review.
$799 $666 /month
300 stores, then $2.50 each
Billed monthly
$7,990 billed yearly
Prices in US dollars, taxes excluded. More than 300 stores? Talk to us Compare all plans
Pricefy reprices e-commerce catalogs for its customers. Every day it reads each store’s catalog through Zikkio, computes new prices and writes them back in bulk, on every platform its customers sell on.
Pricefy is built by the same team as Zikkio.
“The catalog cache and the token handling are the parts we would never want to build again.”
Building repricing, feeds, PIM or ERP for online stores? You need the same calls.
Start for freeWhat teams ask before they connect their first store.
Free plan with three stores on every platform. No card, and no sales call unless you ask for one.
curl -X POST https://api.zikkio.com/v1/connect/sessions \ -H "Authorization: Bearer zk_test_••••" \ -d '{ "platform": "shopify" }'
{ "connect_url": "https://connect.zikkio.com/s/ses_3kd9" }