Dokumentace Realitní pes API
Všechno, co potřebujete k napojení dat o realitním trhu: jak se přihlásit, kolik dotazů máte, jak stránkovat výsledky a co znamená každý parametr a každé pole.
Začínáme
Realitní pes API vrací data o nabídkách nemovitostí z celé České republiky. Stejnou nemovitost nabízenou víckrát slučujeme do jednoho záznamu, takže každý byt nebo dům v datech najdete jen jednou. API je jen pro čtení a vrací JSON.
Adresa API
https://api.realitni-pes.cz
Endpointy
První dotaz
- Přihlaste se a v nastavení účtu si vytvořte API token. API je v každém plánu, i v tom zdarma.
- Pošlete dotaz s tokenem v hlavičce
Authorization. Tenhle najde pět bytů 2+kk v Brně:
curl "https://api.realitni-pes.cz/v1/offers?type=apartment&arrangement=2%2Bkk&address=Brno&limit=5" \ -H "Authorization: Bearer VÁŠ_TOKEN"
Hotovo. Co dotaz vrátí a jaké další filtry máte k dispozici, najdete v referenci.
Autentizace
Každý dotaz na /v1 potřebuje API token. Token pošlete jedním ze tří způsobů:
| Způsob | Kdy ho použít |
|---|---|
Authorization: Bearer VÁŠ_TOKEN | Výchozí způsob. Funguje všude, kde můžete nastavit hlavičku. |
X-Api-Key: VÁŠ_TOKEN | Když nástroj hlavičku Authorization používá pro vlastní přihlášení, například konektory Claude. |
?token=VÁŠ_TOKEN | Jen když nástroj neumí poslat žádnou hlavičku. Adresa se ukládá do logů, takže takový token raději časem vyměňte. |
Když přijde token víckrát, vyhrává X-Api-Key, pak ?token= a nakonec Authorization. Hlavička Authorization je poslední, protože v ní může být přihlášení vašeho nástroje místo našeho tokenu. Zrušení tokenu nebo změna plánu se projeví do 60 sekund. Tokeny spravujete v nastavení účtu.
Limity a plány
Každý plán má měsíční počet dotazů. Počítá se každý dotaz s tokenem a limit sdílejí všechny vaše tokeny.
| Plán | Dotazů měsíčně | Historie |
|---|---|---|
| Čmuchal | 10 | Pouze aktuální nabídky |
| Hlídač | 100 | Pouze aktuální nabídky |
| Stopař | 500 | 3 měsíce |
| Smečka | 1 000 | 6 měsíců |
50 nabídek na dotaz. Proto je maximum nabídek padesátinásobek dotazů.
Obnova 1. dne v měsíci. Dotazy se počítají za kalendářní měsíc.
Žádné doplatky. Po vyčerpání limitu API odpoví chybou 429, dokud se limit neobnoví.
Naše chyby neplatíte. Dotaz, který skončí chybou na naší straně, se do limitu nepočítá.
Limit se obnovuje o půlnoci UTC prvního dne v měsíci. Kolik vám zbývá, řekne GET /v1/me a každá odpověď nese hlavičky X-RateLimit-Limit, X-RateLimit-Remaining a X-RateLimit-Reset. Víc dotazů nebo delší historii dostanete ve vyšším plánu.
Stránkování
Hledání vrací výsledky po stránkách, výchozí 25 a maximálně 50 nabídek na stránku (parametr limit). Další stránku dostanete tak, že hodnotu pagination.nextCursor pošlete zpátky jako parametr cursor se stejnými filtry. Když je pagination.hasMore rovno false, jste na konci. Kurzor neupravujte, jen ho předejte dál. Každá stránka je jeden dotaz.
API_URL = "https://api.realitni-pes.cz"
import requests
params = {"type": "apartment", "address": "Brno", "limit": 50}
headers = {"Authorization": "Bearer VÁŠ_TOKEN"}
offers = []
while True:
page = requests.get(f"{API_URL}/v1/offers", params=params, headers=headers).json()
offers += page["data"]
if not page["pagination"]["hasMore"]:
break
params["cursor"] = page["pagination"]["nextCursor"]Chyby
Každá chyba je JSON se stejným tvarem. Podle code se rozhodujte v kódu. message anglicky popíše, co je špatně a jak to opravit, takže ho můžete rovnou ukázat uživateli nebo předat AI agentovi. U chyby 400 vyjmenuje details každý chybný parametr a co přijímá. Hodnotu requestId (je i v hlavičce X-Request-Id) nám pošlete, když budete něco hlásit.
{
"error": {
"code": "invalid-request",
"message": "Invalid query parameter: arangement. Fix each one as described in \"details\" and retry; GET /openapi.json documents every accepted parameter.",
"details": [
{
"path": "arangement",
"message": "Unknown parameter \"arangement\". Remove it, or use one of the accepted parameters (names are case-sensitive): offerType, type, subtype, arrangement, …"
}
]
},
"requestId": "8c1e4b7a-2f90-4d3a-9b61-0e5f7c2d8a14"
}| code | HTTP | Význam |
|---|---|---|
unauthorized | 401 | Chybí token, nebo je neznámý či zrušený. |
forbidden | 403 | Token k tomuto dotazu nemá přístup. |
plan-limit-exceeded | 403 | Dotaz potřebuje vyšší plán, například historická data. |
not-found | 404 | Nabídka neexistuje, nebo je mimo historii vašeho plánu. |
invalid-request | 400 | Neplatný nebo neznámý parametr. details řekne, co který parametr přijímá. |
payload-too-large | 413 | Požadavek na MCP server je příliš velký. Posílejte jen filtry a dávku rozdělte. |
quota-exceeded | 429 | Došel měsíční limit dotazů. Obnoví se 1. dne dalšího měsíce. |
query-timeout | 504 | Hledání trvalo déle než 10 sekund. Zužte ho. Do limitu se nepočítá. |
internal-error | 500 | Chyba na naší straně. Do limitu se nepočítá. |
Reference
Všechny endpointy přijímají jen GET a vracejí JSON. Popis vychází přímo ze specifikace OpenAPI, se kterou API běží.
/v1/offersHledání nabídek
Vrátí deduplikované nabídky podle zadaných filtrů, od poslední změny po nejstarší. Bez includeInactive jen ty, které jsou pořád v nabídce. API přijme jen parametry uvedené níže. Neznámý nebo překlepnutý parametr odmítne chybou 400, která ho pojmenuje, takže překlep nikdy nevrátí nefiltrovaný výsledek.
Parametry
offerTypevýčetProdej, pronájem, výměna nebo dražba.
salerentexchangeauctiontypevýčetTyp nemovitosti.
apartmenthousecommercialotherlandsubtypevýčetPodrobnější typ v rámci type, například rodinný dům nebo kancelář.
familyvillacottageholidayplannedfarmhistoricalofficewarehouseproductionshopping_spaceaccommodationrestaurantagriculturalbuildinggarage_fullgarage_spacemobile_homewine_cellarattichousingcommercialmeadowforestfishpondorchardgardenotherarrangementvýčetDispozice, například 3+kk.
1+01+11+kk2+02+12+kk3+03+13+kk4+04+14+kk5+05+15+kk6+06+16+kk7+07+17+kk6++otherequipmentvýčetVybavení nemovitosti.
fullnonepartialownershipvýčetVlastnictví: osobní, družstevní, obecní, státní nebo jiné.
privatecommunallocalstateotherpropertyStatevýčetStav nemovitosti.
very_goodgoodbadin_constructionin_planningnewly_constructeddevelopment_projectbefore_renovationafter_renovationfor_demolitionbuildingTypevýčetTyp stavby.
brickpanelwoodecoskeletonmixassemblestonedistricttextPřesný název okresu nebo městské části, například Praha 5.
neighborhoodtextPřesný název čtvrti, například Smíchov.
latčísloZeměpisná šířka středu hledání. Posílá se spolu s lng.
lngčísloZeměpisná délka středu hledání. Posílá se spolu s lat.
addresstextAdresa, kolem které hledat. Na souřadnice ji převedeme za vás. Použijte ji místo lat a lng, ne s nimi.
radiusMetersčísloPoloměr hledání kolem středu v metrech. Bez něj hledáme do 2 000 m.
priceMin, priceMaxčísloCena v Kč od a do, včetně obou mezí. U pronájmu měsíční nájem.
livingAreaMin, livingAreaMaxčísloUžitná plocha v m² od a do, včetně obou mezí.
landAreaMin, landAreaMaxčísloPlocha pozemku v m² od a do, včetně obou mezí.
floorMin, floorMaxčísloPodlaží od a do, včetně obou mezí. 0 je přízemí.
floorCountMin, floorCountMaxčísloPočet podlaží budovy od a do, včetně obou mezí.
includeInactivetrue / falsevýchozí falsePřidá i nabídky, které už z trhu zmizely. Vyžaduje plán s historií, a jak daleko do minulosti vidíte, určuje plán.
limitcelé číslovýchozí 25nejvýše 50Počet nabídek na stránku.
cursortextHodnota pagination.nextCursor z předchozí stránky.
Příklad dotazu
curl "https://api.realitni-pes.cz/v1/offers?type=apartment&arrangement=2%2Bkk&address=Brno&limit=5" \ -H "Authorization: Bearer VÁŠ_TOKEN"
Příklad odpovědi
{
"data": [
{
"id": "9d41f7c0b2e8a3115c77de42",
"firstSeenAt": "2026-09-02T07:14:20.104Z",
"lastChangedAt": "2026-09-16T11:48:03.771Z",
"isLive": true,
"location": {
"lat": 49.199,
"lng": 16.623
},
"title": "Prodej bytu 2+kk 48 m²",
"city": "Brno",
"neighborhood": "Zábrdovice",
"type": "apartment",
"offerType": "sale",
"arrangement": "2+kk",
"priceTotal": 4690000,
"livingArea": 48,
"floor": 3,
"balcony": true,
"elevator": true
}
],
"pagination": {
"limit": 5,
"count": 5,
"hasMore": true,
"nextCursor": "eyJ0IjoiMjAyNi0wOS0xNiJ9"
}
}Odpovědi
Stránka nabídek.
Neplatný nebo neznámý parametr. Pole details vyjmenuje každý z nich.
Chybí token, nebo je neznámý či zrušený.
Dotaz vyžaduje vyšší plán, například kvůli historickým datům.
Vyčerpaný měsíční limit dotazů.
Hledání běželo déle než 10 sekund a bylo zastaveno. Zpráva poradí, jak ho zúžit. Do limitu se nepočítá.
/v1/offers/{offerId}Detail nabídky
Všechno o jedné nemovitosti: všechny inzeráty, ze kterých je složená, a vývoj ceny v čase.
Parametry
offerIdtextpovinnýHodnota id z výsledku hledání.
Příklad dotazu
curl "https://api.realitni-pes.cz/v1/offers/9d41f7c0b2e8a3115c77de42" \ -H "Authorization: Bearer VÁŠ_TOKEN"
Příklad odpovědi
{
"id": "9d41f7c0b2e8a3115c77de42",
"firstSeenAt": "2026-09-02T07:14:20.104Z",
"lastChangedAt": "2026-09-16T11:48:03.771Z",
"isLive": true,
"location": {
"lat": 49.199,
"lng": 16.623
},
"title": "Prodej bytu 2+kk 48 m²",
"city": "Brno",
"neighborhood": "Zábrdovice",
"type": "apartment",
"offerType": "sale",
"arrangement": "2+kk",
"priceTotal": 4690000,
"livingArea": 48,
"floor": 3,
"balcony": true,
"elevator": true,
"portalLinks": [
{
"offerId": "a17c",
"siteId": "site-a",
"url": "https://…",
"isLive": true,
"firstSeenAt": "2026-09-02T07:14:20.104Z"
},
{
"offerId": "b52e",
"siteId": "site-b",
"url": "https://…",
"isLive": true,
"firstSeenAt": "2026-09-04T16:02:51.337Z"
}
],
"priceHistory": [
{
"offerId": "a17c",
"siteId": "site-a",
"points": [
{
"at": "2026-09-02T07:14:20.104Z",
"priceTotal": 4890000
},
{
"at": "2026-09-16T11:48:03.771Z",
"priceTotal": 4690000
}
]
}
]
}Odpovědi
Nabídka.
Endpoint nepřijímá žádné query parametry.
Chybí token, nebo je neznámý či zrušený.
Nabídka neexistuje, nebo je starší, než kam sahá historie vašeho plánu.
Vyčerpaný měsíční limit dotazů.
/v1/meToken, plán a limit
K jakému plánu token patří a kolik dotazů vám tento měsíc zbývá.
Příklad dotazu
curl "https://api.realitni-pes.cz/v1/me" \ -H "Authorization: Bearer VÁŠ_TOKEN"
Příklad odpovědi
{
"token": {
"id": "66f1c2a9e4b0d3a1c8f7e210",
"prefix": "rp_live_4f8a"
},
"plan": {
"id": "proV2",
"name": "Stopař",
"requestsPerMonth": 500,
"historyMonths": 3
},
"usage": {
"month": "2026-09",
"requestsUsed": 42,
"requestsRemaining": 458,
"resetsAt": "2026-10-01T00:00:00.000Z"
}
}Odpovědi
Stav tokenu a limitu.
Endpoint nepřijímá žádné query parametry.
Chybí token, nebo je neznámý či zrušený.
/healthbez tokenuStav služby
Kontrola, že API běží. Nepotřebuje token a do limitu se nepočítá.
Příklad dotazu
curl "https://api.realitni-pes.cz/health"
Příklad odpovědi
{
"status": "ok"
}Odpovědi
Služba běží.
Některá z databází je nedostupná.
Pole nabídky
Každá nabídka v data i detail z GET /v1/offers/{offerId} mají stejná pole. Detail má navíc portalLinks a priceHistory. Pole označená „vždy“ má každá nabídka. Ostatní v odpovědi chybí, když je žádný inzerát neuvedl. Pole typu true / false jsou vždy true nebo false, nikdy text jako „Ano“.
idtextvždyStálé id nabídky. Použijte ho v GET /v1/offers/{offerId}.
firstSeenAtdatum a časvždyKdy se nemovitost poprvé objevila v nabídce.
lastChangedAtdatum a časvždyKdy se naposledy změnil kterýkoli z jejích inzerátů. Podle toho jsou seřazené výsledky hledání.
isLivetrue / falsevždyJestli ji aspoň jeden inzerát pořád nabízí. Hodnotu false vrací jen hledání s includeInactive a detail.
locationobjektvždymůže být nullSouřadnice { "lat", "lng" }, nebo null, když polohu žádný inzerát neuvedl.
titletextTitulek inzerátu, česky.
descriptiontextCelý text inzerátu, česky.
citytextObec, například Praha nebo Brno.
streettextUlice bez čísla popisného.
regiontextKraj, například Moravskoslezský.
neighborhoodtextČást obce nebo čtvrť, například Praha 3 nebo Vinohrady.
districttextOkres, například Hlavní město Praha nebo Brno-město.
postalCodetextPSČ, obvykle s mezerou, například 708 00.
addresstextAdresa, jak byla zveřejněná, například Bořivojova, Praha 3. Přesnost se liší inzerát od inzerátu.
unitNumbertextČíslo bytu nebo jednotky, pokud ho inzerát uvádí. To je vzácné.
typevýčetTyp nemovitosti.
apartmenthousecommercialotherlandsubtypevýčetPodrobnější typ, například rodinný dům (family) nebo kancelář (office).
familyvillacottageholidayplannedfarmhistoricalofficewarehouseproductionshopping_spaceaccommodationrestaurantagriculturalbuildinggarage_fullgarage_spacemobile_homewine_cellarattichousingcommercialmeadowforestfishpondorchardgardenotherofferTypevýčetProdej, pronájem, výměna nebo dražba.
salerentexchangeauctionarrangementvýčetDispozice: 2+kk jsou dva pokoje s kuchyňským koutem, 3+1 tři pokoje a samostatná kuchyně.
1+01+11+kk2+02+12+kk3+03+13+kk4+04+14+kk5+05+15+kk6+06+16+kk7+07+17+kk6++otherpropertyStatevýčetStav nemovitosti.
very_goodgoodbadin_constructionin_planningnewly_constructeddevelopment_projectbefore_renovationafter_renovationfor_demolitionownershipvýčetVlastnictví: private (osobní), communal (družstevní), local (obecní), state (státní) nebo other.
privatecommunallocalstateotherbuildingTypevýčetTyp stavby.
brickpanelwoodecoskeletonmixassemblestonepriceTotalčísloCena v Kč. U prodeje celková, u pronájmu měsíční.
livingAreačísloUžitná plocha v m².
landAreačísloPlocha pozemku v m².
floorčísloPodlaží, ve kterém jednotka je. 0 je přízemí, záporné číslo je pod zemí.
floorCountčísloPočet podlaží budovy.
equipmentvýčetVybavení nemovitosti.
fullnonepartialgardentrue / falseJestli má zahradu.
gardenAreačísloPlocha zahrady v m².
storagetrue / falseJestli má sklep nebo komoru.
storageAreačísloPlocha sklepa nebo komory v m².
balconytrue / falseJestli má balkon.
balconyAreačísloPlocha balkonu v m².
loggiatrue / falseJestli má lodžii.
loggiaAreačísloPlocha lodžie v m².
terracetrue / falseJestli má terasu.
terraceAreačísloPlocha terasy v m².
garagetrue / falseJestli má garáž.
garageAreačísloPlocha garáže v m².
energyClasstextEnergetická třída, jak byla zveřejněná. Obvykle písmeno A až G, někdy s českým popisem.
heatingSourcetextZdroj vytápění. Známé hodnoty: gas, electric, solid, solid-fuel, combined, heat-pump a other.
heatingTypetextZpůsob vytápění. Známé hodnoty: communal (ústřední) a local (lokální).
seweragetextOdpad. Známé hodnoty: communal (veřejná kanalizace) a septic-tank (jímka).
elevatortrue / falseJestli má výtah.
parkingtrue / falseJestli má parkování.
barrierFreetrue / falseJestli má bezbariérový přístup.
swimmingPooltrue / falseJestli má bazén.
housePositiontextPoloha domu vůči sousedním. Známé hodnoty: free_standing (samostatný), terraced (řadový) a semi_detached (dvojdům).
portalLinksseznam (objekt)jen v detailuVšechny inzeráty, ze kterých je nemovitost složená. U každého offerId, siteId, url, isLive a firstSeenAt.
priceHistoryseznam (objekt)jen v detailuVývoj ceny, jedna řada za každý zdroj, od nejstaršího bodu. Zdroje se v ceně často liší, proto řady neslučujeme.
Používáte AI asistenta?
Nemusíte psát kód. Připojte asistenta na náš MCP server a ptejte se na realitní trh vlastními slovy. Používá stejný token i stejný limit dotazů.
Připojit MCP