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/Prague | Limit jedné entity |
| 23:00–08:00 | 1 požadavek za sekundu |
| 08:00–23:00 | 1 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
| Parametr | Význam | Výchozí hodnota |
limit | Počet záznamů v dávce, 1–500. | 100 |
state | active, archived nebo all. | Snapshot: active, změny: all |
from | Začátek změnového okna v ISO 8601, včetně. | Bez hodnoty se čte snapshot |
to | Konec změnového okna v ISO 8601, bez tohoto okamžiku. | Čas přijetí prvního požadavku |
cursor | Neprůhledná hodnota nextCursor pro další stránku. | — |
id | ID 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
| Pole | JSON typ | Hodnoty / formát | Význam |
apiVersion | string | 1.0 | Verze formátu odpovědi. |
generatedAt | string | ISO 8601, Europe/Prague | Čas vytvoření odpovědi. |
query | object | mode, state, from, to, limit; u detailu pouze id | Normalizované parametry skutečně použité serverem. |
data | array | 0 až limit objektů | Nabídky popsané v datovém slovníku níže. |
pagination.count | integer | 0–500 | Počet objektů v aktuálním poli data. |
pagination.hasMore | boolean | true / false | Zda existuje další dávka stejného dotazu. |
pagination.nextCursor | string|null | Neprůhledný kurzor | Poš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
| Pole | JSON typ | Hodnoty / formát | Význam |
ID | integer | Kladné celé číslo | Stabilní interní ID nabídky a primární klíč pro deduplikaci. |
username | string | Max. 20 znaků | Veřejné uživatelské jméno účtu inzerenta. |
inzerent | string|null | Jméno a příjmení, nebo null | null znamená, že inzerent skryl jméno a příjmení v nastavení soukromí. Veřejný účet lze stále určit podle pole username. |
typNabidky | string | Prodej, Pronájem, Dražba, Podíl | Typ obchodní nabídky. |
typNemovitosti | string | Byt, Dům, Pozemek, Komerční prostor, Garáž, Nebytový prostor | Hlavní typ nemovitosti. |
Vlastnosti nemovitosti
| Pole | JSON typ | Hodnoty / formát | Význam |
dispozice | string|null | 1+kk, 1+1, 2+kk, 2+1, 3+kk, 3+1, 4+kk, 4+1, 5+kk, 5+1, 6+, Atypický, Pokoj | Dispozice bytu nebo obytné nemovitosti. |
kategorieDomu | string|null | Rodinný dům, Činžovní dům, Chata, Vila, Chalupa, Vícegenerační dům, Zemědělská usedlost, Na klíč, Památka | Podkategorie domu; u jiných typů obvykle null. |
kategoriePozemku | string|null | Bydlení, Pole, Komerční, Zahrada, Les, Louka, Sady a vinice, Rybník, Ostatní | Podkategorie pozemku; u jiných typů obvykle null. |
kategorieKomercni | string|null | Kancelář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. |
stav | string|null | Novostavba, Dokončená rekonstrukce, Velmi dobrý, Dobrý, Probíhá rekonstrukce, Probíhá výstavba, Projekt, Špatný | Stav nemovitosti. |
prislusenstviBytu | string|null | Čárkami oddělené: Klimatizace, Lodžie/Balkon, Posilovna, Terasa, Sklep, Parkování, Garáž, Bezbariérový, Výtah, Zahrada | Vybrané příslušenství bytu. |
prislusenstviDomu | string|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. |
prislusenstviKomercni | string|null | Čárkami oddělené: Klimatizace, Parkování, Garáž, Zahrada, Přízemní, Patrový, Bezbariérový | Vybrané příslušenství komerčního prostoru. |
vybavenost | string|null | Vybavený, Částečně vybavený, Nevybavený | Úroveň vybavení. |
stavba | string|null | Panel, Cihla, Kámen, Dřevo, Montovaná, Modulární, Skeletová, Smíšená | Konstrukce stavby. |
vlastnictvi | string|null | Osobní, Družstevní, Státní | Forma vlastnictví. |
penb | string|null | A mimořádně úsporná až G mimořádně nehospodárná | Třída průkazu energetické náročnosti budovy. |
pokoje | integer|null | 1–255 | Počet pokojů, zejména u domů a typů bez pole dispozice. |
room_count_kind | string | exact, at_least, atypical | Upřesňuje, zda je pokoje přesné číslo, spodní hranice (např. 5+) nebo atypická dispozice. |
podlazi | integer|null | -2 až 30 | Podlaží, ve kterém se jednotka nachází. |
podlaziMax | integer|null | 1–30 | Celkový počet podlaží budovy. |
plocha | integer|null | m² | Užitná plocha nemovitosti. |
plochaPozemku | integer|null | m² | Celková plocha pozemku. |
popis | string | Text, rozpoznané kontakty jsou nahrazené | Popis nabídky vložený inzerentem. |
nastehovani | string|null | YYYY-MM-DD | Datum možného nastěhování nebo dostupnosti. |
Cena a finanční údaje
| Pole | JSON typ | Hodnoty / formát | Význam |
cena | number|null | V měně mena | Základní cena nabídky; u pronájmu zpravidla měsíční nájemné. |
mena | string | Kč, EUR | Měna pole cena a strukturovaných finančních polí nabídky. |
typCeny | string|null | za m² nebo null | za m² znamená cenu za metr čtvereční; null celkovou/základní cenu. |
poznamkaCeny | string|null | Volný text | Doplňující poznámka k ceně; rozpoznané kontakty jsou odstraněné. |
anuita | integer|null | V měně mena | Zbývající celková anuita, typicky u družstevního vlastnictví. |
poplatky | integer|null | V měně mena, zpravidla za měsíc | Strukturované provozní poplatky uvedené v nabídce. |
kauce | integer|null | V měně mena | Vratná kauce/jistota. |
provizeAno | integer|null | 1 ano, 0 bez provize | Příznak, zda nabídka počítá s provizí. |
provize | integer|null | V měně mena | Konkrétní výše provize; může být null i při provizeAno=1. |
Adresa a poloha
| Pole | JSON typ | Hodnoty / formát | Význam |
houseNumber | string|null | Číslo domu | Číslo popisné/orientační; při skryté přesné adrese je null. |
street | string|null | Název ulice | Ulice; při nejvyšší úrovni soukromí je null. |
level10 | string|null | Katastrální území | Nejjemnější územní celek používaný v nabídce. |
level8 | string|null | Město / obec | Město nebo obec; může být skryté, pokud se zobrazuje pouze okres/obvod. |
level7 | string|null | Okres / městský obvod | Okres nebo obvod. |
level6 | string|null | Kraj | Kraj nabídky. |
level4 | string|null | Vyšší územní celek / směr | Hrubší lokalizační hodnota z interní hierarchie. |
PSC | string|null | 5 číslic, např. 12000 | PSČ je řetězec, aby se zachovaly případné úvodní nuly. |
latitude | number|null | WGS84, desetinné stupně | Zeměpisná šířka; podle soukromí může být posunutá nebo null. |
longitude | number|null | WGS84, desetinné stupně | Zeměpisná délka; podle soukromí může být posunutá nebo null. |
Odkazy a životní cyklus
| Pole | JSON typ | Hodnoty / formát | Význam |
URL | string | https://domonaut.cz/detail/ID | Kanónický detail nabídky na Domonautu. |
advert_code | string|null | DOMONAUT- + kód zakázky | Veřejně označené ID zakázky realitní kanceláře, pokud bylo dodané. |
youtube_url | string|null | HTTPS URL | Odkaz na video nabídky na YouTube, pokud jej zdroj dodal. |
is_reserved | integer | 1 rezervováno, 0 bez rezervace | Aktuální stav rezervace nabídky. |
created | string | YYYY-MM-DD | Datum vytvoření nabídky. |
updated | string|null | YYYY-MM-DD | Datum poslední změny nabídky. |
archived | string|null | YYYY-MM-DD | Datum archivace; null znamená aktuálně aktivní nabídku. |
titulniFoto | string|null | Absolutní HTTPS URL na JPG thumbnail | Ná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.
| Pole | JSON typ | Hodnoty / formát | Význam |
poplatky | integer|null | Celé Kč | Rozpoznané povinné opakované provozní poplatky. |
minPoplatky | integer|null | 1 nebo null | 1 značí minimální částku („od“, sazba za osobu nebo více variant); 0 se neposílá. |
kauce | integer|null | Celé Kč | Rozpoznaná kauce/jistota u pronájmu. |
provize | integer|null | Celé Kč; 0 = bez provize | Rozpoznaná konkrétní provize. |
anuita | integer|null | Celé Kč | Rozpoznaný celkový nesplacený zůstatek anuity. |
pets | integer|null | 1 povoleno, 0 zakázáno, null neuvedeno | Obecná vhodnost nabídky pro domácí mazlíčky. |
cats | integer|null | 1 povoleno, 0 zakázáno, null neuvedeno | Výslovná informace o kočkách. |
dogs | integer|null | 1 povoleno, 0 zakázáno, null neuvedeno | Výslovná informace o psech. |
students | integer|null | 1 vhodné, 0 nevhodné, null neuvedeno | Výslovná vhodnost pro studenty. |
sharedHousing | integer|null | 1 vhodné, 0 nevhodné, null neuvedeno | Výslovná vhodnost pro spolubydlení. |
shortTerm | integer|null | 1 krátkodobě možné, 0 pouze dlouhodobě, null neuvedeno | Možnost krátkodobého nájmu nebo ubytování. |
singles | integer|null | 1 vhodné, 0 nevhodné, null neuvedeno | Výslovná vhodnost pro jednotlivce. |
families | integer|null | 1 vhodné, 0 nevhodné, null neuvedeno | Vý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ód | Význam |
200 | Úspěch |
400 | Neplatný formát identifikace nebo parametry |
401 | Chybí e-mail v hlavičce X-Domonaut-Email |
403 | Blokovaná entita |
404 | Neexistující nabídka |
405 | Jiná metoda než GET |
429 | Překročený limit |
500 | Interní chyba |
Chyby mají vždy JSON tvar {"error":{"code":"…","message":"…"}}.
Poslední aktualizace 20. 8. 2026