Zelvoo API integracija
Dokumentacija za povezivanje sustava agencija i investitora: od API ključa do provjerenog uvoza nekretnina.
Dokumentacija ažurirana 1. studenoga 2026. · HTTPS · JSON · EUR
Pregled integracije
Postojeći partnerski API prima nove oglase tvrtke i sprema ih kao oglase u izradi (draft). Oglas nije javno objavljen: prije objave pregledajte podatke i dodajte fotografije u svom računu. Kontakt oglašivača preuzima se iz tvrtke, a izdavatelj oglasa je vlasnik tvrtke.
/api/public/importUvoz novih nacrtaOpseg: ovo nije API za čitanje cijele ponude, izmjenu, brisanje, objavljivanje ili potpunu sinkronizaciju portfelja. Takvi javni endpointi nisu dostupni. Za ponovljene uvoze s vanjskim ID-ovima koristite uvoz datoteka opisan niže.
Pristup i API ključ
- Prijavite se na Zelvoo račun koji upravlja tvrtkom i provjerite da aktivni paket uključuje API integraciju.
- Otvorite Moja tvrtka, odaberite tvrtku i pronađite API uvoz.
- Odaberite Izradi API ključ. Spremite ga odmah: cijeli ključ prikazuje se samo nakon izrade.
- Na svom poslužitelju spremite ključ u tajnu varijablu
ZELVOO_API_KEY. Šaljite ga u zaglavljuAuthorization: Bearer VAŠ_KLJUČ.
Ključ je vezan uz jednu tvrtku. Format je zv_ i 48 malih heksadekadskih znakova. Izrada novog ključa odmah poništava stari; ažurirajte sve sustave koji ga koriste. API provjerava valjanost ključa i prava paketa pri svakom zahtjevu.
Slanje zahtjeva
Adresa: https://zelvoo.hr/api/public/import. Šaljite UTF-8 JSON uz Content-Type: application/json i Bearer ključ. Pozive šaljite sa svog poslužitelja, ne iz javnog preglednika.
Tijelo je JSON popis oglasa ili objekt oblika { "oglasi": [...] }. Jedan zahtjev smije imati do 200 oglasa i najviše 2.000.000 bajtova. Veće skupove podijelite prije slanja.
[
{
"naslov": "Trosobni stan u Zagrebu",
"ponuda": "prodaja",
"vrsta": "stan",
"cijena": 245000,
"povrsina": 78.5,
"sobe": 3,
"grad": "Zagreb",
"adresa": "Primjer adrese 12",
"opis": "Primjer podataka za integraciju; zamijenite stvarnim podatcima nekretnine."
}
]Primjer je ilustrativan i stvara stvarni nacrt ako ga pošaljete s valjanim ključem. Zamijenite ga stvarnim podatcima oglasa; zasebni testni API nije dostupan.
Referenca JSON polja
Koristite točne hrvatske nazive polja. API obrađuje samo sljedećih devet polja; proširena polja CSV/XML uvoza nisu dio ovog JSON ugovora.
| Polje | Tip | Obvezno | Pravila |
|---|---|---|---|
| naslov | tekst | Da | 5–120 znakova. |
| ponuda | tekst | Ne | prodaja ili najam; zadano prodaja. |
| vrsta | tekst | Ne | stan, kuca, zemljiste ili poslovni; zadano stan. |
| cijena | broj | Da | Veće od 0 i manje od 1.000.000.000. EUR; kod najma mjesečni iznos. |
| povrsina | broj | Da | Veće od 0 i manje od 1.000.000 m². |
| sobe | broj | Ne | 0–50 nakon zaokruživanja na cijeli broj; zadano 0. |
| grad | tekst | Da | Jedan od trenutačno podržanih gradova navedenih ispod. |
| adresa | tekst | Ne | Najviše 200 znakova se sprema. Lokacija ostaje približna, na razini grada. |
| opis | tekst | Ne | Najviše 5.000 znakova se sprema. |
Brojevi: preporučeni su JSON brojevi s decimalnom točkom, bez oznaka EUR ili m². Ponuda i vrsta mogu biti i hrvatski nazivi (npr. Kuća), ali preporučene su gore navedene vrijednosti.
Trenutačno podržani gradovi za JSON API: Zagreb, Split, Rijeka, Osijek, Zadar, Pula, Dubrovnik, Šibenik, Varaždin, Karlovac, Slavonski Brod, Rovinj, Makarska i Opatija. Županija i približne koordinate preuzimaju se iz grada. Prepoznavanje zanemaruje velika/mala slova i dijakritičke znakove.
Važno za druge gradove: JSON API ne prosljeđuje polja zupanija, lat i lng. Zato slanje tih polja ne rješava nepoznat grad. Za takve lokacije koristite CSV/XML uvoz sa županijom i koordinatama ili kontaktirajte podršku.
Primjeri povezivanja
# ZELVOO_API_KEY postavite u sigurnom okruženju poslužitelja.
# oglasi.json sadrži JSON popis iz primjera ispod.
curl --request POST 'https://zelvoo.hr/api/public/import' \
--header "Authorization: Bearer $ZELVOO_API_KEY" \
--header 'Content-Type: application/json' \
--data-binary '@oglasi.json'// Samo poslužiteljski kod; ključ nije za javni JavaScript.
const response = await fetch('https://zelvoo.hr/api/public/import', {
method: 'POST',
headers: {
Authorization: 'Bearer ' + process.env.ZELVOO_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify(oglasi), // popis do 200 oglasa
});
const result = await response.json();
if (!response.ok) throw new Error(result.error ?? 'API pogreška');
// HTTP 200 ne znači da je svaki oglas spremljen.
console.log({ saved: result.saved, errors: result.errors });
// Ne ponavljajte cijeli zahtjev ako je dio oglasa već spremljen.import os
import requests
response = requests.post(
"https://zelvoo.hr/api/public/import",
headers={"Authorization": "Bearer " + os.environ["ZELVOO_API_KEY"]},
json=oglasi, # popis do 200 oglasa
timeout=60,
)
response.raise_for_status()
result = response.json()
print({"saved": result["saved"], "errors": result["errors"]})
# Kod prekida veze prvo provjerite oglase u Zelvoo računu.
# Ponovni zahtjev može stvoriti duplikate.Odgovori i pogreške
Odgovor je JSON. Uspješno obrađen zahtjev vraća saved (broj spremljenih nacrta) i errors (pogreške pojedinih zapisa). line koristi numeraciju tabličnog uvoza: prvi oglas je redak 2, drugi redak 3. Redak 1 označava zaglavlje, a 0 opće ograničenje.
{
"saved": 1,
"errors": []
}{
"saved": 1,
"errors": [
{ "line": 3, "message": "naslov mora imati 5–120 znakova" }
]
}{ "error": "Neispravan API ključ" }| HTTP | Značenje | Sljedeći korak |
|---|---|---|
| 200 | Zahtjev obrađen | Provjerite saved i errors: moguća je djelomična uspješnost ili saved: 0. |
| 400 | Neispravan zahtjev | Tijelo mora biti JSON; pošaljite neprazan popis ili objekt s poljem oglasi. |
| 401 | Neispravan API ključ | Provjerite Bearer zaglavlje i je li ključ zamijenjen novim. |
| 403 | API uvoz nije uključen u paket | Provjerite trenutačna prava za tvrtkin API ključ. |
| 404 | Tvrtka ne postoji | Ključ mora pripadati postojećoj tvrtki. |
| 413 | Zahtjev je prevelik | Tijelo zahtjeva smije imati najviše 2.000.000 bajtova. |
| 500 | Spremanje nije uspjelo | Provjerite paket, podatke i ograničenja u računu; po potrebi kontaktirajte podršku. |
Neispravni zapisi ne spremaju se, a valjani se pokušavaju spremiti zajedno. Pogreška pri spremanju vraća HTTP 500 i može uključiti prethodne validacijske pogreške; nema popisa novostvorenih ID-ova u odgovoru.
Ograničenja i sigurno ponavljanje
- Nema upserta ni idempotencije: svaki ponovni POST može stvoriti nove nacrte. Vanjski ID se u JSON API-ju ne obrađuje.
- Nikada ne šaljite više od 200 oglasa: endpoint obrađuje samo prvih 200; ostatak može biti preskočen bez upozorenja u odgovoru.
- Djelomični uspjeh: ispravite i ponovno pošaljite samo zapise iz errors, ne cijeli izvorni popis.
- Prekid veze ili HTTP 500: prije ponavljanja provjerite nacrte u računu. Ne pretpostavljajte da zahtjev nije stigao.
- Fotografije, video, novogradnja i dodatna polja: nisu podržani ovim JSON endpointom. Fotografije dodajte kroz Zelvoo ili ZIP uvoz; API koristi zamjensku naslovnu sliku.
- Kvote i status: uvoz ne dodjeljuje pogodnosti, promocije ili automatsku objavu. Objavljivanje podliježe važećem paketu i pravilima računa.
- Automatizacija: vaš sustav može poslati zahtjev, ali Zelvoo trenutačno ne dohvaća udaljene feedove niti provodi nenadziranu periodičnu sinkronizaciju.
Nije objavljen zaseban broj zahtjeva u minuti niti ugovorena propusnost. Šaljite serije redom i pratite svaki odgovor; ovaj API nije potvrđen kao rješenje za obradu 500 oglasa i 5.000 fotografija u pozadini.
CSV, XML i ZIP integracija
U Mojim oglasima i Mojoj tvrtki dostupan je odvojeni uvoz datoteka, prema osobnim pravima za CSV/XML. To nije drugi javni HTTP endpoint. U obrascu možete preuzeti predloške, pregledati podatke, mapirati stupce, spremiti konfiguraciju i pratiti izvještaj uvoza.
- CSV: UTF-8, separator zarez, točka-zarez ili tabulator. Tekst sa separatorima stavite u dvostruke navodnike.
- XML: ponavljajući elementi oglasa s poljima; DOCTYPE i vanjski entiteti nisu dopušteni.
- ZIP: CSV/XML i lokalne fotografije. Polje fotografije navodi relativne putanje (npr.
fotografije/stan-01.jpg|fotografije/stan-02.jpg). Fotografije se obrađuju u pregledniku i spremaju u privatnu pohranu; udaljene slike ne preuzimaju se. - Ponovljeni uvoz: za stabilni izvor koristite isti vanjski_id. Identitet je odvojen po vlasniku, izvoru i vanjskom ID-u. Neuspješan ili nepotpun uvoz ne smije ukloniti postojeću ponudu.
naslov;ponuda;vrsta;cijena;povrsina;sobe;grad;adresa;opis
"Trosobni stan u Zagrebu";prodaja;stan;245000;78.5;3;Zagreb;"Primjer adrese 12";"Zamijenite stvarnim opisom"<?xml version="1.0" encoding="UTF-8"?>
<oglasi>
<oglas>
<vanjski_id>CRM-001</vanjski_id>
<naslov>Trosobni stan u Zagrebu</naslov>
<ponuda>prodaja</ponuda>
<vrsta>stan</vrsta>
<cijena>245000</cijena>
<povrsina>78.5</povrsina>
<sobe>3</sobe>
<grad>Zagreb</grad>
<opis>Zamijenite stvarnim opisom</opis>
</oglas>
</oglasi>Proširena polja datoteka: vanjski_id, fotografije, zupanija, lat, lng, drzava, valuta, okucnica, kupaonice, kat, ukupno_katova, godina_izgradnje, godina_obnove, energetski_razred, grijanje, namjestenost, stanje, podvrsta, naselje, opcina, ulica, kucni_broj, video, video_2, virtualna_setnja, znacajke, udaljenost_mora, orijentacija, dostupno_od i novogradnja. Spremanje podliježe validaciji i pravima paketa.
Limiti naprednog uvoza: do 5.000 zapisa, 100 stupaca i 10.000 znakova po ćeliji, uz najviše 20 MB serijaliziranih podataka. Obrada ide u serijama po 20 oglasa; nastavak se pokreće iz preglednika. Pregled prikazuje do 20 valjanih zapisa. Jednostavni uvoz ograničen je na 200 oglasa, 30 stupaca i 2 MB podataka.
ZIP limiti: jedna CSV ili XML datoteka, najviše 100 MB arhive, 10.000 datoteka, ukupno 250 MB raspakirano i 20 MB po datoteci. Fotografije mogu biti JPEG, PNG ili WebP, do 10 MB i 40 megapiksela; pretvaraju se u WebP s najvećom dimenzijom 1.920 px. Broj spremljenih fotografija i videozapisa ograničen je paketom.
Identitet i izvještaji: bez vanjski_id novi odvojeni uvoz ne može pouzdano prepoznati prethodni oglas. Povijest prati processed, created, updated i failed te pogreške i upozorenja; izvor i posao moraju pripadati prijavljenom korisniku. Za izvoz odaberite 1–5.000 oglasa. Fotografije u izvozu imaju privremene poveznice, ne trajne javne URL-ove.
Za grad koji nije u ugrađenom popisu unesite grad, zupanija, lat i lng; koordinate moraju biti u Hrvatskoj. Za izvoz označite vlastite oglase i odaberite CSV ili XML ako vaš paket uključuje odgovarajući format. Izvoz nije dostupan kroz partnerski JSON API.
Sigurnost integracije
- Koristite HTTPS i čuvajte ključ isključivo na poslužitelju. Ne ugrađujte ga u aplikaciju preglednika, javni repozitorij, URL, e-poštu ili snimku zaslona.
- Pri promjeni suradnika ili sumnji na otkrivanje odmah izradite novi ključ.
- U zapisnicima ne bilježite Authorization zaglavlje ni nepotrebne osobne podatke. Evidentirajte vrijeme, broj poslanih oglasa, HTTP status, saved i errors.
- Šaljite samo oglase i materijale koje smijete objavljivati. Ne pokušavajte slati owner_id, agency_id ili status: tvrtku i vlasnika određuje ključ, a status je draft.
Podrška za integraciju
Za pomoć pošaljite naziv tvrtke, format integracije, vrijeme zahtjeva, HTTP status i anonimizirani primjer pogreške. Nikada ne šaljite API ključ. Za udaljene feedove, dodatne gradove ili prilagođenu sinkronizaciju najprije provjerite mogućnosti s našim timom.
Kontaktirajte Zelvoo