Skip to content
Mock APIs

Resources

Products

A fictional product catalog across categories with pricing, discounts, ratings, and stock levels. The dataset contains 100 products.

Writes are simulated

POST, PUT, PATCH, and DELETE validate your input and return realistic responses, but the shared dataset is never modified.

Endpoints

The product object

Use select to return a subset of these fields. Sort with sortBy on id, title, price, rating, stock, discountPercentage; search matches title, description, brand, category, tags. See query parameters.

product fields
FieldTypeNotes
idintegermin -9007199254740991, max 9007199254740991
titlestring
descriptionstring
categorystring
brandstring
pricenumber
discountPercentagenumber
ratingnumber
stockintegermin -9007199254740991, max 9007199254740991
skustring
tagsstring[]
availabilityStatus"In Stock" | "Low Stock" | "Out of Stock"
thumbnailstring

List products

GET/api/v1/products

Returns a paginated list of products. Supports pagination, field selection, sorting, and filtering.

Parameters

Parameters for List products
NameInTypeDescription
limitqueryintegerNumber of records to return (1-100).Default: 30Range: 1-100
skipqueryintegerNumber of records to skip before returning results.Default: 0Range: 0-1000000
selectquerystringComma-separated list of fields to return. id is always included. Allowed: id, title, description, category, brand, price, discountPercentage, rating, stock, sku, tags, availabilityStatus, thumbnail.
sortByquerystringField to sort by.One of: id, title, price, rating, stock, discountPercentageDefault: id
orderquerystringSort direction.One of: asc, descDefault: asc
categoryquerystringFilter by category slug.
brandquerystringFilter by brand (case-insensitive exact match).
availabilityStatusquerystringFilter by stock availability.One of: In Stock, Low Stock, Out of Stock
minPricequerynumberMinimum price (inclusive).
maxPricequerynumberMaximum price (inclusive).
minRatingquerynumberMinimum rating (inclusive).
delayqueryintegerDelay the response by this many milliseconds (0-5000). Subject to a stricter rate limit.Range: 0-5000

Status codes

  • 200A page of products with total, skip, and limit metadata.
  • 400Invalid path or query parameter (INVALID_PARAMETER / INVALID_ID).
  • 429Too many requests from this IP (RATE_LIMIT_EXCEEDED).
  • 503The database is temporarily unavailable (SERVICE_UNAVAILABLE).

Request

curl 'https://test.naimulhassan.me/api/v1/products?limit=2'

Example responses

Captured from the real API with the requests shown on this page.

200application/json
{
  "products": [
    {
      "id": 1,
      "title": "Lumio Nova X5 Smartphone",
      "description": "The Lumio Nova X5 Smartphone features all-day battery life and water and dust resistance. A dependable choice from Lumio.",
      "category": "smartphones",
      "brand": "Lumio",
      "price": 1190.99,
      "discountPercentage": 21.56,
      "rating": 2.9,
      "stock": 50,
      "sku": "SMA-LUM-0001",
      "tags": [
        "mobile",
        "5g",
        "electronics"
      ],
      "availabilityStatus": "In Stock",
      "thumbnail": "https://test.naimulhassan.me/api/v1/images/products/1"
    },
    {
      "id": 2,
      "title": "Lumio Nova X5 Pro Smartphone",
      "description": "The Lumio Nova X5 Pro Smartphone features water and dust resistance and a dual-lens camera system. A dependable choice from Lumio.",
      "category": "smartphones",
      "brand": "Lumio",
      "price": 306.99,
      "discountPercentage": 9.03,
      "rating": 4.4,
      "stock": 146,
      "sku": "SMA-LUM-0002",
      "tags": [
        "mobile",
        "5g"
      ],
      "availabilityStatus": "In Stock",
      "thumbnail": "https://test.naimulhassan.me/api/v1/images/products/2"
    }
  ],
  "total": 100,
  "skip": 0,
  "limit": 2
}

Try it

GET
Headers

No header yet.

Open in playground
Send the request to see a live response.
GET/api/v1/products/search

Case-insensitive search across title, description, brand, category, tags. Returns an empty products array with total: 0 when nothing matches.

Parameters

Parameters for Search products
NameInTypeDescription
qrequiredquerystringSearch term (1-100 characters).
limitqueryintegerNumber of records to return (1-100).Default: 30Range: 1-100
skipqueryintegerNumber of records to skip before returning results.Default: 0Range: 0-1000000
selectquerystringComma-separated list of fields to return. id is always included. Allowed: id, title, description, category, brand, price, discountPercentage, rating, stock, sku, tags, availabilityStatus, thumbnail.
sortByquerystringField to sort by.One of: id, title, price, rating, stock, discountPercentageDefault: id
orderquerystringSort direction.One of: asc, descDefault: asc
delayqueryintegerDelay the response by this many milliseconds (0-5000). Subject to a stricter rate limit.Range: 0-5000

