---
updatedAt: 2026-08-24T21:01:46.000Z
agentTools:
  projectIndex: https://core-api.yotpo.com/llms.txt
---

# Initial store sync

```shell cURL
# 1. Create a product
curl -X POST "https://api.yotpo.com/core/v3/stores/YOUR_STORE_ID/products" \
  -H "Content-Type: application/json" \
  -H "X-Yotpo-Token: YOUR_ACCESS_TOKEN" \
  -d '{
    "product": {
      "external_id": "23234",
      "name": "Minimal Surfboard"
    }
  }'
# Response: { "product": { "yotpo_id": 1 } }

# 2. Create (or update) a customer — PATCH is create-or-update
curl -X PATCH "https://api.yotpo.com/core/v3/stores/YOUR_STORE_ID/customers" \
  -H "Content-Type: application/json" \
  -H "X-Yotpo-Token: YOUR_ACCESS_TOKEN" \
  -d '{
    "customer": {
      "external_id": "ak123798684365sdfkj",
      "email": "name@example.com",
      "first_name": "Tom",
      "last_name": "Smith"
    }
  }'
```

```json Response Example
{
  "product": { "yotpo_id": 1 }
}
```

# Create a product

<!-- shell@1-11 -->

Products are the foundation — orders and reviews reference them by `external_id` (your system's ID, e.g., your Shopify product ID). Only `external_id` and `name` are required. If your catalog uses variants or collections, you can add them later with [Create product variant](/reference/create-product-variant) and [Create collection](/reference/create-collection) — neither is required for the initial sync.

# Create or update a customer

<!-- shell@12-24 -->

Customers use PATCH for create-or-update: if a customer with this `external_id` exists, it's updated; otherwise, it's created. That makes this call safe to re-run — ideal for sync jobs. A successful call returns 200 with an empty body. With products, customers, and orders in place (see the next recipe), your first sync is complete.