ProductGETKT-86Pagination

List Produk

Mengambil seluruh produk yang terdaftar di katalog Vendira — termasuk SKU, harga beli, harga jual, dan gambar. Mendukung filter dan pagination.

GET /admin/products
🔒 Endpoint ini memerlukan permission product.read. Jika user tidak punya permission tersebut, response akan status: false dengan message "Forbidden". Untuk role non-Admin, data otomatis difilter berdasarkan client_id user yang login.
Contoh Request
GET https://andromeda.kasolusi.com/admin/products
  ?page=1&limit=12&category=10&product=pop+mie
Authorization: Bearer <token>
cURL
curl -X GET \
  'https://andromeda.kasolusi.com/admin/products?page=1&limit=12' \
  -H 'Authorization: Bearer <token>' \
  -H 'Accept: application/json'

Query Parameters

ParameterTipeKeterangan
pageopsionalNomor halaman — default 1
limitopsionalJumlah item per halaman — default 12
productopsionalPencarian berdasarkan nama produk (LIKE search)
categoryopsionalFilter berdasarkan ID kategori produk
machineopsionalFilter produk yang terpasang di mesin tertentu (by machine ID)
clientopsionalFilter berdasarkan ID client. Hanya berlaku untuk role Admin
Response 200 — OK
{
  "status": true,
  "message": "Berhasil",
  "data": {
    "data": [
      {
        "id": 134,
        "name": "Cap Panda Sarang Burung",
        "image": "https://kiwari-assets.oeltimacreation.com/...",
        "sku": "8995227500582",
        "harga_beli": 1,
        "harga_jual": 7000
      }
    ],
    "page": 1,
    "total": 10,
    "totalAll": 120
  }
}

Keterangan Field Response

id
number
ID produk internal
name
string
Nama produk
image
string (URL)
URL gambar produk dari asset server Kiwari
sku
string
Barcode / SKU produk (format EAN/UPC)
harga_beli
number
Harga pokok/beli produk (IDR). Dari kolom price di database
harga_jual
number
Harga jual ke konsumen (IDR). Dari kolom cost_price di database
page
number
Halaman saat ini
total
number
Total halaman berdasarkan limit
totalAll
number
Total seluruh produk yang sesuai filter
⚠️ Perhatian penamaan field: Kolom database bernama price (harga pokok) dan cost_price (harga jual), namun API mengembalikannya sebagai harga_beli dan harga_jual. Pastikan mapping ini konsisten di frontend.

Contoh — Dashboard (Nuxt)

Fetch dengan filter
const resp = await this.$api.$get(
  `/products?page=1&limit=12&category=${catId}&product=${query}`
);
const products = resp?.data?.data ?? [];
const totalAll = resp?.data?.totalAll ?? 0;