Status codes

  • 200Matching products (possibly empty).
  • 400Missing or invalid q parameter (INVALID_PARAMETER).
  • 429Too many requests from this IP (RATE_LIMIT_EXCEEDED).

Request

curl 'https://test.naimulhassan.me/api/v1/products/search?q=phone&limit=2'

Example responses

Captured from the real API with the requests shown on this page.

200application/json
{
  "products": [
    {
      "id": 1,
      "title": "Lumio Nova X5 Smartphone",
      "description": "The Lumio Nova X5 Smartphone features all-day battery life and water and dust resistance. A dependable choice from Lumio.",
      "category": "smartphones",
      "brand": "Lumio",
      "price": 1190.99,
      "discountPercentage": 21.56,
      "rating": 2.9,
      "stock": 50,
      "sku": "SMA-LUM-0001",
      "tags": [
        "mobile",
        "5g",
        "electronics"
      ],
      "availabilityStatus": "In Stock",
      "thumbnail": "https://test.naimulhassan.me/api/v1/images/products/1"
    },
    {
      "id": 2,
      "title": "Lumio Nova X5 Pro Smartphone",
      "description": "The Lumio Nova X5 Pro Smartphone features water and dust resistance and a dual-lens camera system. A dependable choice from Lumio.",
      "category": "smartphones",
      "brand": "Lumio",
      "price": 306.99,
      "discountPercentage": 9.03,
      "rating": 4.4,
      "stock": 146,
      "sku": "SMA-LUM-0002",
      "tags": [
        "mobile",
        "5g"
      ],
      "availabilityStatus": "In Stock",
      "thumbnail": "https://test.naimulhassan.me/api/v1/images/products/2"
    }
  ],
  "total": 18,
  "skip": 0,
  "limit": 2
}

Try it

GET
Headers

No header yet.

Open in playground
Send the request to see a live response.

List product categories

GET/api/v1/products/categories

Returns every product category with a display name and product count.

Parameters

Parameters for List product categories
NameInTypeDescription
delayqueryintegerDelay the response by this many milliseconds (0-5000). Subject to a stricter rate limit.Range: 0-5000

Status codes

  • 200All categories.

Request

curl 'https://test.naimulhassan.me/api/v1/products/categories'

Example responses

Captured from the real API with the requests shown on this page.

200application/json
{
  "categories": [
    {
      "slug": "audio",
      "name": "Audio",
      "productCount": 10
    },
    {
      "slug": "beauty",
      "name": "Beauty",
      "productCount": 10
    },
    {
      "slug": "furniture",
      "name": "Furniture",
      "productCount": 10
    },
    {
      "slug": "groceries",
      "name": "Groceries",
      "productCount": 10
    },
    {
      "slug": "kitchen-accessories",
      "name": "Kitchen Accessories",
      "productCount": 10
    },
    {
      "slug": "laptops",
      "name": "Laptops",
      "productCount": 10
    },
    {
      "slug": "smartphones",
      "name": "Smartphones",
      "productCount": 10
    },
    {
      "slug": "sports-accessories",
      "name": "Sports Accessories",
      "productCount": 10
    },
    {
      "slug": "tablets",
      "name": "Tablets",
      "productCount": 10
    },
    {
      "slug": "wearables",
      "name": "Wearables",
      "productCount": 10
    }
  ],
  "total": 10
}

Try it

GET
Headers

No header yet.

Open in playground
Send the request to see a live response.

List products in a category

GET/api/v1/products/category/{category}

Returns products in the given category. Unknown categories return 404.

Parameters

Parameters for List products in a category
NameInTypeDescription
categoryrequiredpathstringCategory slug.
limitqueryintegerNumber of records to return (1-100).Default: 30Range: 1-100
skipqueryintegerNumber of records to skip before returning results.Default: 0Range: 0-1000000
selectquerystringComma-separated list of fields to return. id is always included. Allowed: id, title, description, category, brand, price, discountPercentage, rating, stock, sku, tags, availabilityStatus, thumbnail.
sortByquerystringField to sort by.One of: id, title, price, rating, stock, discountPercentageDefault: id
orderquerystringSort direction.One of: asc, descDefault: asc
delayqueryintegerDelay the response by this many milliseconds (0-5000). Subject to a stricter rate limit.Range: 0-5000

Status codes

  • 200A page of products in the category.
  • 400Invalid path or query parameter (INVALID_PARAMETER / INVALID_ID).
  • 404Unknown category (RESOURCE_NOT_FOUND).

Request

