How can we help you?

Popup image
All Categories Developer API How to Update Product Data Using the Zepio Developer API

How to Update Product Data Using the Zepio Developer API

Written by Saurabh
Updated 2 weeks ago

Products Update API

Creating API Key

The Products Update API allows you to bulk update product details in your Zepio store using a secure API key.

Create API Key

  • Login to your Zepio Admin Dashboard.
  • Go to: Settings > Developer API
  • Create a new API key and select this ability: Update products

Use this API key when making requests to the Products Update API.

Base URL

https://yourwebsite.com/api/developer/v1

Replace yourwebsite.com with your store domain.

Authentication

Send your API key as a Bearer Token in the request header.

Authorization: Bearer YOUR_API_KEY
Accept: application/json
Content-Type: application/json

Endpoints

Method Endpoint Description
POST /products/bulk-update Bulk update one or more products

Bulk Update Products

Updates one or more existing products in a single request. Only the fields you send are updated — you do not need to send the full product object.

POST /api/developer/v1/products/bulk-update

Request Body

Field Type Required Description
branch_id integer No Default branch ID for all products. Default: 1
products array Yes List of products to update. Minimum: 1, Maximum: 100

Product Object Fields

Each item in products must include either id or erp_id, plus at least one field to update.

Field Type Required Description
id integer Yes* Internal Zepio product ID. Use this for normal stores.
erp_id string Yes* ERP product ID. Use this when syncing from an external ERP system.
branch_id integer No Branch ID for this product. Overrides the top-level branch_id.
name string No Product name
description string No Product description
original_price number No Original/MRP price
selling_price number No Selling price
track_quantity boolean No Enable or disable stock tracking
unit_quantity number No Available stock quantity
weight_unit string No Weight unit. Allowed values: gm, kg
unit_weight number No Product weight
length number No Product length
width number No Product width
height number No Product height
images array No Product images. See Images below.
tax_id integer No Tax ID from your store
min_quantity number No Minimum order quantity
max_quantity number No Maximum order quantity
low_stock_alert integer No Low stock alert threshold. Cleared when track_quantity is false.
categories array No Array of category IDs. Replaces existing categories.
is_active boolean No Enable or disable the product
aliases_list array No Search aliases. Replaces existing aliases.

* Either id or erp_id is required for each product. If both are sent, erp_id is used for lookup.

Product Lookup

Lookup type When to use How it works
id Normal Zepio stores Finds product by internal product ID
erp_id ERP / enterprise sync Finds product by erp_id + branch_id

Example Requests

Update by ERP ID

curl -X POST "https://yourwebsite.com/api/developer/v1/products/bulk-update" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "branch_id": 1,
    "products": [
      {
        "erp_id": "123456",
        "name": "Organic Almonds 500g",
        "original_price": 120,
        "selling_price": 100,
        "track_quantity": true,
        "unit_quantity": 120,
        "images": [
          "https://placehold.co/600x400/orange/white",
          "https://placehold.co/600x400/orange/white"
        ],
        "aliases_list": ["badam", "almonds"]
      }
    ]
  }'

Update by Internal Product ID

curl -X POST "https://yourwebsite.com/api/developer/v1/products/bulk-update" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "products": [
      {
        "id": 88,
        "selling_price": 199,
        "is_active": true
      }
    ]
  }'

Update Multiple Products

curl -X POST "https://yourwebsite.com/api/developer/v1/products/bulk-update" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "branch_id": 1,
    "products": [
      {
        "erp_id": "123456",
        "selling_price": 100,
        "unit_quantity": 120
      },
      {
        "erp_id": 6789,
        "name": "Fresh Apples",
        "is_active": false
      }
    ]
  }'

Update Price and Stock Only

curl -X POST "https://yourwebsite.com/api/developer/v1/products/bulk-update" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "products": [
      {
        "id": 88,
        "selling_price": 149,
        "track_quantity": true,
        "unit_quantity": 50,
        "low_stock_alert": 5
      }
    ]
  }'

Example Responses

Success

{
  "success": true,
  "message": "2 product(s) queued for processing.",
  "data": {
    "queued_count": 2,
  }
}

Response Fields

Field Description
updated_count Number of products successfully updated
failed_count Number of products that failed to update
failed List of failed product updates with error details
failed[].index Position of the failed product in the request array
failed[].id Product ID sent in the request, if any
failed[].erp_id ERP ID sent in the request, if any
failed[].branch_id Branch ID used for that product
failed[].message Short error message
failed[].errors Detailed validation errors, if available

Images

The images field accepts an array of image URLs or media UUIDs.

Option 1: Image URLs

Send an array of public image URLs. This replaces all existing product images.

"images": [
  "https://yourwebsite.com/images/product-1.jpg",
  "https://yourwebsite.com/images/product-2.jpg"
]

Option 2: Media Manager UUIDs

Send an array of image objects using UUIDs from your Zepio Media Manager. This attaches existing uploaded images to the product.

"images": [
  { "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" },
  { "uuid": "b2c3d4e5-f6a7-8901-bcde-f12345678901" }
]

Option 3: UUID with URL

"images": [
  {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "url": "https://yourwebsite.com/media/product-1.jpg"
  }
]

Image Notes

  • If all images are UUID-based, existing media manager images are reassigned to the product.
  • If image URLs are used, all existing product images are replaced with the new URLs.
  • Sending an empty images array removes all product images.
  • Image order in the array is preserved as display position.

Categories and Aliases

Categories

categories replaces the product's current categories.

"categories": [12, 18, 25]

Aliases

aliases_list replaces the product's current search aliases.

"aliases_list": ["badam", "almonds", "dry fruit"]

Notes

  • The API key must have the Update products ability (products:update).
  • Maximum 100 products per request.
  • This endpoint only updates existing products. It does not create new products.
  • Each product must include either id or erp_id.
  • Each product must include at least one field to update besides id, erp_id, and branch_id.
  • Use id for normal Zepio product updates.
  • Use erp_id when syncing products from an external ERP system.
  • If both id and erp_id are sent, lookup uses erp_id.
  • For erp_id lookup, the product is matched using erp_id + branch_id.
  • For id lookup, branch_id is optional. If provided, the product must belong to that branch.
  • Partial updates are supported — send only the fields you want to change.
  • Updates are processed one product at a time. Some products may succeed while others fail in the same request.
  • If at least one product is updated, the response returns success: true with details in failed.
  • If no products are updated, the response returns success: false with HTTP status 422.
Did this answer your question?
Sad
Neutral
Happy

Not finding what you are looking for?

Chat with us or send us an email.


Stackcanyon Technologies LLP

© Zepio All rights reserved 2026