Dokumentacija
API
REST API v1 za vlastite sustave, ERP i blagajne.
Baza: https://sidro-cjenici.vercel.app/api/v1 · OpenAPI 3.1: /api/v1/openapi.json
Autentikacija
Authorization: Bearer sidro_live_…
Ključ stvara administrator u ploči (Izvori podataka ili API i webhookovi). Prikazuje se jednom; u bazi se čuva samo sažetak. Svaki ključ je vezan uz vlastiti izvor: potpuna sinkronizacija s tim ključem deaktivira samo stavke koje je poslao on.
Greške i ograničenja
{ "error": { "code": "invalid_request", "message": "…", "details": {} } }
400 invalid_request · 401 unauthorized · 402 plan_limit · 403 forbidden (paket bez API-ja) · 404 not_found · 409 conflict · 429 rate_limited (120 zahtjeva u minuti po ključu, zaglavlje Retry-After) · 500 internal.
Upis kataloga
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","brand":"Pekara Primjer","price":1.99,"unit":"g","unit_qty":500,"barcode":"3850000000014"}]}'
Do 500 stavki po zahtjevu. Neispravne stavke vraćaju se u errors, ostale se upisuju. Cijeli katalog u dijelovima: isti full_sync.id (UUID) u svim dijelovima i "final": true u zadnjem — tada se stavke tog izvora koje se nisu pojavile označe neaktivnima (ako sinkronizacija nije vidjela nijednu stavku, ništa se ne gasi). Izostavljeno polje znači „ne mijenjaj", izričit null briše vrijednost. Promijeni li se šifra uz isti source_ref, Sidro preimenuje stavku i zadrži sidrenu cijenu i povijest.
// Node.js 18+
const dijelovi = razlomi(katalog, 500);
const syncId = crypto.randomUUID();
for (const [i, items] of dijelovi.entries()) {
const r = await fetch('https://sidro-cjenici.vercel.app/api/v1/items', {
method: 'PUT',
headers: { Authorization: `Bearer ${process.env.SIDRO_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({ items, full_sync: { id: syncId, final: i === dijelovi.length - 1 } }),
});
if (!r.ok) throw new Error(await r.text());
}
// PHP
$ch = curl_init('https://sidro-cjenici.vercel.app/api/v1/items');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('SIDRO_KEY'), 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode(['items' => $stavke], JSON_UNESCAPED_UNICODE),
CURLOPT_RETURNTRANSFER => true,
]);
$odgovor = json_decode(curl_exec($ch), true);
Sidrena cijena preko API-ja
Pri upisu stavke anchor_price se primjenjuje samo ako stavka još nema potvrđenu sidrenu cijenu. Za svjesnu izmjenu: anchor_override: true + anchor_reason, ili PUT /anchors/{sku} s razlogom. Izmjena ide u revizijski zapis s nazivom ključa.
Ispod je puni popis krajnjih točaka.
Krajnje točke
/api/v1/pingRačunTest veze
Odgovori: 200, 401
/api/v1/orgRačunOrganizacija, paket, ograničenja i javne adrese
Odgovori: 200
/api/v1/itemsStavkePopis stavki
| Parametar | Gdje | Tip |
|---|---|---|
| updated_since | query | string |
| status | query | string (potvrdjena | za_provjeru | nedostaje) |
| q | query | string |
| limit | query | integer |
| cursor | query | string |
Odgovori: 200
/api/v1/itemsStavkeSkupni 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"
}
]
}Odgovori: 200, 402
/api/v1/items/{sku}StavkeStavka s poviješću cijena i revizijskim zapisom
| Parametar | Gdje | Tip |
|---|---|---|
| sku * | path | string |
Odgovori: 200, 404
/api/v1/items/{sku}StavkeDjelomična izmjena
| Parametar | Gdje | Tip |
|---|---|---|
| sku * | path | string |
Odgovori: 200
/api/v1/items/{sku}StavkeDeaktivacija (nikad brisanje)
| Parametar | Gdje | Tip |
|---|---|---|
| sku * | path | string |
Odgovori: 200
/api/v1/anchorsSidrene cijeneSidrene cijene za prikaz uz cijenu
| Parametar | Gdje | Tip |
|---|---|---|
| updated_since | query | string |
| limit | query | integer |
| cursor | query | string |
Odgovori: 200
/api/v1/anchors/{sku}Sidrene cijeneNamjerna izmjena sidrene cijene (s razlogom)
| Parametar | Gdje | Tip |
|---|---|---|
| sku * | path | string |
{
"anchor_price": 12.49,
"anchor_date": "2026-09-10",
"reason": "Ispravak prema blagajni 10. 9."
}Odgovori: 200
/api/v1/storesLokacijePopis lokacija s javnim adresama
Odgovori: 200
/api/v1/storesLokacijeNova lokacija
Odgovori: 201, 409
/api/v1/stores/{code}LokacijeIzmjena lokacije
| Parametar | Gdje | Tip |
|---|---|---|
| code * | path | string |
Odgovori: 200
/api/v1/publishObjavaObjavi cjenik odmah
Odgovori: 200
/api/v1/publicationsObjavaArhiva objava
| Parametar | Gdje | Tip |
|---|---|---|
| store | query | string |
| from | query | string |
| to | query | string |
Odgovori: 200
/api/v1/validationObjavaNalazi zadnje provjere i stanje sidrenih cijena
Odgovori: 200
Polja stavke
| Polje | Tip | Opis |
|---|---|---|
| sku * | string | Šifra; ključ stavke unutar organizacije. |
| kind | string | proizvod, usluga |
| name * | string | |
| brand | string | null | |
| unit | string | null | kg, g, l, ml, m, m2, m3, kom, par, sat… |
| unit_qty | number | null | Neto količina izražena u `unit`. |
| barcode | string | null | |
| category | string | null | |
| legal_category | string | hrana, pice, kozmetika, sredstva_za_ciscenje, toaletne_potrepstine, proizvodi_za_kucanstvo, ostalo, usluga |
| price * | number | Redovna maloprodajna cijena (bez akcije). |
| special_price | number | null | |
| special_name | string | null | |
| special_from | string | null | |
| special_to | string | null | |
| available | boolean | |
| active | boolean | |
| store | string | null | Oznaka lokacije za cijenu po lokaciji (paket Lanac). |
| source_ref | string | null | Stalni vanjski ID. Promijeni li se šifra uz isti source_ref, Sidro preimenuje stavku i zadrži sidrenu cijenu i povijest. |
| source_created_at | string | null | |
| source_modified_at | string | null | Zadnja izmjena u izvoru — dokaz za automatsku sidrenu cijenu. |
| anchor_price | number | null | Primjenjuje se samo ako stavka još nema potvrđenu sidrenu cijenu, osim uz anchor_override. |
| anchor_date | string | null | |
| anchor_override | boolean | |
| anchor_reason | string |