# 6. Get Product List

Retrieve the store’s catalog with optional search, filtering, and sorting, returning paginated results in the standard response envelope (list of products + pagination metadata).

Overview

Auth
HMAC Partner
Method
GET

# Path

https://partners-api.tocobagus.net/api/v1 /partner/stores/products

# Request

# Query Parameters

Name Type Required Description
q string ❌ Search Keyword
isArchived string ❌ Set to true to filter archived product
isAvailableStock boolean ❌ Set to true to filter product with available stock (Stock > 0)
isVerified boolean ❌ Set to true to filter verified product
isVariantActive boolean ❌ Set to true to filter product with active variants
sortBy string ❌ Sorting key
order string ❌ Sorting type
page integer ❌ Current Page
limit integer ❌ Limit per page

# Required Headers

Header Example Description
x-signature bdbb8833fe43671e058b56dace75763a78a2edf8de7365afb6f534d750056e80 HMAC signature of the request, computed with the partner secret and x-timestamp (auth integrity).
x-partner-client-id 2025112012475048491498 Partner identifier issued by Omni; used to locate the partner secret.
x-store-client-id 638765489981529612855 Target store identifier under the partner account.
x-store-token stkn__6AbJF05mjvxh7sh Store access token for store-level authorization.
x-timestamp 1758100350458 UNIX epoch timestamp used when computing x-signature (replay protection).

# Request Payload

Request payload: Not used for GET.

# Example Request

curl -X GET "http:///partner/stores/products?q=%3Cq%3E&isArchived=%3CisArchived%3E&isAvailableStock=%3CisAvailableStock%3E&isVerified=%3CisVerified%3E&sortBy=%3CsortBy%3E&order=%3Corder%3E&page=%3Cpage%3E&limit=%3Climit%3E" \
  -H "Content-Type: application/json" \
  -H "x-signature: bdbb8833fe43671e058b56dace75763a78a2edf8de7365afb6f534d750056e80" \
  -H "x-partner-client-id: 2025112012475048491498" \
  -H "x-store-client-id: 638765489981529612855" \
  -H "x-store-token: stkn__6AbJF05mjvxh7sh" \
  -H "x-timestamp: 1758100350458" \
