Veřejné API nabídek

Veřejné API je nejjednodušší způsob, jak strojově získávat nabídky z Domonautu. Je určené hlavně jako náhrada klasického scrapování výsledků a detailů, které zbytečně zatěžuje web i samotný scraper. Přes API lze efektivně stáhnout aktuální nabídky, sledovat jejich změny a pracovat také s vybranými AI hodnotami.

Identifikace je povinná

API je veřejné a není potřeba žádný klíč ani registrace. Každý požadavek ale musí pravdivě uvést název projektu nebo firmy a funkční kontaktní e-mail. Pokud má provozovatel vlastní web, doporučujeme uvést i jeho adresu. Kontaktní e-mail zároveň slouží jako identifikátor entity pro limity a případnou komunikaci.

X-Domonaut-Agent: Název projektu nebo firmy
X-Domonaut-Email: api@example.cz
X-Domonaut-Website: https://example.cz

Identifikace není autentizace, proto spoléhá na korektní chování klienta. Vydávání se za jinou entitu, střídání e-mailů kvůli obcházení limitů nebo uvedení nefunkčního kontaktu může vést k blokaci.

Povolené použití a atribuce

Data lze prezentovat nebo použít pro monitoring, analytiku či výzkum. Pokud z dat vzniká veřejný výstup, musí být viditelně uvedeno „Zdroj: Domonaut.cz“ s odkazem na Domonaut. U konkrétní nabídky musí zůstat také odkaz z pole URL.

API není určené k vytvoření kopie Domonautu ani jako náhrada vlastní realitní inzerce. Automatické procházení webových stránek mimo API, pokusy získávat kontaktní údaje nebo hromadné stahování fotografií mohou vést k blokaci. Pole titulniFoto slouží pouze jako náhled nabídky nebo pomůcka pro deduplikaci, nikoli pro vytváření vlastní fotogalerie či archivu fotografií.

Limity

Čas v Europe/PragueLimit jedné entity
23:00–08:001 požadavek za sekundu
08:00–23:001 požadavek za minutu

Limit se počítá podle kontaktního e-mailu bez ohledu na způsob použití endpointu. Při překročení limitu API vrátí 429 a hlavičku Retry-After. Doporučený je noční přístup, ideálně v období nejnižší aktivity mezi 02:00 a 05:00. Větší synchronizace spouštějte právě v tomto čase, používejte dávky až 500 záznamů a další stránky načítejte pomocí kurzoru.

Endpoint a způsoby použití

API má jeden endpoint GET https://domonaut.cz/api/offers.php. Podle parametrů ho lze použít třemi způsoby.

Snapshot aktivních nabídek

GET /api/offers.php?limit=500

Bez parametru from se vrací snapshot aktuálních nabídek. Výchozí hodnota je state=active. První odpověď obsahuje query.to a při větším výsledku také pagination.nextCursor pro pokračování.

Změny v časovém okně

GET /api/offers.php?from=2026-08-19T00:00:00%2B02:00&to=2026-08-20T00:00:00%2B02:00&limit=500

Vrací nabídky vytvořené, upravené nebo archivované v daném období a také změny jejich AI návrhů. Výchozí hodnota je state=all. Čas from se do intervalu počítá, čas to už ne. Pokud to chybí, použije se čas přijetí požadavku. Hodnota to nesmí být v budoucnosti a jedno časové okno může mít nejvýše 31 dní.

Jedna nabídka

GET /api/offers.php?id=46563

Vrátí aktuální podobu jedné aktivní nebo archivované nabídky. Pokud ID neexistuje, API vrátí 404. Pro pravidelnou synchronizaci je vhodnější dávkové čtení změn.

Parametry kolekce

