Za razvijalce
Quibi omogoča izdelavo računov in predračunov iz zunanjih programov (spletnih trgovin). V ta namen je izdelan API. Če katerega klica ni na razpolago, nam sporočite in ga bomo dodali.
Vsi klici zahtevajo prijavo, ki je dodana v glavo zahtevka (http header). Podatki za api so enaki, kot prijavni podatki Quibi-ja:
username: vase@uporanbisko.ime
password: VaseVarnoGeslo
Content-Type: application/json
Api kličemo preko GET ali POST (dodajanje in urejanje podatkov) metode. Vse parametre podajamo v JSON formatu.
API url: https://si.quibi.net
Vsi klici vračajo odgovor v sledeči obliki:
{
"error":false,
"message":"",
"errors":{
"SEZNAMNAPAK"
},
"data":{
"IMEPODATKA":[
"VREDNOSTI"
]
}
Opis parametrov:
- error – true/false – ali je prišlo do napake
- message – sporočilo ob napaki
- errors – polja, katera so napačna in napaka
- data – podatki, ki smo jih zahtevali
Metoda: GET URL: /api2/ddv
Metoda: GET URL: /api2/drzava
Metoda: GET URL: /api2/enota
Metoda: GET URL: /api2/glavadokumenta/placila
Metoda: GET URL: /api2/skladisca Opomba: samo v primeru, da imamo vključeno materialno poslovanje.
Metoda: GET URL: /api2/spaces Opomba: samo v primeru, če imate vključene davčne blagajne.
Metoda: GET URL: /api2/stevilcenje
Če dodate parameter ?glavadokumenta=1, potem izpiše vsa številčenja.
Metoda: GET URL: /api2/stroskovnamesta
Metoda: GET URL: /api2/addresstype
Metoda: GET URL: /api2/cenik
Metoda: GET URL: /api2/kategorije
Metoda: POST URL: /api2/kategorije/form
Parametri (označeni z * so obvezni):
- Kategorije:
- naziv*
Metoda: GET URL: /api2/glavadokumenta/vrstaprodaje
Metoda: GET URL: /api2/statusi
Vrne seznam statusov, ki jih imate določene v šifrantu Statusi. Za vsak status vrne:
- id – id statusa (uporabite ga pri filtriranju dokumentov)
- naziv – naziv statusa
- privzeta – true/false – ali je status privzet (samodejno se nastavi na novih dokumentih)
Metoda: POST
Parametri:
- Filtriraj:
- leto – int – primer: 2019
- stranka – int – id stranke iz šifranta
- datod – date – v formatu Y-m-d
- datdo – date – v formatu Y-m-d
- sklic: iskanje po sklicu
- statusi – int ali array – id statusa (ali več statusov) iz šifranta /api2/statusi
URL klica za različne vrste dokumentov:
- Fakture – /api2/fakture
- Predračuni – /api2/predracuni
- Dobavnice – /api2/dobavnice
- Prevzemnice – /api2/prevzemnice
- Dobropisi – /api2/dobropisi
- Naročilnice – /api2/narocilnice
- Avansni računi – /api2/predplacila
- Prenos med skladišči – /pi2/prenosmedskladi
- VKR – /api2/vkr
- Delovni nalogi – /api2/dn
- Naročila kupcev – /api2/narocilakupcev
- Izdajnice – /api2/izdajnice
Vsak dokument v odgovoru vsebuje polje Glavadokumenta.statusi_id in podatek Statusi (id, naziv). Če dokument nima statusa, sta vrednosti null.
Metoda: GET URL: /api2/glavadokumenta/view/ID_DOKUMENTA
Metoda: GET URL: /api2/delnaplacila/placiladokumenta/ID_DOKUMENTA
Metoda: GET URL: /api2/stranka
Metoda: GET URL: /api2/stranka/view/ID_STRANKE
Metoda: POST URL: /api2/stranka/form
Parametri (označeni z * so obvezni):
- Stranka:
- remote_id – id stranke v vašem programu
- drzava_id – id države iz šifranta držav, če pustimo prazno, je privzeto izbrana Slovenija
- naziv* – obvezen podatek
- naslov
- posta
- postnaSt
- davcna
- davcniZav – ali je davčni zavezanec 0/1
- maticna
- iban
- bic
- emajl – elektronski naslov stranke
- dniZapadlosti
- opomba
- telst
- pu – ali je proračunski uporabnik 0/1
- pravnafizicna – (1 = Pravna oseba, 2 = Fizična oseba)
Metoda: POST URL: /api2/stranka/form/ID_STRANKE
Parametri (označeni z * so obvezni):
- Stranka:
- remote_id – id stranke v vašem programu
- drzava_id – id države iz šifranta držav, če pustimo prazno, je privzeto izbrana Slovenija
- naziv* – obvezen podatek
- naslov
- posta
- postnaSt
- davcna
- davcniZav – ali je davčni zavezanec 0/1
- maticna
- iban
- bic
- emajl – elektronski naslov stranke
- dniZapadlosti
- opomba
- telst
- pu – ali je proračunski uporabnik 0/1
Metoda: GET URL: /api2/address/index/ID_STRANKE
Metoda: POST URL: /api2/address/form
Parametri (označeni z * so obvezni):
- Address
- stranka_id*
- naslov*
- posta
- postnaSt
- drzava_id*
- addresstype_id*
Metoda: POST URL: /api2/address/form/ID_NASLOVA
Parametri (označeni z * so obvezni):
- Address
- stranka_id*
- naslov*
- posta
- postnaSt
- drzava_id*
- addresstype_id*
Metoda: GET URL: /api2/vozila/index/ID_STRANKE
Vrne seznam vozil stranke, urejen po registrski številki. Če ID_STRANKE izpustite (/api2/vozila/index), vrne vsa vozila. Seznam vsebuje tudi neaktivna vozila (disabled = 1). Za vsako vozilo vrne podatke vozila (Vozila) in stranko (Stranka – id, naziv).
Če stranka ne obstaja, vrne napako “Žal ne najdem zahtevane stranke!”.
Metoda: GET URL: /api2/vozila/view/ID_VOZILA
Poleg podatkov vozila vrne še:
- Stranka – id, naziv
- Vdata – datumi vozila (npr. tehnični pregled), vrsta datuma je v Vdatumi.naziv
- ServisnaPredloga – id, naziv
Datumi (garancijado, Vdata.datum) so v formatu d.m.Y.
Metoda: POST URL: /api2/vozila/form
Parametri (označeni z * so obvezni):
- Vozila
- stranka_id*
- disabled – ali je vozilo neaktivno 0/1
- registrskastevilka*
- lokacija
- proizvajalec
- model
- letnik
- internastevilka
- oprema
- opomba
- garancijado – datum v formatu d.m.Y ali Y-m-d
- opombagarancije
- pogoji
- servisna_predloga_id – id servisne predloge
V odgovoru je id novega vozila v data.Vozila.Vozilo.
Metoda: POST URL: /api2/vozila/form/ID_VOZILA
Parametri so enaki kot pri dodajanju vozila, vendar noben ni obvezen. Pošljete samo podatke, ki jih spreminjate, ostali ostanejo nespremenjeni. Primer, ki spremeni samo opombo:
{
"Vozila":{
"opomba":"Zamenjane zavorne ploščice"
}
}
Če vozilo ne obstaja, vrne napako “Žal ne najdem zahtevanega dokumenta!” (v polju errors).
Metoda: GET URL: /api2/sifranti
Metoda: GET URL: /api2/sifranti/view/ID_ARTIKLA
Metoda: GET URL: /api2/sifranti/trenutnazaloga/ID_SKLADIŠČA/REZERVIRANAZALOGA(0|1)
Metoda: POST URL: /api2/sifranti/form
Parametri (označeni z * so obvezni):
- Sifranti:
- sifra* – SKU koda oz. kot imate šifro v spletni trgovini. Mora biti unikatna za vsak izdelek.
- naziv*
- enota_id* – iz šifranta enot
- cenaBrezDDV*
- nabavnaCena – samo če je označeno polje vodiZalogo z 1
- ddv_id* – id ddv-ja iz šifranta ddv-ja
- vodiZalogo – ali vodim zalogo za artikel (samo če imam omogočeno materialno poslovanje) 0/1
- odo – obrnjena davčna obveznost
- teza – teža, v kg
- kategorije_id
Metoda: POST URL: /api2/sifranti/form/ID_ARTIKLA
Parametri (označeni z * so obvezni):
- Sifranti:
- sifra* – SKU koda oz. kot imate šifro v spletni trgovini. Mora biti unikatna za vsak izdelek.
- naziv*
- enota_id* – iz šifranta enot
- cenaBrezDDV*
- nabavnaCena – samo če je označeno polje vodiZalogo z 1
- ddv_id* – id ddv-ja iz šifranta ddv-ja
- vodiZalogo – ali vodim zalogo za artikel (samo če imam omogočeno materialno poslovanje) 0/1
- odo – obrnjena davčna obveznost
- teza – teža, v kg
Metoda: GET URL: /api2/loti/index/ID_ARTIKLA
Metoda: POST URL: /api2/loti/form/ID_ARTIKLA
Parametri (označeni z * so obvezni):
- Loti:
- sifra*
- roktrajanja
- enota_id* – iz šifranta enot
- aktiven
Metoda: POST URL: /api2/glavadokumenta/form
V dokumentu mora biti obvezno podana tudi stranka. Če Quibi ne najde stranke jo ustvari. Stranko išče po polju id, remote_id oz. emajl. Stranko išče v naštetem vrstnem redu. Podan mora biti vsaj 1 parameter.
Postavke na dokumentu naštevamo. Cene in ostalih parametrov ne podajamo, saj se pobirajo direktno iz šifranta v Quibiju.
Parametri (označeni z * so obvezni):
- Stranka:
- remote_id – id stranke v vašem programu
- drzava_id – id države iz šifranta držav, če pustimo prazno, je privzeto izbrana Slovenija
- stranka_id – id stranke iz šifranta strank. Če podamo to polje, ni potrebno podati ostalih polj od stranke.
- naziv* – obvezen podatek
- naslov
- posta
- postnaSt
- davcna
- davcniZav – ali je davčni zavezanec 0/1
- maticna
- iban
- bic
- emajl – elektronski naslov stranke
- dniZapadlosti
- opomba
- telst
- pu – ali je proračunski uporabnik 0/1
- Dostava
- naziv
- naslov
- posta
- postnaTs
- Glavadokumenta
- stevilcenje_id – id iz šifranta številčenj – glede na številčenje določimo vrsto dokumenta (račun, predračun)
- vrstaprodaje - obvezen podatek, glejte šifrant vrste prodaje
- stranka_id – če je podano to polje iz šifranta strank, potem ni potrebno podati polja Stranka, saj ga ne upošteva.
- dobavnica – če želimo razknjižit (pomanjšati) zalogo v skladišču, naredi skupaj z računom še dobavnico, v kolikor imamo materialno poslovanje – 0/1
- datIzdRac – datum izdaje dokumenta, podan v formatu Y-m-d (če ne izpolnite tega polja, bo vneslo današnji datum)
- datValute – datum valute, podan v formatu Y-m-d (če ne izpolnite tega polja, bo vneslo današnji datum)
- datstod – datum storitve od, če je dokument račun, mora biti podano to polje – datum je podan v formatu Y-m-d
- datstdo – če se gre za obdobje, izpolnimo še to polje – datum je podan v formatu Y-m-d
- kraj – kraj izdaje dokumenta
- nacinPlacila – način plačila iz šifranta način plačila
- space_id – v kolikor uporabljamo davčne blagajne, mora biti tukaj id davčne blagajne iz šifranta davčne blagajne
- skladisca_id – če uporabljamo materialno poslovanje, moramo vnesti id skladišča iz šifranta skladišč
- stroskovnamesta_id – stroškovno mesto iz šifranta stroškovnih mest
- Postavkedokumenta
- 1
- sifra – šifra artikla
- kolicina – količina
- popust – v kolikor je popust
- ddv_id – iz šifranta DDV
- 1
Pri postavki dokumenta so obvezna polja sifra in kolicina. Če vodimo zalogo, lahko samo popust in ddv_id podate, v kolikor se razlikuje od original stopnje. Če se ne vodi zaloga artikla, potem so dovoljena polja še opis in cena.
Artikel seveda lahko dodate, tudi če ga nimate v šifrantu. V ta namen je potrebno podati vsa našteta polja:
- enota_id
- ddv_id
- opis
- kolicina
- popust
- cenaZDDV (cena je za enoto brez ddv)
Če bi radi zabeležili LOT, potem imate 2 možnosti:
- Podate id lot-a: “loti_id”: 45
- Podate naziv lot-a: “Loti.sifra”: “LOT-2026-001”
Metoda: POST URL: /api2/glavadokumenta/pdf
Parametri (označeni z * so obvezni):
- Glavadokumenta
- id* – id dokumenta
- natisni* – (1 – prikaz uporabniku, 3 – prenesi pdf)
- jezik – (sl – Slovenski, en – Angleški, it – Italjanski)
Metoda: POST URL: /api2/delnaplacila/placilo
Parametri (označeni z * so obvezni):
- Delnaplacila
- model_id* – id dokumenta
- placilo* – znesek
- datumplacila* – datum placila
- nacinplacila* – iz šifranta plačil
Opomba: aktualen seznam je vedno na voljo tudi preko GET /api2/glavadokumenta/vrstaprodaje.
- 1 - Dobava blaga in storitev
- 2 - Dobava blaga in storitev v Sloveniji od katerih obračuna DDV prejemnik
- 12 - Dobava storitev v druge države članice EU
- 3 - Dobava blaga v druge države članice EU
- 4 - Tristranske dobave blaga znotraj EU
- 5 - Dobava blaga znotraj EU po carinskih postopkih 42 in 63
- 6 - Dobava blaga znotraj EU po skladiščenju na odpoklic
- 7 - Prodaja blaga na daljavo
- 8 - Montaža in instaliranje blaga v drugi državi članici
- 15 - Lokalna dobava, reverse charge
- 9 - Oproščene dobave brez pravice do odbitka DDV
- 10 - Posebna ureditev za rabljeno blago
- 11 - Izvoz blaga izven EU
- 13 - Ne gre v knjigo DDV
- 14 - Oproščen promet s pravico do odbitka DDV
- 16 - Lokalna dobava blaga v drugi državi članici EU
<?php
$url = "https://si.quibi.net";
$username = "uporabniški@ime.si";
$password = "geslo";
$formdata = array(
"Stranka" => array(
"id" => 1,
"naziv" => "Testna stranka"
) ,
"Glavadokumenta" => array(
"stevilcenje_id" => 1,
"kraj" => "Kraj"
) ,
"Postavkedokumenta" => array(
1 => array(
"sifra" => "test"
)
)
);
$opts = array(
'http' => array(
'method' => "POST",
"content" => json_encode($formdata) ,
'header' => "Content-Type: application/json\r\n" . "username: {$username}\r\n" . "password: {$password}\r\n"
)
);
$ret = file_get_contents("$url/api2/glavadokumenta/form", false, stream_context_create($opts));
print_r(json_decode($ret));
<?php
$url = "https://si.quibi.dev";
$username = "uporabniški@ime.si";
$password = "geslo";
$opts = array(
'http' => array(
'method' => "GET",
'header' => "Content-Type: application/json\r\n" . "username: {$username}\r\n" . "password: {$password}\r\n"
)
);
$ret = file_get_contents("$url/api2/stevilcenje", false, stream_context_create($opts));
print_r(json_decode($ret));
Za ustvarjanje dokumenta uporabite POST /api2/glavadokumenta/form. Glavadokumenta.stevilcenje_id določa vrsto dokumenta (na primer račun ali predračun); uporabnik potrebuje pravico za ustvarjanje te vrste. Uspešen odgovor vsebuje error: false, id (ID dokumenta) in ZapSt (številko). Ustrezno številčenje in pravice za integracijo nastavi skrbnik podjetja.
Za varen ponovni poskus po prekinitvi povezave pošljite svojo nespremenljivo referenco v Glavadokumenta.external_id (največ 128 znakov). Enaka referenca pri istem podjetju in enaka vsebina zahtevka vrne isti id in ZapSt ter replayed: true. Enaka referenca z drugačno vsebino vrne napako. Referenca ni obvezna za obstoječe odjemalce, vendar brez nje ponavljanje ustvarjanja ni varno. Pri ponovnem poskusu pošljite isto telo zahtevka. Referenca je ločena od uvoznega polja externalid.
Če je dokument vezan na vozilo, pošljite Glavadokumenta.vozila_id. Vozilo mora pripadati istemu podjetju in izbrani stranki. Seznam vozil dobite z GET /api2/vozila/index/ID_STRANKE, posamezno vozilo z GET /api2/vozila/view/ID_VOZILA. GET /api2/glavadokumenta/view/ID_DOKUMENTA vrne vozila_id in external_id.
{
"Glavadokumenta": {
"stevilcenje_id": 12,
"vrstaprodaje": 1,
"stranka_id": 1234,
"vozila_id": 56,
"external_id": "portal-potreba-567",
"opomba": "Zajem potrebe #567"
},
"Postavkedokumenta": {
"1": { "sifra": "ART-1", "kolicina": 2 }
}
}
ID-ji in šifra v primeru so ponazoritve. Pri podanem Glavadokumenta.stranka_id mora stranka obstajati in pripadati podjetju; napačen ID vrne napako.
POST /api2/glavadokumenta/form še naprej ustvarja vse vrste dokumentov glede na stevilcenje_id. Obstoječi POST /api2/glavadokumenta/form/ID_VIRNEGA_DOKUMENTA brez Glavadokumenta.id v telesu še naprej ustvari kopijo.
Za urejanje podprte vrste dokumenta pošljite Glavadokumenta.id v telesu na POST /api2/glavadokumenta/form ali POST /api2/glavadokumenta/form/ID_DOKUMENTA. Če je ID tudi v poti, se mora ujemati z ID v telesu. Pošljite celoten seznam Postavkedokumenta, ki nadomesti stare postavke; prazen seznam ni dovoljen. Zahtevana je pravica za urejanje vrste dokumenta. API preveri ista pravila urejanja kot pogled dokumenta: vrsto in stanje dokumenta, povezane dokumente, knjigo DDV, kasnejšo inventuro ter nastavitve podjetja (dovoliurejanje, dovoliurejanjedoktipi, urejajpovezanedokumente in lockdocuments). Dokumenta z dodeljenim FURS EOR in izdanega gotovinskega dokumenta ni mogoče urediti; pri drugih zaključenih ali izdanih dokumentih odločajo pravila za vrsto, datum in nastavitve. Predračuna, iz katerega je že nastal račun, ni mogoče urediti. Ob zavrnitvi API vrne razloge. Številka, številčenje in external_id ostanejo nespremenjeni. Odgovor vsebuje id in ZapSt; rezultat ponovno preberite z GET /api2/glavadokumenta/view/ID_DOKUMENTA.
Pri urejanju lahko spremenite stranka_id, vozila_id, opomba, opombaglava, datIzdRac, datValute, datstod, datstdo, kraj, vrstaprodaje, nacinPlacila, stroskovnamesta_id, poslovneenote_id in komercialist_id. stevilcenje_id lahko podate le z nespremenjeno vrednostjo. Ostala polja glave API pri urejanju prezre.
POST /api2/glavadokumenta/send/ID_DOKUMENTA sprejme JSON z obveznim email ter neobveznima zadeva in vsebina. Uporabi privzetega pošiljatelja podjetja in dokument pošlje kot PDF prek obstoječega workerja. Odgovor vrne send_id in status: queued. Z GET /api2/glavadokumenta/send_status/ID_DOKUMENTA?send_id=ID_POSILJANJA preverite queued, sent ali failed in polje napaka. Brez send_id se vrne zadnji API poskus za ta dokument. sent pomeni, da je poštni strežnik sprejel sporočilo; ne potrjuje prejema ali branja pri naslovniku.
Šifrant berite z GET /api2/sifranti, posamezen artikel z GET /api2/sifranti/view/ID_ARTIKLA. Nov artikel ustvarite z POST /api2/sifranti/form; odgovor vsebuje data.Sifranti.Sifrant (ID). Obstoječega popravite z POST /api2/sifranti/form/ID_ARTIKLA. Podajte vsaj Sifranti.sifra, naziv, enota_id, ddv_id, cenaBrezDDV in vrsto vodiZalogo; preverite vrnjene validacijske napake. Sezname dobite z GET /api2/enota, GET /api2/ddv in GET /api2/kategorije. kategorije_id je neobvezen. Pravilo predpone šifer in privzeto kategorijo določi skrbnik podjetja. API artikla ne dodeli samodejno zunanje reference; remote_id ni del dovoljenih polj za shranjevanje artikla. Sprememba cene v šifrantu ne spremeni že shranjenih cen na dokumentih. Postavka brez šifre ostane na dokumentu in ne ustvari artikla v šifrantu.
Ločen API osnutka brez številke ni dokumentiran za vse vrste dokumentov. Preizkusno okolje, omejitve pogostosti klicev in konkretne pravice uporabnika so odvisni od namestitve; za integracijo jih potrdi skrbnik Quibija pred povezavo v produkcijo.