Kategórie

Kategórie nákladov a príjmov, vrátane vnoreného stromu.

Kategórie nákladov a príjmov. Podporujú vnorenie cez parent_id (max 2 úrovne). Každá kategória má jeden type – income alebo expense; nemení sa. Polia depth, has_children a child_count sa odvodzujú zo stromu a vracajú sa s každou odpoveďou.

Endpointy

POST/api/v1/categoriescategories:write

Vytvorí kategóriu. Pole type je povinné (income/expense), parent_id voliteľné.

Request
curl -X POST "https://monivio.sk/api/v1/categories" \
  -H "Authorization: Bearer mk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
  "type": "expense",
  "name": "Kancelária",
  "icon": "briefcase",
  "color": "#3b82f6",
  "is_tax_deductible": true
}'
Response 201json
{
  "data": {
    "id": "cat_xfzwq2hjkbpr6ny9smtv8d4l",
    "type": "expense",
    "name": "Kancelária",
    "parent_id": null,
    "icon": "briefcase",
    "color": "#3b82f6",
    "is_tax_deductible": true,
    "depth": 0,
    "has_children": false,
    "child_count": 0,
    "created_at": "2026-04-15T10:00:00.000Z"
  }
}
GET/api/v1/categoriescategories:read

Zoznam kategórií. Query parameter type=income alebo type=expense je povinný.

Request
curl "https://monivio.sk/api/v1/categories?type=expense" \
  -H "Authorization: Bearer mk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Response 200json
{
  "data": [
    {
      "id": "cat_xfzwq2hjkbpr6ny9smtv8d4l",
      "type": "expense",
      "name": "Kancelária",
      "parent_id": null,
      "icon": "briefcase",
      "color": "#3b82f6",
      "is_tax_deductible": true,
      "depth": 0,
      "has_children": false,
      "child_count": 0,
      "created_at": "2026-04-15T10:00:00.000Z"
    }
  ]
}
GET/api/v1/categories/{id}categories:read

Detail jednej kategórie.

Request
curl "https://monivio.sk/api/v1/categories/con_2hf8pq3rxn4mlkzyt9abwvve" \
  -H "Authorization: Bearer mk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Response 200json
{
  "data": {
    "id": "cat_xfzwq2hjkbpr6ny9smtv8d4l",
    "type": "expense",
    "name": "Kancelária",
    "parent_id": null,
    "icon": "briefcase",
    "color": "#3b82f6",
    "is_tax_deductible": true,
    "depth": 0,
    "has_children": false,
    "child_count": 0,
    "created_at": "2026-04-15T10:00:00.000Z"
  }
}
PATCH/api/v1/categories/{id}categories:write

Update mena, ikony, farby alebo flagu is_tax_deductible. Pole parent_id v PATCH-i NIE JE podporované — re-parenting cez API zatiaľ nie je možný.

Request
curl -X PATCH "https://monivio.sk/api/v1/categories/con_2hf8pq3rxn4mlkzyt9abwvve" \
  -H "Authorization: Bearer mk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Kancelária a IT",
  "color": "#22c55e"
}'
Response 200json
{
  "data": {
    "id": "cat_xfzwq2hjkbpr6ny9smtv8d4l",
    "type": "expense",
    "name": "Kancelária a IT",
    "parent_id": null,
    "icon": "briefcase",
    "color": "#22c55e",
    "is_tax_deductible": true,
    "depth": 0,
    "has_children": false,
    "child_count": 0,
    "created_at": "2026-04-15T10:00:00.000Z"
  }
}
DELETE/api/v1/categories/{id}categories:write

Vymaže kategóriu. Kategória s podkategóriami alebo priradenými nákladmi sa nedá vymazať (vráti 409).

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

Objekt Category

idreadonly
string
CUID2 ID s prefixom cat_.
Príklad: cat_xfzwq2hjkbpr6ny9smtv8d4l
typerequired
"income" | "expense"
Druh kategórie. Nemenný po vytvorení. Povinný query parameter pri listingu.
namerequired
string
Názov kategórie (max 100 znakov).
Príklad: Kancelária
parent_id
string/ null
ID rodičovskej kategórie (pre vnorené stromy). Nastavuje sa iba pri vytvorení – PATCH ho neumožňuje meniť, takže re-parenting cez API zatiaľ nie je možný.
depthreadonly
number
Hĺbka v strome (0 = root, 1 = priama podkategória). Odvodené od parent_id.
Príklad: 0
has_childrenreadonly
boolean
True ak má kategória aspoň jednu podkategóriu. Skratka pre child_count > 0.
child_countreadonly
number
Počet priamych podkategórií tejto kategórie.
Príklad: 3
icon
string
Lucide icon name (briefcase, car, ...). Default tag, ak vynecháš.
Príklad: briefcase
color
string (#hex)
Farba badge-u (formát #RRGGBB). Default #6b7280, ak vynecháš.
Príklad: #3b82f6
is_tax_deductible
boolean
Či sa zahŕňa do daňových odpočtov (relevantné len pre expense).
created_atreadonly
string (ISO 8601)
Vytvorenie.