Skip to content

Developer API

Products API

List products, read low-stock status, update a product, submit a stock adjustment request and list adjustment requests, with the request and response shapes and the errors.

Updated 20 September 2026

The products endpoints let an external system keep its catalogue in step with Kuver Books, read stock status and ask for stock corrections. All of them sit under /api/v1/external/products and need the headers described under Authentication.

How an adjustment request is handled

A stock adjustment submitted through the API is not applied straight away. It is created as Pending, exactly like an adjustment made on screen, and waits for an authorised user. On approval the stock is updated and the movement recorded; a rejected request is voided. See Inventory adjustments for the approval side.

List products

GET /api/v1/external/products

Query parameters, all optional: page (default 1), limit (default 10, at most 100) and search, matched against the product name or SKU.

{
  "success": true,
  "data": [
    {
      "id": "a1b2c3d4-e5f6-7a8b-9c0d-1e2f3a4b5c6d",
      "name": "Standard Product",
      "slug": "standard-product",
      "price": 1500,
      "sku": "SKU-1001"
    }
  ],
  "pagination": { "total": 1, "page": 1, "limit": 10 }
}

A limit above 100 is answered with 400 and limit must not be greater than 100.

Low-stock status

GET /api/v1/external/products/stock

Returns the number of products below their minimum stock level and the status:

{
  "success": true,
  "data": { "productCount": 15, "status": "OUT_OF_STOCK" }
}

Update a product

PUT /api/v1/external/products/:id

id is the product’s UUID. Send the fields to change:

{ "name": "Updated Product Name", "price": 1600 }

The response returns the updated product. An unknown UUID is answered with 404 Product not found; an invalid value, such as a negative price, with 400 and the rule that failed (price must be a positive number).

Submit a stock adjustment request

POST /api/v1/external/products/adjust

This request changes data, so the payload must be signed.

{
  "warehouseId": "w1e2r3t4-y5u6-i7o8-p9a0-s1d2f3g4h5j6",
  "reason": "Damaged stock replacement",
  "items": [
    { "productId": "p1o2i3u4-y5t6-r7e8-w9q0-l1k2j3h4g5f6", "quantity": 10, "type": "STOCK_IN" }
  ]
}

type is STOCK_IN to add stock or STOCK_OUT to remove it. The response is 201 with the request, its id and status of PENDING. A line with an invalid quantity is answered with 400 (Row 1: Items quantity must be a positive number); an unknown warehouse with 404 Warehouse not found.

List stock adjustment requests

GET /api/v1/external/products/adjustments

Paginated like the product list, with an optional status filter of PENDING, APPROVED or REJECTED. Any other value is answered with 400.

{
  "success": true,
  "data": [
    {
      "id": "adj-uuid-12345",
      "warehouseId": "w1e2r3t4-y5u6-i7o8-p9a0-s1d2f3g4h5j6",
      "status": "APPROVED",
      "reason": "Damaged stock replacement"
    }
  ],
  "pagination": { "total": 1, "page": 1, "limit": 10 }
}

Free consultation

Get a free 30‑minute setup consultation

A Kuver Books specialist in Kathmandu walks through billing, inventory and VAT for your exact business. No commitment, no sales pitch.

No spam. A real person replies within one business day, Sunday to Friday. By booking, you agree we may contact you about Kuver Books (privacy notice).