ParametrVýznamVýchozí hodnota
limitPočet záznamů v dávce, 1–500.100
stateactive, archived nebo all.Snapshot: active, změny: all
fromZačátek změnového okna v ISO 8601, včetně.Bez hodnoty se čte snapshot
toKonec změnového okna v ISO 8601, bez tohoto okamžiku.Čas přijetí prvního požadavku
cursorNeprůhledná hodnota nextCursor pro další stránku.
idID jedné nabídky; nelze kombinovat s oknem ani kurzorem.

Při pokračování stačí poslat cursor a případně limit. Časové okno i stav jsou už uložené v kurzoru. Po dokončení změnového okna použijte jeho query.to jako from dalšího okna. Záznamy přesně na hranici from se mohou záměrně objevit znovu, proto je vhodné je deduplikovat podle ID.

Příklad požadavku

curl --get 'https://domonaut.cz/api/offers.php' \
  --header 'X-Domonaut-Agent: Cenová mapa Example.cz' \
  --header 'X-Domonaut-Email: api@example.cz' \
  --header 'X-Domonaut-Website: https://example.cz' \
  --data-urlencode 'from=2026-08-19T00:00:00+02:00' \
  --data-urlencode 'to=2026-08-20T00:00:00+02:00' \
  --data 'limit=500'

Struktura odpovědi

JSON záměrně zachovává názvy polí používané v databázi Domonautu. Všechna pole nabídky jsou přítomná v každém záznamu; pokud údaj není známý, pro daný typ nemovitosti nedává smysl nebo ho skrylo nastavení soukromí, má hodnotu null. Číselné příznaky se posílají jako 0, 1 nebo null, nikoli jako JSON true/false.

Obálka odpovědi

PoleJSON typHodnoty / formátVýznam
apiVersionstring1.0Verze formátu odpovědi.
generatedAtstringISO 8601, Europe/PragueČas vytvoření odpovědi.
queryobjectmode, state, from, to, limit; u detailu pouze idNormalizované parametry skutečně použité serverem.
dataarray0 až limit objektůNabídky popsané v datovém slovníku níže.
pagination.countinteger0–500Počet objektů v aktuálním poli data.
pagination.hasMorebooleantrue / falseZda existuje další dávka stejného dotazu.
pagination.nextCursorstring|nullNeprůhledný kurzorPošlete beze změny jako parametr cursor; na poslední stránce je null.

Kompletní příklad odpovědi

{
  "apiVersion": "1.0",
  "generatedAt": "2026-08-20T01:02:03+02:00",
  "query": {
    "mode": "changes",
    "state": "all",
    "from": "2026-08-19T00:00:00+02:00",
    "to": "2026-08-20T00:00:00+02:00",
    "limit": 500
  },
  "data": [{
    "ID": 46563,
    "username": "inzerent123",
    "typNabidky": "Pronájem",
    "typNemovitosti": "Byt",
    "dispozice": "2+kk",
    "kategorieDomu": null,
    "kategoriePozemku": null,
    "kategorieKomercni": null,
    "stav": "Velmi dobrý",
    "prislusenstviBytu": "Lodžie/Balkon,Výtah,Sklep",
    "prislusenstviDomu": null,
    "prislusenstviKomercni": null,
    "vybavenost": "Částečně vybavený",
    "stavba": "Cihla",
    "vlastnictvi": "Osobní",
    "penb": "C",
    "pokoje": null,
    "room_count_kind": "exact",
    "youtube_url": null,
    "is_reserved": 0,
    "podlazi": 3,
    "podlaziMax": 7,
    "plocha": 58,
    "plochaPozemku": null,
    "popis": "Světlý byt po rekonstrukci.",
    "nastehovani": "2026-09-01",
    "cena": 18000,
    "mena": "Kč",
    "typCeny": null,
    "poznamkaCeny": "+ zálohy na služby",
    "anuita": null,
    "poplatky": 3500,
    "kauce": 36000,
    "provizeAno": 0,
    "provize": null,
    "houseNumber": "123/45",
    "street": "Vinohradská",
    "level10": "Vinohrady",
    "level8": "Praha",
    "level7": "Praha 2",
    "level6": "Hlavní město Praha",
    "level4": "Praha",
    "PSC": "12000",
    "latitude": 50.0755,
    "longitude": 14.4378,
    "created": "2026-08-18",
    "updated": "2026-08-19",
    "archived": null,
    "URL": "https://domonaut.cz/detail/46563",
    "advert_code": "DOMONAUT-ABC123",
    "inzerent": "Jméno Příjmení",
    "titulniFoto": "https://domonaut.cz/img/nabidky/46563/thumbs/1.jpg",
    "offers_ai_suggestions": {
      "poplatky": 3500,
      "minPoplatky": null,
      "kauce": 36000,
      "provize": 0,
      "anuita": null,
      "pets": 1,
      "cats": null,
      "dogs": 1,
      "students": null,
      "sharedHousing": 0,
      "shortTerm": 0,
      "singles": 1,
      "families": null
    }
  }],
  "pagination": {"count": 1, "hasMore": false, "nextCursor": null}
}

