Zopping

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 topicPath (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

  1. Shopify fires orders/create → POST /orders/create/{organizationId}.
  2. Zopping resolves the customer and maps line_items (by Shopify product/variant id) to Zopping variants, then creates the order in order-service. note_attributes carry storeId, delivery slot and coordinates.
  3. 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.

DirectionEvents
PUSHPRODUCT_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/longitude where Shopify omits them.
  • Reference: the inbound endpoints are listed in Integrations.