I built a mock e-commerce REST API that returns realistic, seeded product data — great for prototyping storefronts, testing checkout flows, or building portfolio projects without standing up a real backend.

Live API: https://store.halukaksoy.dev


Live Stats

Loading stats…

Seeded Product Catalog

The catalog is pre-seeded with 5,000 products across 20 categories using the The Amazon Berkeley Objects (ABO) Dataset. Big kudos to them. Each product has a UUID, name, description, price (in cents), stock count, category, brand, SKU, rating, and review count. Prices and stock are randomised but deterministic — the same product UUID always returns the same data. If need arises, I can take the sample size up to 10 or even 50k in the future. Please feel free to reach out.

curl https://store.halukaksoy.dev/api/products
{
  "data": [
    {
      "uuid": "0197f...",
      "name": "Ergonomic Mesh Chair",
      "description": "...",
      "price_cents": 34999,
      "stock": 42,
      "category": "Furniture",
      "brand": "ErgoForm",
      "sku": "ERG-0042",
      "rating": 4.3,
      "review_count": 187
    }
  ],
  "meta": {
    "total": 5000,
    "page": 1,
    "per_page": 20,
    "pages": 250
  }
}

You can paginate with ?page=2&per_page=50, filter by category with ?category=Electronics, and search with ?search=wireless.


Categories

curl https://store.halukaksoy.dev/api/categories

Returns all 20 categories with product counts, letting you build category nav or filter dropdowns instantly.


Cart & Checkout Flow

The full purchase flow is supported:

1. Create a cart

curl -X POST https://store.halukaksoy.dev/api/cart

Returns a session_id you use for all subsequent cart operations.

2. Add items

curl -X POST https://store.halukaksoy.dev/api/cart/{session_id}/items \
  -H "Content-Type: application/json" \
  -d '{"product_uuid": "0197f...", "quantity": 2}'

3. View cart

curl https://store.halukaksoy.dev/api/cart/{session_id}

Returns line items, quantities, individual prices, and a cart total.

4. Checkout

curl -X POST https://store.halukaksoy.dev/api/checkout \
  -H "Content-Type: application/json" \
  -d '{
    "session_id": "abc123",
    "email": "[email protected]",
    "payment_method": "card",
    "shipping_address": {
      "line1": "123 Main St",
      "city": "Springfield",
      "state": "IL",
      "zip": "62701",
      "country": "US"
    }
  }'

Returns an order object with an order_number for lookup.


Random User Profile

Need a fake buyer for your checkout form?

curl https://store.halukaksoy.dev/api/users/random

Returns a realistic user with name, email, address, phone number, and avatar URL — useful for seeding test data or autofilling checkout forms in demos.


Order Lookup

curl https://store.halukaksoy.dev/api/orders/{order_number}

Returns the full order: line items, totals, shipping address, payment method, and timestamps.


Mock Request Headers

Two headers let you simulate real-world conditions without touching your code:

Header Effect
X-Mock-Delay: 800 Delays the response by 800 ms — test loading states and spinners
X-Mock-Error-Rate: 25 Returns a 500 error on ~25% of requests — test error boundaries
# Simulate a slow network
curl -H "X-Mock-Delay: 1200" https://store.halukaksoy.dev/api/products

# Test your error handling
curl -H "X-Mock-Error-Rate: 50" https://store.halukaksoy.dev/api/products

OpenAPI Specification

A machine-readable spec is available at /openapi.json. Import it into Postman, Insomnia, or any OpenAPI-compatible client.


Rate Limiting

The API allows 60 requests per minute per IP. Rate limit state is tracked with a fixed-window algorithm. Responses include standard headers:

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 58
X-RateLimit-Reset: 1746392460

When the limit is exceeded you get a 429 Too Many Requests with a Retry-After header indicating seconds until the window resets.


Data Notes

  • All data is seeded — changes (carts, orders) persistent across requests, but the product catalog is fixed
  • UUIDs are stable: the same product UUID always refers to the same product
  • Prices are in cents throughout — divide by 100 for display
  • Carts do not expire automatically; they persist until checked out

Quick Endpoint Reference

Method Path Description
GET / API index
GET /docs Interactive reference
GET /openapi.json OpenAPI 3.x spec
GET /api/products List products (paginated, filterable)
GET /api/products/{uuid} Single product
GET /api/categories All categories
POST /api/cart Create cart
POST /api/cart/{session_id}/items Add item to cart
GET /api/cart/{session_id} View cart
POST /api/checkout Checkout
GET /api/users/random Random user profile
GET /api/orders/{order_number} Order details

Full interactive documentation with a built-in try-it panel: https://store.halukaksoy.dev/docs

Mock E-Commerce API