Datový slovník nabídky

Typ integer|null, number|null nebo string|null znamená, že pole je v JSON vždy přítomné, ale může být null. Hodnoty příslušenství jsou v jednom řetězci oddělené čárkou bez mezer; pořadí není významové.

Identita a druh nabídky

PoleJSON typHodnoty / formátVýznam
IDintegerKladné celé čísloStabilní interní ID nabídky a primární klíč pro deduplikaci.
usernamestringMax. 20 znakůVeřejné uživatelské jméno účtu inzerenta.
inzerentstring|nullJméno a příjmení, nebo nullnull znamená, že inzerent skryl jméno a příjmení v nastavení soukromí. Veřejný účet lze stále určit podle pole username.
typNabidkystringProdej, Pronájem, Dražba, PodílTyp obchodní nabídky.
typNemovitostistringByt, Dům, Pozemek, Komerční prostor, Garáž, Nebytový prostorHlavní typ nemovitosti.

Vlastnosti nemovitosti

PoleJSON typHodnoty / formátVýznam
dispozicestring|null1+kk, 1+1, 2+kk, 2+1, 3+kk, 3+1, 4+kk, 4+1, 5+kk, 5+1, 6+, Atypický, PokojDispozice bytu nebo obytné nemovitosti.
kategorieDomustring|nullRodinný dům, Činžovní dům, Chata, Vila, Chalupa, Vícegenerační dům, Zemědělská usedlost, Na klíč, PamátkaPodkategorie domu; u jiných typů obvykle null.
kategoriePozemkustring|nullBydlení, Pole, Komerční, Zahrada, Les, Louka, Sady a vinice, Rybník, OstatníPodkategorie pozemku; u jiných typů obvykle null.
kategorieKomercnistring|nullKanceláře, Sklady, Obchodní prostor, Výroba, Restaurace, Činžovní dům, Zemědělský, Ordinace, Ubytování, Apartmány, OstatníPodkategorie komerčního prostoru.
stavstring|nullNovostavba, Dokončená rekonstrukce, Velmi dobrý, Dobrý, Probíhá rekonstrukce, Probíhá výstavba, Projekt, ŠpatnýStav nemovitosti.
prislusenstviBytustring|nullČárkami oddělené: Klimatizace, Lodžie/Balkon, Posilovna, Terasa, Sklep, Parkování, Garáž, Bezbariérový, Výtah, ZahradaVybrané příslušenství bytu.
prislusenstviDomustring|nullČárkami oddělené: Klimatizace, Garáž, Sklep, Parkování, Bazén, Přízemní, Patrový, Samostatný, Řadový, Rohový, V bloku, BezbariérovýVybrané příslušenství a charakter domu.
prislusenstviKomercnistring|nullČárkami oddělené: Klimatizace, Parkování, Garáž, Zahrada, Přízemní, Patrový, BezbariérovýVybrané příslušenství komerčního prostoru.
vybavenoststring|nullVybavený, Částečně vybavený, NevybavenýÚroveň vybavení.
stavbastring|nullPanel, Cihla, Kámen, Dřevo, Montovaná, Modulární, Skeletová, SmíšenáKonstrukce stavby.
vlastnictvistring|nullOsobní, Družstevní, StátníForma vlastnictví.
penbstring|nullA mimořádně úsporná až G mimořádně nehospodárnáTřída průkazu energetické náročnosti budovy.
pokojeinteger|null1–255Počet pokojů, zejména u domů a typů bez pole dispozice.
room_count_kindstringexact, at_least, atypicalUpřesňuje, zda je pokoje přesné číslo, spodní hranice (např. 5+) nebo atypická dispozice.
podlaziinteger|null-2 až 30Podlaží, ve kterém se jednotka nachází.
podlaziMaxinteger|null1–30Celkový počet podlaží budovy.
plochainteger|nullUžitná plocha nemovitosti.
plochaPozemkuinteger|nullCelková plocha pozemku.
popisstringText, rozpoznané kontakty jsou nahrazenéPopis nabídky vložený inzerentem.
nastehovanistring|nullYYYY-MM-DDDatum možného nastěhování nebo dostupnosti.

