Katalóg

Katalóg produktov a služieb.

Katalóg tvojich produktov a služieb. Položky sú immutable PATCH vytvorí novú verziu a stará verzia ostane v histórii. Stabilný id sa nemení; field version s každou úpravou rastie. Položky s typom product môžu sledovať skladové stavy (track_stock + stock_quantity).

Query parametre pre zoznam

Endpoint GET /api/v1/catalog používa stránkovanie cez page / limit (NIE cursor) a vracia metadáta meta.{page,limit,total,total_pages}. Akceptuje tieto parametre:

search
string
Fulltext vyhľadávanie podľa názvu, kódu a článkového čísla.
type
"product" | "service"
Filter podľa typu položky.
category
string
Filter podľa textovej kategórie (presná zhoda).
active
"all" | "active" | "inactive"
Filter podľa archivácie. Default je "active" – archivované sa nezobrazia. "all" vráti všetko, "inactive" len archivované.
Príklad: active
page
number
Číslo stránky (1-based). Default 1.
limit
number
Počet položiek na stránku (max 100). Default 20.
sort_by
string
Stĺpec pre triedenie. Default je manuálne poradie (sortOrder).
sort_order
"asc" | "desc"
Smer triedenia. Default "asc".

Endpointy

POST/api/v1/catalogcatalog:write

Vytvorí novú položku katalógu. Ak neuvedieš unit, použije sa "ks"; ak neuvedieš currency, použije sa "EUR".

Request
curl -X POST "https://monivio.sk/api/v1/catalog" \
  -H "Authorization: Bearer mk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
  "type": "service",
  "name": "Konzultácia – senior",
  "code": "CONS-SR",
  "sell_price": 80
}'
Response 201json
{
  "data": {
    "id": "cit_3kw9pmxn7rt2vyzqlhc8bfsj",
    "version": 1,
    "type": "service",
    "code": "CONS-SR",
    "name": "Konzultácia – senior",
    "description": null,
    "unit": "h",
    "sell_price": 80,
    "buy_price": null,
    "currency": "EUR",
    "vat_rate_id": null,
    "article_number_type": null,
    "article_number": null,
    "track_stock": false,
    "stock_quantity": 0,
    "min_stock_quantity": null,
    "category": "Consulting",
    "icon": null,
    "is_active": true,
    "created_at": "2026-04-15T10:00:00.000Z",
    "updated_at": "2026-04-15T10:00:00.000Z"
  }
}
GET/api/v1/catalogcatalog:read

Zoznam položiek katalógu so stránkovaním a filtrami. Default vracia iba aktívne (neacrhivované) položky.

Request
curl "https://monivio.sk/api/v1/catalog?type=service&limit=20" \
  -H "Authorization: Bearer mk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Response 200json
{
  "data": [
    {
      "id": "cit_3kw9pmxn7rt2vyzqlhc8bfsj",
      "version": 1,
      "type": "service",
      "code": "CONS-SR",
      "name": "Konzultácia – senior",
      "description": null,
      "unit": "h",
      "sell_price": 80,
      "buy_price": null,
      "currency": "EUR",
      "vat_rate_id": null,
      "article_number_type": null,
      "article_number": null,
      "track_stock": false,
      "stock_quantity": 0,
      "min_stock_quantity": null,
      "category": "Consulting",
      "icon": null,
      "is_active": true,
      "created_at": "2026-04-15T10:00:00.000Z",
      "updated_at": "2026-04-15T10:00:00.000Z"
    }
  ],
  "meta": {
    "page": 1,
    "limit": 20,
    "total": 1,
    "total_pages": 1
  }
}
GET/api/v1/catalog/{id}catalog:read

Detail jednej položky katalógu.

Request
curl "https://monivio.sk/api/v1/catalog/con_2hf8pq3rxn4mlkzyt9abwvve" \
  -H "Authorization: Bearer mk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Response 200json
{
  "data": {
    "id": "cit_3kw9pmxn7rt2vyzqlhc8bfsj",
    "version": 1,
    "type": "service",
    "code": "CONS-SR",
    "name": "Konzultácia – senior",
    "description": null,
    "unit": "h",
    "sell_price": 80,
    "buy_price": null,
    "currency": "EUR",
    "vat_rate_id": null,
    "article_number_type": null,
    "article_number": null,
    "track_stock": false,
    "stock_quantity": 0,
    "min_stock_quantity": null,
    "category": "Consulting",
    "icon": null,
    "is_active": true,
    "created_at": "2026-04-15T10:00:00.000Z",
    "updated_at": "2026-04-15T10:00:00.000Z"
  }
}
PATCH/api/v1/catalog/{id}catalog:write

