Zopping
API reference

Storefront API

The buyer-facing API served by the frontend gateway at the store's own domain. Browse, cart, checkout and account endpoints for building a storefront or app — see The layout system and Build a storefront. Browse and layout endpoints are public; account, cart-at-checkout, orders and wishlist need a customer session (Authorization: Bearer <accessToken> from login).

Base URLhttps://<store-domain>

Storefront config

Resolve the store the visitor landed on — theme, currency, enabled extensions, logo — and store details. Public.

GET/api/organization

Get store/organization config

Theme, currency, logo, enabled features, default store. The first call a storefront makes. Public.

Response
{
  "name": "Tamimi",
  "logo": "https://cdn/.../logo.png",
  "currency": {
    "name": "Saudi Riyal",
    "symbol": "SR"
  },
  "theme": {
    "name": "Fashion",
    "slug": "theme-fashion"
  },
  "defaultStoreId": 7,
  "languages": [
    "en",
    "ar"
  ],
  "config": {
    "order": {
      "orderTypes": [
        "DELIVERY",
        "PICKUP"
      ],
      "paymentMethods": [
        "CASH",
        "ONLINE"
      ],
      "minimumOrderValue": 50
    },
    "website": {
      "primaryColour": "#0a7",
      "authProviders": [
        "OTP",
        "PASSWORD"
      ],
      "isCustomerWishlistEnabled": true
    }
  }
}
GET/api/store

List enabled stores

GET/api/serviceable-area

Check serviceability

Parameters
ParameterTypeDescription
address[pincode]string· query
GET/api/slot-availability

Delivery/pickup slots

Layout & navigation

Merchant-configured page layouts and chrome. Render from each section's value. See The layout system. Public.

GET/api/layout/home

Homepage layout

GET/api/layout/category

Category page layout

Parameters
ParameterTypeDescription
urlrequiredstring· queryCategory slug.
GET/api/layout/product

Product page layout

Parameters
ParameterTypeDescription
urlrequiredstring· queryProduct slug.
GET/api/layout/search

Search results layout

Parameters
ParameterTypeDescription
qrequiredstring· query
GET/api/layout/page

Static/CMS page layout

Parameters
ParameterTypeDescription
urlrequiredstring· query
GET/api/nav

Header navigation

GET/api/footerLinks

Footer links

GET/api/announcement

Announcement bar

Catalog browse

Public product discovery. Filter, search, sort and paginate. Price and stock live on storeSpecificData — see the price math.

Fields
FieldTypeDescription
idintegerread-only
namestringread-only
slugstringread-onlyUse in layout/PDP URLs.
imagesstring[]read-onlyImage URLs (extra sizes in imagesExtra).
storeSpecificDataobject[]read-onlyPer store: mrp (string), discount (% string), stock (int), unlimitedStock.
variantsobject[]read-onlyEach carries its own storeSpecificData + images.
hasVariants0 | 1read-only
averageRating / totalReviewsnumberread-only
brand / primaryCategoryIdobject / intread-only
GET/api/product

Search / list products

Parameters
ParameterTypeDescription
qstring· querySearch query.
categorystring· queryCategory slug.
brandstring· queryBrand slug.
pageinteger· query
limitinteger· query
Request
curl "https://<store-domain>/api/product?q=rice&category=staples&limit=20"
Response
{
  "count": 240,
  "limit": 20,
  "offset": 0,
  "product": [
    {
      "id": 10231,
      "name": "Tata Salt 1kg",
      "slug": "tata-salt-1kg",
      "images": [
        "https://…/p1.jpg"
      ],
      "storeSpecificData": [
        {
          "storeId": "<store-id>",
          "mrp": "28.00",
          "discount": "10",
          "stock": 240
        }
      ],
      "hasVariants": 0,
      "averageRating": 4.4
    }
  ]
}
GET/api/category

Category tree

GET/api/brand

Brand list

GET/api/store-product/{id}

Products at a store

Parameters
ParameterTypeDescription
idrequiredinteger· path
GET/api/product/{id}/substitutes

Substitute products

Parameters
ParameterTypeDescription
idrequiredinteger· path

Cart

A local-first cart synced to the server. Items use id (variant id), q (quantity as string), t (timestamp ms). Set q: "0" to remove. Works for guests.

GET/api/cart

Get cart

Render line items from `items`, the summary from `amounts`, and the headline from `youPay` / `savings`.