Cena a finanční údaje

PoleJSON typHodnoty / formátVýznam
cenanumber|nullV měně menaZákladní cena nabídky; u pronájmu zpravidla měsíční nájemné.
menastring, EURMěna pole cena a strukturovaných finančních polí nabídky.
typCenystring|nullza m² nebo nullza m² znamená cenu za metr čtvereční; null celkovou/základní cenu.
poznamkaCenystring|nullVolný textDoplňující poznámka k ceně; rozpoznané kontakty jsou odstraněné.
anuitainteger|nullV měně menaZbývající celková anuita, typicky u družstevního vlastnictví.
poplatkyinteger|nullV měně mena, zpravidla za měsícStrukturované provozní poplatky uvedené v nabídce.
kauceinteger|nullV měně menaVratná kauce/jistota.
provizeAnointeger|null1 ano, 0 bez provizePříznak, zda nabídka počítá s provizí.
provizeinteger|nullV měně menaKonkrétní výše provize; může být null i při provizeAno=1.

Adresa a poloha

PoleJSON typHodnoty / formátVýznam
houseNumberstring|nullČíslo domuČíslo popisné/orientační; při skryté přesné adrese je null.
streetstring|nullNázev uliceUlice; při nejvyšší úrovni soukromí je null.
level10string|nullKatastrální územíNejjemnější územní celek používaný v nabídce.
level8string|nullMěsto / obecMěsto nebo obec; může být skryté, pokud se zobrazuje pouze okres/obvod.
level7string|nullOkres / městský obvodOkres nebo obvod.
level6string|nullKrajKraj nabídky.
level4string|nullVyšší územní celek / směrHrubší lokalizační hodnota z interní hierarchie.
PSCstring|null5 číslic, např. 12000PSČ je řetězec, aby se zachovaly případné úvodní nuly.
latitudenumber|nullWGS84, desetinné stupněZeměpisná šířka; podle soukromí může být posunutá nebo null.
longitudenumber|nullWGS84, desetinné stupněZeměpisná délka; podle soukromí může být posunutá nebo null.

Odkazy a životní cyklus

PoleJSON typHodnoty / formátVýznam
URLstringhttps://domonaut.cz/detail/IDKanónický detail nabídky na Domonautu.
advert_codestring|nullDOMONAUT- + kód zakázkyVeřejně označené ID zakázky realitní kanceláře, pokud bylo dodané.
youtube_urlstring|nullHTTPS URLOdkaz na video nabídky na YouTube, pokud jej zdroj dodal.
is_reservedinteger1 rezervováno, 0 bez rezervaceAktuální stav rezervace nabídky.
createdstringYYYY-MM-DDDatum vytvoření nabídky.
updatedstring|nullYYYY-MM-DDDatum poslední změny nabídky.
archivedstring|nullYYYY-MM-DDDatum archivace; null znamená aktuálně aktivní nabídku.
titulniFotostring|nullAbsolutní HTTPS URL na JPG thumbnailNáhled titulní fotografie z /img/nabidky/ID/thumbs.