const qs = new URLSearchParams({
  "q": "<q>",
  "isArchived": "<isArchived>",
  "isAvailableStock": "<isAvailableStock>",
  "isVerified": "<isVerified>",
  "sortBy": "<sortBy>",
  "order": "<order>",
  "page": "<page>",
  "limit": "<limit>"
});
const url = "http:///partner/stores/products" + (qs.toString() ? "?" + qs.toString() : "");
const res = await fetch(url, {
  method: "GET",
  headers: {
  "x-signature": "bdbb8833fe43671e058b56dace75763a78a2edf8de7365afb6f534d750056e80",
  "x-partner-client-id": "2025112012475048491498",
  "x-store-client-id": "638765489981529612855",
  "x-store-token": "stkn__6AbJF05mjvxh7sh",
  "x-timestamp": "1758100350458"
}
});
const json = await res.json();
console.log(json);
qs := url.Values{}
qs.Set("q", "<q>")
qs.Set("isArchived", "<isArchived>")
qs.Set("isAvailableStock", "<isAvailableStock>")
qs.Set("isVerified", "<isVerified>")
qs.Set("sortBy", "<sortBy>")
qs.Set("order", "<order>")
qs.Set("page", "<page>")
qs.Set("limit", "<limit>")
u := "http:///partner/stores/products"
if q := qs.Encode(); q != "" { u = u + "?" + q }
req, _ := http.NewRequest("GET", u, nil)
req.Header.Set("x-signature", "bdbb8833fe43671e058b56dace75763a78a2edf8de7365afb6f534d750056e80")
req.Header.Set("x-partner-client-id", "2025112012475048491498")
req.Header.Set("x-store-client-id", "638765489981529612855")
req.Header.Set("x-store-token", "stkn__6AbJF05mjvxh7sh")
req.Header.Set("x-timestamp", "1758100350458")
req.Header.Set("Content-Type","application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
b, _ := io.ReadAll(resp.Body)
fmt.Println(string(b))
var client = java.net.http.HttpClient.newHttpClient();
var req = java.net.http.HttpRequest.newBuilder()
    .uri(java.net.URI.create("http:///partner/stores/products?q=%3Cq%3E&isArchived=%3CisArchived%3E&isAvailableStock=%3CisAvailableStock%3E&isVerified=%3CisVerified%3E&sortBy=%3CsortBy%3E&order=%3Corder%3E&page=%3Cpage%3E&limit=%3Climit%3E"))
    .header("Content-Type","application/json")
    .header("x-signature", "bdbb8833fe43671e058b56dace75763a78a2edf8de7365afb6f534d750056e80")
    .header("x-partner-client-id", "2025112012475048491498")
    .header("x-store-client-id", "638765489981529612855")
    .header("x-store-token", "stkn__6AbJF05mjvxh7sh")
    .header("x-timestamp", "1758100350458")
    .method("GET", java.net.http.HttpRequest.BodyPublishers.noBody())
    .build();
var res = client.send(req, java.net.http.HttpResponse.BodyHandlers.ofString());
System.out.println(res.body());

# Responses

# Example Responses

{
  "success": true,
  "message": "Store catalog retrieved successfully",
  "requestId": "5485559a-258d-4576-a8ec-1f29edca2aaf",
  "meta": {
    "timestamp": "2026-02-03T15:58:41.526Z"
  },
  "data": [
    {
      "id": "2f89be61-f614-4710-bbfd-7d0ed1fbe4d0",
      "externalId": "e4fd1621-5cbd-4bf6-b26d-2da7b677e775",
      "name": "Kacamata Hitam Stylish",
      "description": "Kacamata hitam dengan desain modern, melindungi dari sinar UV.",
      "sku": "SKU-KCM-HITAM-1",
      "price": 120000,
      "stock": 39,
      "weight": 200,
      "dimensions": {
        "length": 0,
        "width": 0,
        "height": 0
      },
      "minOrder": 1,
      "categoryId": "0e882586-c506-4792-a831-02767a68dae2",
      "departmentId": "2fde2994-28a8-4d09-a128-6d744b9e1323",
      "brandId": "b3f1a2c4-d5e6-7890-abcd-ef1234567890",
      "hashtags": [],
      "condition": "NEW",
      "photos": [
        "https://d13eru2cpf9i9v.cloudfront.net/toco/img/image-1769658210637.webp",
        "https://d13eru2cpf9i9v.cloudfront.net/toco/img/image-1769658210707.webp",
        "https://d13eru2cpf9i9v.cloudfront.net/toco/img/image-1769658210570.webp",
        "https://d13eru2cpf9i9v.cloudfront.net/toco/img/image-1769658210608.webp",
        "https://d13eru2cpf9i9v.cloudfront.net/toco/img/image-1769658210559.webp",
        "https://d13eru2cpf9i9v.cloudfront.net/toco/img/image-1769658210544.webp"
      ],
      "thumbnails": [
        "https://d13eru2cpf9i9v.cloudfront.net/toco/img/image-1769658210637-thumbnail.webp",
        "https://d13eru2cpf9i9v.cloudfront.net/toco/img/image-1769658210707-thumbnail.webp",
        "https://d13eru2cpf9i9v.cloudfront.net/toco/img/image-1769658210570-thumbnail.webp",
        "https://d13eru2cpf9i9v.cloudfront.net/toco/img/image-1769658210608-thumbnail.webp",
        "https://d13eru2cpf9i9v.cloudfront.net/toco/img/image-1769658210559-thumbnail.webp",
        "https://d13eru2cpf9i9v.cloudfront.net/toco/img/image-1769658210544-thumbnail.webp"
      ],
      "isPreorder": false,
      "preorderPeriod": 0,
      "hasVariant": true,
      "isArchived": false,
      "insuranceRequired": false,
      "codEnabled": false,
      "isVerified": true,
      "variants": {
        "items": [
          {
            "id": "cde66255-8f87-43f6-acbf-329515bd2283",
            "name": "Variant",
            "sku": "SKU-KCM-HITAM-1",
            "isActive": true,
            "price": 120000,
            "optionIndexes": [
              0
            ],
            "photos": [
              "https://img.freepik.com/free-vector/image-upload-concept-illustration_23-2148276163.jpg"
            ],
            "stock": 20,
            "warehouses": [
              {
                "id": "625d5773-6bb7-4ef8-8692-e44191dc53a7",
                "clientId": "2026012714314318226016",
                "stock": 20,
                "isActive": true
              }
            ]
          },
          {
            "id": "79d5cd58-e8b5-4227-b5ed-3d73bced3260",
            "name": "Variant",
            "sku": "SKU-KCM-HITAM-2",
            "isActive": true,
            "price": 125000,
            "optionIndexes": [
              1
            ],
            "photos": [
              "https://img.freepik.com/free-vector/image-upload-concept-illustration_23-2148276163.jpg"
            ],
            "stock": 19,
            "warehouses": [
              {
                "id": "625d5773-6bb7-4ef8-8692-e44191dc53a7",
                "clientId": "2026012714314318226016",
                "stock": 20,
                "isActive": true
              }
            ]
          }
        ],
        "optionGroups": [
          {
            "level": 1,
            "name": "Color",
            "values": [
              {
                "label": "Black"
              },
              {
                "label": "Brown"
              }
            ]
          }
        ]
      }
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 20,
    "total": 1,
    "totalPages": 1,
    "hasNext": false,
    "hasPrev": false
  }
}
{
  "success": false,
  "error": {
    "code": "AUTH_010",
    "message": "Invalid signature",
    "details": {
      "timestamp": "2025-08-27T13:47:12.030Z",
      "hint": "Invalid HMAC signature",
      "context": {
        "partnerClientId": "2025112512510620439726"
      }
    }
  },
  "requestId": "662a9593-33fc-44b3-8240-70ca4780b8f9"
}
{
  "success": false,
  "error": {
    "code": "AUTH_014",
    "message": "Access forbidden",
    "details": {
      "timestamp": "2025-08-27T15:59:20.686Z",
      "hint": "Store not found, access blocked, or invalid token",
      "context": {
        "storeClientId": "638765489981529612495"
      }
    }
  },
  "requestId": "f4462ee7-d1a2-4b9d-9ed3-4aa78756c427"
}
{
  "success": false,
  "error": {
    "code": "SYS_UPS_001",
    "message": "Failed getting response from upstream",
    "details": {
      "timestamp": "2025-08-27T13:38:06.227Z",
      "hint": "A required internal dependency is temporarily unavailable. Please retry.",
      "context": {
        "error": "read ETIMEDOUT",
        "category": "timeout",
        "retryable": true
      }
    }
  },
  "requestId": "e38559e6-6d6a-4591-a83b-d5a93807a204"
}

# Dictionary

None for this endpoint.

# Notes

None for this endpoint.