curl 'https://test.naimulhassan.me/api/v1/products/category/smartphones?limit=2'

Example responses

Captured from the real API with the requests shown on this page.

200application/json
{
  "products": [
    {
      "id": 1,
      "title": "Lumio Nova X5 Smartphone",
      "description": "The Lumio Nova X5 Smartphone features all-day battery life and water and dust resistance. A dependable choice from Lumio.",
      "category": "smartphones",
      "brand": "Lumio",
      "price": 1190.99,
      "discountPercentage": 21.56,
      "rating": 2.9,
      "stock": 50,
      "sku": "SMA-LUM-0001",
      "tags": [
        "mobile",
        "5g",
        "electronics"
      ],
      "availabilityStatus": "In Stock",
      "thumbnail": "https://test.naimulhassan.me/api/v1/images/products/1"
    },
    {
      "id": 2,
      "title": "Lumio Nova X5 Pro Smartphone",
      "description": "The Lumio Nova X5 Pro Smartphone features water and dust resistance and a dual-lens camera system. A dependable choice from Lumio.",
      "category": "smartphones",
      "brand": "Lumio",
      "price": 306.99,
      "discountPercentage": 9.03,
      "rating": 4.4,
      "stock": 146,
      "sku": "SMA-LUM-0002",
      "tags": [
        "mobile",
        "5g"
      ],
      "availabilityStatus": "In Stock",
      "thumbnail": "https://test.naimulhassan.me/api/v1/images/products/2"
    }
  ],
  "total": 10,
  "skip": 0,
  "limit": 2
}

Try it

GET
Headers

No header yet.

Open in playground
Send the request to see a live response.

Get a product

GET/api/v1/products/{id}

Returns a single product by its numeric ID.

Parameters

Parameters for Get a product
NameInTypeDescription
idrequiredpathintegerNumeric product ID (positive integer).Min: 1
selectquerystringComma-separated list of fields to return. id is always included. Allowed: id, title, description, category, brand, price, discountPercentage, rating, stock, sku, tags, availabilityStatus, thumbnail.
delayqueryintegerDelay the response by this many milliseconds (0-5000). Subject to a stricter rate limit.Range: 0-5000

Status codes

  • 200The product object.
  • 400Invalid path or query parameter (INVALID_PARAMETER / INVALID_ID).
  • 404No record exists with that ID (RESOURCE_NOT_FOUND).

Request

curl 'https://test.naimulhassan.me/api/v1/products/1'

Example responses

Captured from the real API with the requests shown on this page.

200application/json
{
  "id": 1,
  "title": "Lumio Nova X5 Smartphone",
  "description": "The Lumio Nova X5 Smartphone features all-day battery life and water and dust resistance. A dependable choice from Lumio.",
  "category": "smartphones",
  "brand": "Lumio",
  "price": 1190.99,
  "discountPercentage": 21.56,
  "rating": 2.9,
  "stock": 50,
  "sku": "SMA-LUM-0001",
  "tags": [
    "mobile",
    "5g",
    "electronics"
  ],
  "availabilityStatus": "In Stock",
  "thumbnail": "https://test.naimulhassan.me/api/v1/images/products/1"
}

Try it

GET
Headers

No header yet.

Open in playground
Send the request to see a live response.

Create a product (simulated)

POST/api/v1/products
Simulated - not persisted

Validates the body and returns the product as it would be created, with the next available ID. Nothing is persisted: the shared dataset is never modified.

Headers

Headers for Create a product (simulated)
NameInTypeDescription
Content-TyperequiredheaderstringMust be application/json.

Request body

Products fields.

Body fields for Create a product (simulated)
FieldTypeRequiredNotes
titlestringYesmin length 1, max length 120
descriptionstringNomin length 1, max length 1000
categorystringNo
brandstringNomin length 1, max length 60
pricenumberYesmin 0, max 1000000
discountPercentagenumberNomin 0, max 100
stockintegerNomin 0, max 1000000
tagsstring[]No

Status codes

  • 201The simulated product, including its new id.
  • 400The request body is not valid JSON (INVALID_JSON).
  • 422The JSON body failed validation (VALIDATION_ERROR).

Request

curl -X POST 'https://test.naimulhassan.me/api/v1/products' \
  -H 'Content-Type: application/json' \
  -d '{
  "title": "Trail Runner Water Bottle",
  "category": "sports-accessories",
  "brand": "Peakline",
  "price": 18.5,
  "stock": 40
}'

Example responses

Captured from the real API with the requests shown on this page.

201application/json
{
  "id": 101,
  "title": "Trail Runner Water Bottle",
  "category": "sports-accessories",
  "brand": "Peakline",
  "price": 18.5,
  "stock": 40
}

Try it