Response
{
  "items": [
    {
      "id": "88120",
      "q": 2,
      "mrp": 28,
      "discount": 10,
      "product": {
        "name": "Tata Salt 1kg"
      }
    }
  ],
  "youPay": 50.4,
  "savings": 5.6,
  "amounts": {
    "orderAmount": 50.4,
    "totalMRP": 56,
    "totalDiscount": 5.6,
    "shippingAmount": 0,
    "totalCouponDiscount": 0
  },
  "isServiceable": true,
  "storeId": "<store-id>",
  "orderType": "DELIVERY"
}
POST/api/cart

Add / update items

Request body
{
  "cart": {
    "items": [
      {
        "id": "88120",
        "q": "2",
        "t": 1750000000000
      }
    ]
  },
  "orderType": "DELIVERY",
  "storeId": "<store-id>"
}
DELETE/api/cart

Clear cart

Checkout & coupons

Calculate totals, slots and payment options, then validate coupons. Guest or authenticated.

GET/api/checkout

Checkout summary

POST/api/checkout

Calculate checkout

Returns the recomputed `cart` (with `amounts`), available `slot`s keyed by date, `paymentMethods`, and per-coupon results.

Request body
{
  "cart": {
    "items": [
      {
        "id": "88120",
        "q": "2"
      }
    ],
    "orderType": "DELIVERY",
    "storeId": "<store-id>"
  },
  "addressId": "addr-123",
  "preferredSlotId": 31,
  "paymentMethod": "ONLINE",
  "couponCodes": [
    "SAVE20"
  ]
}
Response
{
  "cart": {
    "youPay": 70.4,
    "amounts": {
      "shippingAmount": 20,
      "totalCouponDiscount": 0
    }
  },
  "slot": {
    "2026-06-23": [
      {
        "id": 31,
        "text": "9–10 AM",
        "available": true,
        "charge": 0
      }
    ]
  },
  "paymentMethods": [
    "CASH",
    "ONLINE"
  ],
  "couponDiscounts": [
    {
      "coupon": {
        "couponCode": "SAVE20"
      },
      "applied": false,
      "error": "Min order not met"
    }
  ]
}
GET/api/apply-coupon

Validate a coupon

Parameters
ParameterTypeDescription
coderequiredstring· query
GET/api/coupon

List claimable coupons

Account & auth

Customer authentication and profile. login/register/customer-verification return an accessToken you send as Authorization: Bearer <accessToken> on authenticated calls.

POST/api/login

Log in

Request body
{
  "username": "asha@example.com",
  "password": "••••••"
}
Response
{
  "accessToken": "eyJ…",
  "customer": {
    "id": 7781,
    "email": "asha@example.com"
  }
}
POST/api/register

Register

Request body
{
  "name": "Asha",
  "email": "asha@example.com",
  "phone": "9876543210",
  "password": "••••••"
}
POST/api/otp

Send OTP

Request body
{
  "phone": "9876543210"
}
POST/api/customer-verification

Verify OTP

Request body
{
  "phone": "9876543210",
  "code": "123456"
}
POST/api/logout

Log out

GET/api/me

Get profile

PUT/api/me

Update profile

POST/api/password

Change password

Addresses

The signed-in customer's saved delivery addresses.

GET/api/address

List addresses

POST/api/address

Add address

Request body
{
  "address": "12 MG Road",
  "city": "Bengaluru",
  "pincode": "560001",
  "latitude": 12.9758,
  "longitude": 77.6096
}
PUT/api/address/{id}

Update address

Parameters
ParameterTypeDescription
idrequiredinteger· path
DELETE/api/address/{id}

Delete address

Parameters
ParameterTypeDescription
idrequiredinteger· path

Orders

Place and track the signed-in customer's own orders.

POST/api/order

Place an order

GET/api/order

Order history

GET/api/order/{id}

Order details

Parameters
ParameterTypeDescription
idrequiredinteger· path
DELETE/api/order/{id}

Cancel order

Parameters
ParameterTypeDescription
idrequiredinteger· path
POST/api/order/{id}/payment

Initiate / retry payment

Parameters
ParameterTypeDescription
idrequiredinteger· path
GET/api/invoice/{id}

Invoice

Parameters
ParameterTypeDescription
idrequiredinteger· path
GET/api/track

Track delivery

Parameters
ParameterTypeDescription
orderIdrequiredstring· query

Wishlist

Saved products for the signed-in customer.

GET/api/wish-list

List wishlists

POST/api/wish-list/default/product

Add to default wishlist

Request body
{
  "productId": 10231
}
DELETE/api/wish-list/default/product

Remove from default wishlist

Request body
{
  "productId": 10231
}