Vytvorí novú verziu položky (id zostáva, version+1). Stačí poslať polia, ktoré meníš. Pre archiváciu pošli is_archived: true.

Request
curl -X PATCH "https://monivio.sk/api/v1/catalog/con_2hf8pq3rxn4mlkzyt9abwvve" \
  -H "Authorization: Bearer mk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
  "sell_price": 90
}'
Response 200json
{
  "data": {
    "id": "cit_3kw9pmxn7rt2vyzqlhc8bfsj",
    "version": 2,
    "type": "service",
    "code": "CONS-SR",
    "name": "Konzultácia – senior",
    "description": null,
    "unit": "h",
    "sell_price": 90,
    "buy_price": null,
    "currency": "EUR",
    "vat_rate_id": null,
    "article_number_type": null,
    "article_number": null,
    "track_stock": false,
    "stock_quantity": 0,
    "min_stock_quantity": null,
    "category": "Consulting",
    "icon": null,
    "is_active": true,
    "created_at": "2026-04-15T10:00:00.000Z",
    "updated_at": "2026-05-06T08:42:11.000Z"
  }
}
DELETE/api/v1/catalog/{id}catalog:write

Vymaže položku z katalógu. Dokumenty, ktoré ju referencujú, ostávajú zachované (snapshot v dokumente).

Request
curl -X DELETE "https://monivio.sk/api/v1/catalog/con_2hf8pq3rxn4mlkzyt9abwvve" \
  -H "Authorization: Bearer mk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Objekt CatalogItem

idreadonly
string
Stabilný CUID2 identifikátor s prefixom cit_.
Príklad: cit_3kw9pmxn7rt2vyzqlhc8bfsj
versionreadonly
number
Číslo aktuálnej verzie. Pri každom PATCH-i sa zvýši o 1.
Príklad: 3
typerequired
"product" | "service"
Typ položky. Product môže sledovať sklad, service nie.
code
string/ null
Interný kód / SKU. Voľný text, max 50 znakov. Použiteľný pre rýchle vyhľadávanie.
Príklad: CONS-SR
namerequired
string
Názov položky (1–255 znakov).
Príklad: Konzultácia – senior
description
string/ null
Detailný popis (max 5000 znakov).
unit
string
Jednotka (ks, h, kg, m, ...). Default pri vytvorení je "ks" ak ho neuvedieš.
Príklad: h
sell_price
number/ null
Predajná cena bez DPH.
Príklad: 80
buy_price
number/ null
Nákupná cena (pre výpočet marží).
currency
string (ISO 4217)
Mena cien (3-písmenový ISO kód). Default pri vytvorení je "EUR" ak ho neuvedieš.
Príklad: EUR
vat_rate_id
string/ null
ID DPH sadzby z číselníka organizácie (napr. vat_0, vat_5, vat_10, vat_19, vat_23).
article_number_type
"ean" | "upc" | "isbn" | "custom"/ null
Typ čiarového kódu / článkového čísla. Iba lowercase enum hodnoty: "ean", "upc", "isbn" alebo "custom".
article_number
string/ null
Hodnota čiarového kódu / článkového čísla.
track_stock
boolean
Zapne sledovanie skladového stavu pre túto položku (zmysluplné iba pre product).
stock_quantity
number
Aktuálny skladový stav (relevantné iba ak track_stock = true).
min_stock_quantity
number/ null
Minimálny stav pre upozornenie pri nízkych zásobách.
category
string/ null
Voľná textová kategorizácia (max 100 znakov). Nie je to FK na entitu kategórie – je to label.
Príklad: Consulting
icon
string/ null
Názov Lucide ikony pre vizuálne odlíšenie v UI.
is_activereadonly
boolean
Vypočítaná inverzia is_archived. true = aktívna, false = archivovaná. Iba na čítanie – pre archiváciu pošli is_archived v POST/PATCH bodyse.
is_archived
boolean
Iba pri zápise (POST/PATCH). Default false. Toto je inverzia is_active a JEDINÝ spôsob ako položku archivovať. V odpovedi sa nevracia – namiesto toho prečítaj is_active.
created_atreadonly
string (ISO 8601)
Kedy bola položka prvýkrát vytvorená.
updated_atreadonly
string (ISO 8601)
Posledná zmena – pri PATCH-i sa updatne, pri pôvodnej verzii ostáva.