POST
Headers
Open in playground
Send the request to see a live response.

Replace a product (simulated)

PUT/api/v1/products/{id}
Simulated - not persisted

Validates a complete replacement body and returns the resulting product. The stored record is not changed.

Parameters

Parameters for Replace a product (simulated)
NameInTypeDescription
idrequiredpathintegerNumeric product ID (positive integer).Min: 1

Headers

Headers for Replace a product (simulated)
NameInTypeDescription
Content-TyperequiredheaderstringMust be application/json.

Request body

Complete product representation.

Body fields for Replace a product (simulated)
FieldTypeRequiredNotes
titlestringYesmin length 1, max length 120
descriptionstringNomin length 1, max length 1000
categorystringNo
brandstringNomin length 1, max length 60
pricenumberYesmin 0, max 1000000
discountPercentagenumberNomin 0, max 100
stockintegerNomin 0, max 1000000
tagsstring[]No

Status codes

  • 200The replaced product.
  • 400Invalid path or query parameter (INVALID_PARAMETER / INVALID_ID).
  • 404No record exists with that ID (RESOURCE_NOT_FOUND).
  • 422The JSON body failed validation (VALIDATION_ERROR).

Request

curl -X PUT 'https://test.naimulhassan.me/api/v1/products/1' \
  -H 'Content-Type: application/json' \
  -d '{
  "title": "Nova X5 Smartphone (2026 Edition)",
  "category": "smartphones",
  "brand": "Lumio",
  "price": 649,
  "stock": 25
}'

Example responses

Captured from the real API with the requests shown on this page.

200application/json
{
  "id": 1,
  "title": "Nova X5 Smartphone (2026 Edition)",
  "category": "smartphones",
  "brand": "Lumio",
  "price": 649,
  "stock": 25
}

Try it

PUT
Headers
Open in playground
Send the request to see a live response.

Update a product (simulated)

PATCH/api/v1/products/{id}
Simulated - not persisted

Merges the provided fields into the existing product and returns the result. The stored record is not changed.

Parameters

Parameters for Update a product (simulated)
NameInTypeDescription
idrequiredpathintegerNumeric product ID (positive integer).Min: 1

Headers

Headers for Update a product (simulated)
NameInTypeDescription
Content-TyperequiredheaderstringMust be application/json.

Request body

Any subset of product fields.

Body fields for Update a product (simulated)
FieldTypeRequiredNotes
titlestringNomin length 1, max length 120
descriptionstringNomin length 1, max length 1000
categorystringNo
brandstringNomin length 1, max length 60
pricenumberNomin 0, max 1000000
discountPercentagenumberNomin 0, max 100
stockintegerNomin 0, max 1000000
tagsstring[]No

Status codes

  • 200The updated product.
  • 400Invalid path or query parameter (INVALID_PARAMETER / INVALID_ID).
  • 404No record exists with that ID (RESOURCE_NOT_FOUND).
  • 422The JSON body failed validation (VALIDATION_ERROR).

Request

curl -X PATCH 'https://test.naimulhassan.me/api/v1/products/1' \
  -H 'Content-Type: application/json' \
  -d '{
  "price": 599.99
}'

Example responses

Captured from the real API with the requests shown on this page.

200application/json
{
  "id": 1,
  "title": "Lumio Nova X5 Smartphone",
  "description": "The Lumio Nova X5 Smartphone features all-day battery life and water and dust resistance. A dependable choice from Lumio.",
  "category": "smartphones",
  "brand": "Lumio",
  "price": 599.99,
  "discountPercentage": 21.56,
  "rating": 2.9,
  "stock": 50,
  "sku": "SMA-LUM-0001",
  "tags": [
    "mobile",
    "5g",
    "electronics"
  ],
  "availabilityStatus": "In Stock",
  "thumbnail": "https://test.naimulhassan.me/api/v1/images/products/1"
}

Try it

PATCH
Headers
Open in playground
Send the request to see a live response.

Delete a product (simulated)

DELETE/api/v1/products/{id}
Simulated - not persisted

Returns 204 No Content if the product exists. The record is not actually removed.

Parameters

Parameters for Delete a product (simulated)
NameInTypeDescription
idrequiredpathintegerNumeric product ID (positive integer).Min: 1

Status codes

  • 204Empty body.
  • 400Invalid path or query parameter (INVALID_PARAMETER / INVALID_ID).
  • 404No record exists with that ID (RESOURCE_NOT_FOUND).

Request

curl -X DELETE 'https://test.naimulhassan.me/api/v1/products/1'

Example responses

Captured from the real API with the requests shown on this page.

204no content

No response body.

Try it

DELETE
Headers

No header yet.

Open in playground
Send the request to see a live response.