AI návrhy offers_ai_suggestions

Celé pole je null, pokud pro nabídku AI návrhy neexistují. Jinak jde o objekt se všemi následujícími klíči. Jde o automatickou extrakci z textu, nikoli o údaje potvrzené inzerentem; strukturovaná pole nabídky mají před AI návrhy přednost. Finanční AI hodnoty jsou vždy celé Kč bez ohledu na mena nabídky.

PoleJSON typHodnoty / formátVýznam
poplatkyinteger|nullCelé KčRozpoznané povinné opakované provozní poplatky.
minPoplatkyinteger|null1 nebo null1 značí minimální částku („od“, sazba za osobu nebo více variant); 0 se neposílá.
kauceinteger|nullCelé KčRozpoznaná kauce/jistota u pronájmu.
provizeinteger|nullCelé Kč; 0 = bez provizeRozpoznaná konkrétní provize.
anuitainteger|nullCelé KčRozpoznaný celkový nesplacený zůstatek anuity.
petsinteger|null1 povoleno, 0 zakázáno, null neuvedenoObecná vhodnost nabídky pro domácí mazlíčky.
catsinteger|null1 povoleno, 0 zakázáno, null neuvedenoVýslovná informace o kočkách.
dogsinteger|null1 povoleno, 0 zakázáno, null neuvedenoVýslovná informace o psech.
studentsinteger|null1 vhodné, 0 nevhodné, null neuvedenoVýslovná vhodnost pro studenty.
sharedHousinginteger|null1 vhodné, 0 nevhodné, null neuvedenoVýslovná vhodnost pro spolubydlení.
shortTerminteger|null1 krátkodobě možné, 0 pouze dlouhodobě, null neuvedenoMožnost krátkodobého nájmu nebo ubytování.
singlesinteger|null1 vhodné, 0 nevhodné, null neuvedenoVýslovná vhodnost pro jednotlivce.
familiesinteger|null1 vhodné, 0 nevhodné, null neuvedenoVýslovná vhodnost pro rodiny s dětmi.

Soukromí a kontakty

API nikdy neposkytuje telefon, e-mail ani jiná citlivá data uživatelů. Před odesláním se kontroluje také text nabídky a rozpoznané kontaktní údaje se nahrazují textem [kontakt odstraněn]. Adresa respektuje stejné nastavení soukromí jako při běžném anonymním zobrazení nabídky. Podle volby inzerenta se může skrýt číslo domu a posunout poloha, případně se skryje ulice, katastrální území, PSČ i souřadnice.

Změny API a individuální požadavky

API se může v průběhu času měnit společně s Domonautem a jeho datovým modelem. Za průběžnou kontrolu funkčnosti a aktuálnosti svého scraperu nebo jiné integrace odpovídá její vývojář. K datovým nebo strukturálním změnám může dojít bez předchozího oznámení. O významných změnách API bude informace zaslána na kontaktní e-mail uvedený při identifikaci entity. Tato dokumentace vždy popisuje aktuálně podporovanou podobu API.

Pokud má konkrétní projekt oprávněnou potřebu, kterou současné API nepokrývá, je možné požádat o individuální úpravu nebo rozšíření. Žádosti posílejte přes kontaktní formulář a stručně popište způsob použití a požadovaná data.

Stavové kódy

KódVýznam
200Úspěch
400Neplatný formát identifikace nebo parametry
401Chybí e-mail v hlavičce X-Domonaut-Email
403Blokovaná entita
404Neexistující nabídka
405Jiná metoda než GET
429Překročený limit
500Interní chyba

Chyby mají vždy JSON tvar {"error":{"code":"…","message":"…"}}.

Poslední aktualizace 20. 8. 2026