Set up Shopify
Connect a Shopify store to Zopping so products, orders, customers and locations stay in sync. This is a built-in connector — you configure it, you don't build it.
What syncs
Sync is bidirectional:
- Inbound (Shopify → Zopping) via webhooks — orders (create/cancel/update), customers (create/update), products (create/update/delete), locations (create/update/delete).
- Outbound pull (Zopping ← Shopify) for the initial backfill — products, locations and inventory.
1. Connect & configure credentials
Create a Shopify Admin API access token (scopes: read/write on products, orders, customers, locations) and register the store with Zopping. Credentials are held in the organization's integration config:
{
"partnerIntegration": {
"partnerCredentials": {
"SHOPIFY": {
"domain": "your-shop.myshopify.com",
"accessToken": "shpat_…"
}
}
}
}
domain and accessToken are what you provide; Zopping fills the
integration user and organization context.
2. Point Shopify webhooks at Zopping
Register each Shopify topic to its Zopping endpoint. Every path is a POST
under https://zopping.com/api/partner-integrations, and your organizationId is
the last path segment. For organization <org-id>, the order-create webhook URL is:
https://zopping.com/api/partner-integrations/orders/create/<org-id>
| Shopify topic | Path (append /{organizationId}) |
|---|---|
orders/create | /orders/create/{organizationId} |
orders/cancelled | /orders/cancel/{organizationId} |
orders/updated | /orders/ItemsUpdate/{organizationId} |
customers/create | /customers/create/{organizationId} |
customers/update | /customers/update/{organizationId} |
products/create | /products/create/{organizationId} |
products/update | /products/update/{organizationId} |
products/delete | /products/delete/{organizationId} |
locations/create | /locations/create/{organizationId} |
locations/update | /locations/update/{organizationId} |
locations/delete | /locations/delete/{organizationId} |
Zopping maps each Shopify payload to the right Zopping operation — Shopify's
id becomes Zopping's clientId / clientItemId, so records stay linked and
re-deliveries are idempotent.
3. Backfill existing data
Pull what's already in Shopify (paginated, rate-limited automatically):
curl -X POST https://zopping.com/api/partner-integrations/products/pull/<org-id>
curl -X POST https://zopping.com/api/partner-integrations/stores/pull/<org-id>
curl -X POST https://zopping.com/api/partner-integrations/inventory/pull/<org-id>
How a Shopify order lands
- Shopify fires
orders/create→POST /orders/create/{organizationId}. - Zopping resolves the customer and maps
line_items(by Shopify product/variant id) to Zopping variants, then creates the order in order-service.note_attributescarrystoreId, delivery slot and coordinates. - If the Shopify order is
paid, Zopping records the payment.
Supported events (Zopping → Shopify)
Sync is bidirectional: beyond the inbound webhooks above, Zopping pushes these events back to Shopify as they happen. Direction: PUSH = Zopping → Shopify.
| Direction | Events |
|---|---|
| PUSH | PRODUCT_CREATE, PRODUCT_UPDATE, CUSTOMER_CREATE, CUSTOMER_BASIC_EDIT, STORE_CREATE, STORE_BASIC_EDIT, INVENTORY_UPDATE, ORDER_CREATE, ORDER_ITEMS_EDIT, ORDER_PAYMENT, ORDER_COMPLETE, ORDER_CANCEL, ORDER_DISPATCH, ORDER_PACK, ORDER_STATUS_UPDATE |
Enable delivery per event via event integrations.
Notes
- Delivery is at-least-once; Zopping dedupes on
clientId. Make your side idempotent too. - Geocoding fills address
latitude/longitudewhere Shopify omits them. - Reference: the inbound endpoints are listed in Integrations.