Getting started

Quick start

Make your first request to the Haszno API in under two minutes. No credentials required — the public demo endpoints are open.

Before you begin

You need nothing except a terminal or a browser. The public demo endpoints at https://haszno.com return synthetic sample data without any credentials. All prices and products are for demonstration purposes only.

First request — list categories

The /api/categories endpoint returns the full category taxonomy. It is unauthenticated and always works.

curl --fail-with-body \
  'https://haszno.com/api/categories'

You will receive an array of 14 category objects. Each object looks like this (abbreviated):

[
  {
    "key": "auto",
    "label": "Autó, gumi és motor",
    "emoji": "🛞",
    "partnerCount": 0,
    "exampleCount": 1,
    "productCount": 100
  },
  {
    "key": "kert",
    "label": "Kert és növény",
    "emoji": "🌿",
    "partnerCount": 0,
    "exampleCount": 1,
    "productCount": 100
  }
]

partnerCount is 0 for every category on the public demo. The demo contains example (synthetic) partners only, counted separately in exampleCount.

Filter products by category

The /api/products endpoint accepts a cats query parameter with a comma-separated list of category keys.

curl --fail-with-body \
  'https://haszno.com/api/products?cats=kert&shippingMarkets=HU'

Each product in the response includes the current selling price, the net wholesale cost, and a recommended pricing object computed by the Haszno pricing engine:

{
  "id": 101,
  "category": "kert",
  "name": "Kerti napernyő · 1. változat",
  "sku": "DEMO-101",
  "priceGross": 2190,
  "costNet": 1121,
  "stock": 0,
  "listed": true,
  "recommended": {
    "priceGross": 2090,
    "floorGross": 1590,
    "status": "versenykepes",
    "marginNet": 525,
    "marginPct": 31.9
  },
  "marketByCountry": {
    "hu": {
      "minGross": 2124,
      "shop": "Példa-bolt · HU",
      "source": "mock",
      "isCheapest": true
    },
    "sk": null,
    "eu": null
  }
}

All prices are whole integers in Hungarian Forints (HUF). null on a price field means unknown, not zero. See Conventions for the full currency and field reference.

The same request in JavaScript

const response = await fetch(
  'https://haszno.com/api/products?cats=kert&shippingMarkets=HU'
);

if (!response.ok) {
  throw new Error(`API error: ${response.status}`);
}

const products = await response.json();

for (const p of products) {
  console.log(p.name, p.recommended.priceGross, 'HUF');
}

No dependencies. The API returns Content-Type: application/json on all data routes.

The same request with the CLI

You can run the CLI without installing it permanently using npx directly from GitHub:

npx -y github:haszno-labs/haszno-cli products list --json

This prints a JSON array of product objects. Pipe to jq to filter:

npx -y github:haszno-labs/haszno-cli products list --json \
  | jq '.[] | select(.recommended.status == "versenykepes") | .name'

npx downloads the package from GitHub and installs its dependencies (the built dist/ is committed in the repo, so nothing is compiled), so the first run is slower.

For the full CLI reference including install, configuration, and all commands, see CLI reference.

Next steps