Sidroprice lists

Documentation

API

REST API v1 for custom systems, ERP and POS.

Base: https://sidro-cjenici.vercel.app/api/v1 · OpenAPI 3.1: /api/v1/openapi.json

Authentication

Authorization: Bearer sidro_live_…

An admin creates keys in the dashboard. A key is shown once; only its hash is stored. Every key belongs to its own source: a full sync with that key only deactivates items it sent.

Errors and limits

{ "error": { "code": "invalid_request", "message": "…", "details": {} } }

400 · 401 · 402 plan_limit · 403 (plan without API) · 404 · 409 · 429 (120 requests per minute per key, Retry-After) · 500.

Writing the catalogue

curl -X PUT https://sidro-cjenici.vercel.app/api/v1/items \
  -H "Authorization: Bearer $SIDRO_KEY" -H "Content-Type: application/json" \
  -d '{"items":[{"sku":"KR-500","name":"Kruh bijeli 500 g","price":1.99,"unit":"g","unit_qty":500}]}'

Up to 500 items per request; invalid items come back in errors, the rest are written. Full catalogue in parts: the same full_sync.id in all parts and "final": true in the last one; items of that source that did not appear are deactivated (a sync that saw no items deactivates nothing). An omitted field means "leave unchanged", an explicit null clears it. If the SKU changes but source_ref stays the same, Sidro renames the item and keeps its anchor price and history.

Anchor price via the API

anchor_price on an item is applied only if the item has no confirmed anchor price yet. For a deliberate change use anchor_override: true + anchor_reason, or PUT /anchors/{sku} with a reason. Changes are audit-logged with the key name.

All endpoints are listed below.

Endpoints

get/api/v1/pingRačun

Test veze

Responses: 200, 401

get/api/v1/orgRačun

Organizacija, paket, ograničenja i javne adrese

Responses: 200

get/api/v1/itemsStavke

Popis stavki

ParameterInType
updated_sincequerystring
statusquerystring (potvrdjena | za_provjeru | nedostaje)
qquerystring
limitqueryinteger
cursorquerystring

Responses: 200

put/api/v1/itemsStavke

Skupni upis (upsert) do 500 stavki

Stavke se prepoznaju po `sku`. Neispravne stavke vraćaju se u `errors`, ostale se upisuju. Za cijeli katalog u više dijelova pošaljite isti `full_sync.id` u svim dijelovima i `final: true` u zadnjem — tada se deaktiviraju stavke istog izvora koje se nisu pojavile.

{
  "items": [
    {
      "sku": "KR-500",
      "name": "Kruh bijeli 500 g",
      "brand": "Pekara Primjer",
      "price": 1.99,
      "unit": "g",
      "unit_qty": 500,
      "barcode": "3850000000014"
    }
  ]
}

Responses: 200, 402

get/api/v1/items/{sku}Stavke

Stavka s poviješću cijena i revizijskim zapisom

ParameterInType
sku *pathstring

Responses: 200, 404

patch/api/v1/items/{sku}Stavke

Djelomična izmjena

ParameterInType
sku *pathstring

Responses: 200

delete/api/v1/items/{sku}Stavke

Deaktivacija (nikad brisanje)

ParameterInType
sku *pathstring

Responses: 200

get/api/v1/anchorsSidrene cijene

Sidrene cijene za prikaz uz cijenu

ParameterInType
updated_sincequerystring
limitqueryinteger
cursorquerystring

Responses: 200

put/api/v1/anchors/{sku}Sidrene cijene

Namjerna izmjena sidrene cijene (s razlogom)

ParameterInType
sku *pathstring
{
  "anchor_price": 12.49,
  "anchor_date": "2026-09-10",
  "reason": "Ispravak prema blagajni 10. 9."
}

Responses: 200

get/api/v1/storesLokacije

Popis lokacija s javnim adresama

Responses: 200

post/api/v1/storesLokacije

Nova lokacija

Responses: 201, 409

patch/api/v1/stores/{code}Lokacije

Izmjena lokacije

ParameterInType
code *pathstring

Responses: 200

post/api/v1/publishObjava

Objavi cjenik odmah

Responses: 200

get/api/v1/publicationsObjava

Arhiva objava

ParameterInType
storequerystring
fromquerystring
toquerystring

Responses: 200

get/api/v1/validationObjava

Nalazi zadnje provjere i stanje sidrenih cijena

Responses: 200

Item fields

FieldTypeDescription
sku *stringŠifra; ključ stavke unutar organizacije.
kindstringproizvod, usluga
name *string
brandstring | null
unitstring | nullkg, g, l, ml, m, m2, m3, kom, par, sat…
unit_qtynumber | nullNeto količina izražena u `unit`.
barcodestring | null
categorystring | null
legal_categorystringhrana, pice, kozmetika, sredstva_za_ciscenje, toaletne_potrepstine, proizvodi_za_kucanstvo, ostalo, usluga
price *numberRedovna maloprodajna cijena (bez akcije).
special_pricenumber | null
special_namestring | null
special_fromstring | null
special_tostring | null
availableboolean
activeboolean
storestring | nullOznaka lokacije za cijenu po lokaciji (paket Lanac).
source_refstring | nullStalni vanjski ID. Promijeni li se šifra uz isti source_ref, Sidro preimenuje stavku i zadrži sidrenu cijenu i povijest.
source_created_atstring | null
source_modified_atstring | nullZadnja izmjena u izvoru — dokaz za automatsku sidrenu cijenu.
anchor_pricenumber | nullPrimjenjuje se samo ako stavka još nema potvrđenu sidrenu cijenu, osim uz anchor_override.
anchor_datestring | null
anchor_overrideboolean
anchor_reasonstring