ARES API: REST rozhraní, příklady kódu a limity
ARES API je veřejné REST rozhraní Ministerstva financí, které podle IČO vrací v JSON údaje o firmách, OSVČ a dalších ekonomických subjektech — název, sídlo, právní formu, DIČ, činnosti podle CZ-NACE i data z veřejného a živnostenského rejstříku. Je zdarma, bez registrace a bez API klíče, volat ho jde i přímo z prohlížeče a jediným omezením je limit 500 dotazů za minutu. Většině aplikací stačí jediný endpoint — firma podle IČO —, který si můžete hned vyzkoušet. Návod vychází z denního provozu ARES.CZ: ukázky kódu spuštěné proti živému ARES, chybové kódy, nástrahy a převod ze starého XML rozhraní.
Vyzkoušejte ARES API živě: zadejte IČO a vyberte endpoint. Dotaz odešle váš prohlížeč přímo na ares.gov.cz (ARES.CZ ho nepřeposílá ani neukládá) a odpověď v JSON se zobrazí níže v části Základní endpoint.
Endpointy ARES API: základní a další
Všechny endpointy mají společný základ adresy https://ares.gov.cz/ekonomicke-subjekty-v-be/rest a odpovídají v JSON. Základní je GET /ekonomicke-subjekty/{ico}: souhrnné údaje o subjektu ze všech registrů. Pro předvyplnění odběratele nebo kontrolu dodavatele obvykle stačí jen on, a proto ho návod rozebírá do detailu. Další endpointy hledají podle jiných kritérií, hlídají změny, nebo vracejí data jednoho konkrétního registru — ARES jim říká pohledy a mají stejnou URL s příponou registru (například -vr pro veřejný rejstřík). U nich odkazujeme rovnou na oficiální dokumentaci ve Swagger UI (verze rozhraní 1.4.0).
| Endpoint | K čemu | Dokumentace |
|---|---|---|
| Základní | ||
GET /ekonomicke-subjekty/{ico} | firma podle IČO: název, sídlo, právní forma, DIČ, CZ-NACE, datum vzniku a zániku, stav ve všech registrech | podrobně níže · Swagger |
| Další | ||
POST /ekonomicke-subjekty/vyhledat | hledání podle názvu, sídla, právní formy nebo CZ-NACE; dávka až 100 IČO jedním dotazem | krátce níže · Swagger |
POST /ekonomicke-subjekty-notifikace/vyhledatGET /ekonomicke-subjekty-notifikace/datovy-zdroj/{zdroj}/cislo-davky/{cislo} | hlídání změn: seznam notifikačních dávek a obsah jedné dávky (která IČO se změnila) | krátce níže · Swagger: seznam · dávka |
GET /ekonomicke-subjekty-vr/{ico} | pohled veřejný rejstřík: spisová značka, statutární orgány, společníci a akcionáři, základní kapitál, předmět činnosti, celá historie zápisů | krátce níže · Swagger |
GET /ekonomicke-subjekty-rzp/{ico} | pohled živnostenský rejstřík: živnosti s předmětem podnikání, oborem a provozovnami | Swagger |
GET /ekonomicke-subjekty-res/{ico} | pohled statistický registr ČSÚ: převažující činnost CZ-NACE, institucionální sektor, kategorie počtu zaměstnanců | Swagger |
GET /ekonomicke-subjekty-ros/{ico} | pohled základní registr osob | Swagger |
-nrpzs, -rpsh, -rcns, -szr, -rs, -ceu + /{ico} | oborové pohledy: poskytovatelé zdravotních služeb, politické strany a hnutí, církve, zemědělci, školy, centrální evidence úpadců | NRPZS · RPSH · RCNS · SZR · RS · CEU |
POST /ciselniky-nazevniky/vyhledat | názvy kódů — právní formy, finanční úřady, CZ-NACE a další | krátce níže · Swagger |
POST /standardizovane-adresy/vyhledat | převod textové adresy na standardizovanou adresu RÚIAN s kódem adresního místa | Swagger |
Každý pohled má vedle GET …/{ico} i hledání POST …/vyhledat (například POST /ekonomicke-subjekty-vr/vyhledat) — parametry najdete ve Swagger UI u daného pohledu. Celý popis rozhraní: Swagger UI, strojově OpenAPI.
Základní endpoint: firma podle IČO
GET https://ares.gov.cz/ekonomicke-subjekty-v-be/rest/ekonomicke-subjekty/{ico} vrátí souhrnné údaje o jednom subjektu — firmě, OSVČ, úřadu nebo spolku. IČO musí mít vždy 8 číslic (kratší doplňte nulami zleva: 177041 → 00177041). Nepotřebujete klíč ani zvláštní hlavičky.
Vyzkoušet živě: odpověď ARES
Zadejte IČO do formuláře na začátku stránky — dotaz odejde z vašeho prohlížeče přímo do ARES a odpověď v JSON se zobrazí tady, i s dobou odezvy a příkazem curl. Formulář umí kromě základního endpointu i pohledy VR, RŽP a RES.
Volání z kódu
Ukázky načtou Škoda Auto a.s. (IČO 00177041) a vypíšou název a adresu sídla; funkce v PHP, Pythonu a JavaScriptu vrátí pro neexistující IČO prázdnou hodnotu místo chyby. Tlačítko „Vyzkoušet živě" vyplní stejné IČO do formuláře nahoře.
curl -s "https://ares.gov.cz/ekonomicke-subjekty-v-be/rest/ekonomicke-subjekty/00177041"<?php
function aresSubjekt(string $ico): ?array
{
// ARES chce přesně 8 číslic: 177041 → 00177041
$ico = str_pad(preg_replace('/\D/', '', $ico), 8, '0', STR_PAD_LEFT);
$url = 'https://ares.gov.cz/ekonomicke-subjekty-v-be/rest/ekonomicke-subjekty/' . $ico;
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10,
CURLOPT_HTTPHEADER => ['Accept: application/json'],
]);
$body = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
if ($code === 404) {
return null; // subjekt v ARES není
}
if ($body === false || $code !== 200) {
throw new RuntimeException("ARES vrátil HTTP $code");
}
return json_decode($body, true, 512, JSON_THROW_ON_ERROR);
}
$firma = aresSubjekt('177041');
echo $firma['obchodniJmeno'], ' – ', $firma['sidlo']['textovaAdresa'], PHP_EOL;import requests
ARES = "https://ares.gov.cz/ekonomicke-subjekty-v-be/rest"
def ares_subjekt(ico: str) -> dict | None:
ico = "".join(c for c in ico if c.isdigit()).zfill(8) # 177041 → 00177041
r = requests.get(f"{ARES}/ekonomicke-subjekty/{ico}", timeout=10)
if r.status_code == 404:
return None # subjekt v ARES není
r.raise_for_status()
return r.json()
firma = ares_subjekt("177041")
print(firma["obchodniJmeno"], "–", firma["sidlo"]["textovaAdresa"])async function aresSubjekt(ico) {
ico = String(ico).replace(/\D/g, '').padStart(8, '0'); // 177041 → 00177041
const res = await fetch(
`https://ares.gov.cz/ekonomicke-subjekty-v-be/rest/ekonomicke-subjekty/${ico}`,
{ headers: { Accept: 'application/json' } }
);
if (res.status === 404) return null; // subjekt v ARES není
if (!res.ok) throw new Error(`ARES vrátil HTTP ${res.status}`);
return res.json();
}
const firma = await aresSubjekt('177041');
console.log(firma.obchodniJmeno, '–', firma.sidlo.textovaAdresa);PHP ukázka potřebuje rozšíření curl, Python knihovnu requests a verzi 3.10 nebo novější, JavaScript běží v prohlížeči i v Node.js 18+.
Co základní endpoint vrací
Odpověď je JSON objekt. Tady je zkrácená skutečná odpověď pro Škoda Auto (zachycená 1. 10. 2026, vynechané části označuje „…"):
{
"ico": "00177041",
"obchodniJmeno": "Škoda Auto a.s.",
"sidlo": {
"kodStatu": "CZ",
"kodObce": 535419,
"nazevObce": "Mladá Boleslav",
"nazevUlice": "tř. Václava Klementa",
"cisloDomovni": 869,
"psc": 29301,
"kodAdresnihoMista": 21249407,
"textovaAdresa": "tř. Václava Klementa 869, Mladá Boleslav II, 29301 Mladá Boleslav"
},
"pravniForma": "121",
"financniUrad": "013",
"datumVzniku": "1990-11-20",
"datumAktualizace": "2026-09-16",
"dic": "CZ00177041",
"czNace": ["70200", "471", "77110", "…"],
"seznamRegistraci": {
"stavZdrojeVr": "AKTIVNI",
"stavZdrojeRes": "AKTIVNI",
"stavZdrojeRzp": "AKTIVNI",
"stavZdrojeDph": "AKTIVNI",
"stavZdrojeIr": "NEEXISTUJICI",
"…": "…"
},
"primarniZdroj": "ros",
"dalsiUdaje": ["…"]
}| Pole | Význam |
|---|---|
ico, obchodniJmeno | IČO (8 číslic, jako řetězec) a aktuální obchodní jméno |
sidlo | strukturovaná adresa sídla; textovaAdresa je hotový řetězec k zobrazení (třeba na fakturu), kodObce a kodAdresnihoMista jsou kódy RÚIAN |
pravniForma | kód právní formy (121 = akciová společnost, 112 = s.r.o., 101 = OSVČ); názvy vrátí číselník |
financniUrad | kód místně příslušného finančního úřadu |
datumVzniku, datumZaniku, datumAktualizace | vznik, případný zánik a poslední změna záznamu v ARES (formát RRRR-MM-DD); datumZaniku u aktivních subjektů chybí |
dic | DIČ, pokud je subjekt registrovaný k DPH (spolehlivost plátce ARES nevrací) |
czNace | seznam kódů činností podle CZ-NACE |
seznamRegistraci | stav v jednotlivých registrech: AKTIVNI, ZANIKLY, NEEXISTUJICI — podle něj poznáte, který pohled má smysl volat |
primarniZdroj | registr, ze kterého ARES vzal souhrnné údaje (například ros = základní registr osob) |
dalsiUdaje | údaje z jednotlivých zdrojových registrů (datovyZdroj), mohou se od souhrnu lišit — pro běžné použití berte souhrnná pole výše |
Kódy (právní forma, finanční úřad, CZ-NACE) převedete na názvy endpointem číselníků POST /ciselniky-nazevniky/vyhledat. Číselníky se mění zřídka — stáhněte je jednou a uložte, ať se na ně neptáte u každé firmy:
curl -s -X POST "https://ares.gov.cz/ekonomicke-subjekty-v-be/rest/ciselniky-nazevniky/vyhledat" \
-H "Content-Type: application/json" \
-d '{"kodCiselniku": "PravniForma", "zdrojCiselniku": "res"}'Kontrola IČO před dotazem
IČO má kontrolní číslici počítanou modulo 11. ARES ji neověřuje: osmimístné číslo s chybným součtem nevrátí chybu vstupu, ale 404 „subjekt nenalezen". Kontrolou před dotazem odfiltrujete překlepy a neposíláte do ARES dotazy, které nemohou uspět — podmínky provozu opakované chybné dotazy uvádějí jako důvod k omezení přístupu.
<?php
// Kontrola IČO (modulo 11) – ARES ji nedělá, neplatné číslo vrátí jako 404.
function icoPlatne(string $ico): bool
{
$ico = str_pad(preg_replace('/\D/', '', $ico), 8, '0', STR_PAD_LEFT);
if (strlen($ico) !== 8) {
return false;
}
$soucet = 0;
for ($i = 0; $i < 7; $i++) {
$soucet += (int) $ico[$i] * (8 - $i);
}
return (11 - $soucet % 11) % 10 === (int) $ico[7];
}
var_dump(icoPlatne('00177041')); // bool(true)
var_dump(icoPlatne('12345678')); // bool(false)def ico_platne(ico: str) -> bool:
"""Kontrola IČO (modulo 11) – ARES ji nedělá, neplatné číslo vrátí jako 404."""
ico = "".join(c for c in ico if c.isdigit()).zfill(8)
if len(ico) != 8:
return False
soucet = sum(int(ico[i]) * (8 - i) for i in range(7))
return (11 - soucet % 11) % 10 == int(ico[7])
print(ico_platne("00177041")) # True
print(ico_platne("12345678")) # False// Kontrola IČO (modulo 11) – ARES ji nedělá, neplatné číslo vrátí jako 404.
function icoPlatne(ico) {
ico = String(ico).replace(/\D/g, '').padStart(8, '0');
if (ico.length !== 8) return false;
let soucet = 0;
for (let i = 0; i < 7; i++) soucet += Number(ico[i]) * (8 - i);
return (11 - (soucet % 11)) % 10 === Number(ico[7]);
}
console.log(icoPlatne('00177041')); // true
console.log(icoPlatne('12345678')); // falseChyby a jak na ně reagovat
Chyby vrací ARES u všech endpointů stejně: JSON se třemi poli kod (skupina), popis (lidsky čitelný text, části oddělené svislítkem) a subKod (konkrétní důvod). Programově se rozhodujte podle subKod, ne podle textu:
{
"kod": "NENALEZENO",
"popis": "Nebyl nalezen žádný subjekt, který by odpovídal zadaným hodnotám. Upravte parametry vyhledávání.|Záznam nenalezen",
"subKod": "VYSTUP_SUBJEKT_NENALEZEN"
}| HTTP | subKod | Kdy nastane | Co dělat |
|---|---|---|---|
| 400 | VSTUP_NEVALIDNI_FORMAT_ICO | IČO nemá přesně 8 číslic (třeba 177041 nebo text) | doplnit nuly zleva, odstranit mezery |
| 404 | VYSTUP_SUBJEKT_NENALEZEN | IČO v ARES není (i při chybném kontrolním součtu) | zobrazit „nenalezeno", výsledek uložit do cache |
| 500 | — (kod: OBECNA_CHYBA) | chyba na straně ARES | zopakovat s prodlevou |
Na chyby 5xx a vypršení času reagujte opakováním s prodlužující se prodlevou (1 s, 2 s, 4 s) a po několika neúspěších dotaz vzdejte. Výsledek 404 je platná odpověď — uložte ho do cache stejně jako nalezený subjekt, ať se na neexistující IČO neptáte znovu. Chyby hledání a dávek jsou u hledání.
Další endpointy
Tři situace, na které základní endpoint nestačí: hledání bez IČO nebo hromadné načtení, hlídání změn a podrobné údaje z jednoho registru. U každé shrnujeme, co endpoint dělá a na co si dát pozor; parametry a schéma odpovědí najdete ve Swagger UI.
Hledání a dávka až 100 IČO: POST /ekonomicke-subjekty/vyhledat
Pro hledání podle názvu, sídla nebo dalších kritérií pošlete JSON tělo. Výsledky se stránkují parametry start (posun) a pocet (velikost stránky, výchozí je 20); odpověď obsahuje pocetCelkem a pole ekonomickeSubjekty se stejnými objekty, jaké vrací základní endpoint. Kódy obcí a ulic jsou kódy RÚIAN — obec sídla zjistíte třeba ze sidlo.kodObce libovolné firmy v dané obci. Všechna kritéria: Swagger UI.
curl -s -X POST "https://ares.gov.cz/ekonomicke-subjekty-v-be/rest/ekonomicke-subjekty/vyhledat" \
-H "Content-Type: application/json" \
-d '{"obchodniJmeno": "Škoda Auto", "sidlo": {"kodObce": 535419}, "start": 0, "pocet": 10}'<?php
$dotaz = [
'obchodniJmeno' => 'Škoda Auto',
'sidlo' => ['kodObce' => 535419], // Mladá Boleslav (kód obce z RÚIAN)
'start' => 0,
'pocet' => 10,
];
$ch = curl_init('https://ares.gov.cz/ekonomicke-subjekty-v-be/rest/ekonomicke-subjekty/vyhledat');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode($dotaz, JSON_UNESCAPED_UNICODE),
]);
$data = json_decode(curl_exec($ch), true);
if (($data['subKod'] ?? '') === 'VYSTUP_PRILIS_MNOHO_VYSLEDKU') {
exit("Víc než 1000 výsledků – zužte dotaz\n");
}
echo "Nalezeno: {$data['pocetCelkem']}\n";
foreach ($data['ekonomickeSubjekty'] as $s) {
echo $s['ico'], ' ', $s['obchodniJmeno'], PHP_EOL;
}import requests
dotaz = {
"obchodniJmeno": "Škoda Auto",
"sidlo": {"kodObce": 535419}, # Mladá Boleslav (kód obce z RÚIAN)
"start": 0,
"pocet": 10,
}
r = requests.post(
"https://ares.gov.cz/ekonomicke-subjekty-v-be/rest/ekonomicke-subjekty/vyhledat",
json=dotaz, timeout=10,
)
data = r.json()
if data.get("subKod") == "VYSTUP_PRILIS_MNOHO_VYSLEDKU":
raise SystemExit("Víc než 1000 výsledků – zužte dotaz")
r.raise_for_status()
print("Nalezeno:", data["pocetCelkem"])
for s in data["ekonomickeSubjekty"]:
print(s["ico"], s["obchodniJmeno"])const res = await fetch(
'https://ares.gov.cz/ekonomicke-subjekty-v-be/rest/ekonomicke-subjekty/vyhledat',
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
obchodniJmeno: 'Škoda Auto',
sidlo: { kodObce: 535419 }, // Mladá Boleslav (kód obce z RÚIAN)
start: 0,
pocet: 10,
}),
}
);
const data = await res.json();
if (data.subKod === 'VYSTUP_PRILIS_MNOHO_VYSLEDKU') {
throw new Error('Víc než 1000 výsledků – zužte dotaz');
}
console.log('Nalezeno:', data.pocetCelkem);
for (const s of data.ekonomickeSubjekty) console.log(s.ico, s.obchodniJmeno);Dávka až 100 IČO: když potřebujete údaje o známém seznamu firem, nepošlete sto dotazů na /ekonomicke-subjekty/{ico}, ale jeden dotaz s polem ico. Nezapomeňte nastavit pocet, jinak dostanete jen prvních 20; IČO, která ARES nezná, v odpovědi prostě chybí.
import requests
URL = "https://ares.gov.cz/ekonomicke-subjekty-v-be/rest/ekonomicke-subjekty/vyhledat"
def ares_davka(ica: list[str]) -> dict[str, dict]:
"""Až 100 IČO jedním dotazem (víc ARES odmítne s VSTUP_PRILIS_MNOHO_HODNOT)."""
vysledek = {}
for i in range(0, len(ica), 100):
kus = [ico.zfill(8) for ico in ica[i:i + 100]]
r = requests.post(URL, json={"ico": kus, "pocet": 100}, timeout=20)
r.raise_for_status()
for s in r.json().get("ekonomickeSubjekty", []):
vysledek[s["ico"]] = s
return vysledek # IČO, která chybí, ARES nezná
firmy = ares_davka(["00177041", "00006947"])
for ico, s in firmy.items():
print(ico, s["obchodniJmeno"])curl -s -X POST "https://ares.gov.cz/ekonomicke-subjekty-v-be/rest/ekonomicke-subjekty/vyhledat" \
-H "Content-Type: application/json" \
-d '{"ico": ["00177041", "00006947"], "pocet": 100}'- Strop 1 000 výsledků: pokud dotazu odpovídá víc subjektů, ARES nevrátí ani první stránku, ale chybu 400
VYSTUP_PRILIS_MNOHO_VYSLEDKUs celkovým počtem v textu (například „2 866"). Dotaz je potřeba zúžit obcí, právní formou nebo CZ-NACE; pro práci s celým registrem použijte otevřená data. - Víc než 100 IČO v jednom dotazu ARES odmítne s chybou 400
VSTUP_PRILIS_MNOHO_HODNOT— rozdělte je do dávek po 100. - Hledání podle adresy. Filtr
sidlo.kodAdresnihoMistaARES ignoruje a dotaz bez jiného kritéria skončí chybou 400VSTUP_PRAZDNY. Firmy na stejné adrese najdete přes obec a ulici, nebo podlesidlo.textovaAdresa, a výsledky pak dofiltrujte podle kódu adresního místa. - Kódování těla. Tělo musí být v UTF-8 (platí pro všechny
POSTendpointy). Na Windows (Git Bash, starší PowerShell) se diakritika z příkazové řádky snadno odešle v jiném kódování a ARES odpoví 500JSON parse error: Invalid UTF-8. Pošlete tělo ze souboru uloženého v UTF-8 (curl --data-binary @dotaz.json) nebo použijte knihovnu, která JSON kóduje sama.
Hlídání změn: notifikační dávky
Pokud potřebujete vědět, že se u sledovaných firem něco změnilo, neptejte se ARES na každou z nich každý den. ARES průběžně vydává notifikační dávky — seznamy IČO, u kterých se v daném registru změnil záznam, s typem změny INS (nový), UPD (změna) nebo DEL (výmaz). Seznam dávek vrátí POST /ekonomicke-subjekty-notifikace/vyhledat (Swagger), obsah jedné dávky GET …/datovy-zdroj/{zdroj}/cislo-davky/{cislo} (Swagger). Dávky existují pro veřejný rejstřík (vr), RES, registr osob, živnostenský rejstřík a další zdroje; za září 2026 jich ARES pro veřejný rejstřík vydal 26, každá se stovkami až tisíci změn.
# 1) Seznam dávek změn ve veřejném rejstříku (zhruba za poslední měsíc)
curl -s -X POST "https://ares.gov.cz/ekonomicke-subjekty-v-be/rest/ekonomicke-subjekty-notifikace/vyhledat" \
-H "Content-Type: application/json" \
-d '{"datovyZdroj": "vr"}'
# 2) Obsah jedné dávky: seznam IČO a typ změny (INS / UPD / DEL)
curl -s "https://ares.gov.cz/ekonomicke-subjekty-v-be/rest/ekonomicke-subjekty-notifikace/datovy-zdroj/vr/cislo-davky/738"import requests
B = "https://ares.gov.cz/ekonomicke-subjekty-v-be/rest/ekonomicke-subjekty-notifikace"
SLEDUJI = {"00177041", "00006947"} # IČO, která vás zajímají
posledni_zpracovana = 737 # číslo dávky si ukládejte mezi běhy
davky = requests.post(f"{B}/vyhledat", json={"datovyZdroj": "vr"}, timeout=10).json()
for d in davky["notifikacniDavky"]:
if d["cisloDavky"] <= posledni_zpracovana:
continue
obsah = requests.get(f"{B}/datovy-zdroj/vr/cislo-davky/{d['cisloDavky']}", timeout=20).json()
for zmena in obsah["seznamNotifikaci"]:
if zmena["icoId"] in SLEDUJI:
print(d["datumUvolneniDavky"], zmena["typZmeny"], zmena["icoId"])
posledni_zpracovana = d["cisloDavky"]Seznam dávek sahá zhruba měsíc zpět, takže je potřeba je stahovat pravidelně a pamatovat si číslo poslední zpracované dávky. U IČO, která se objeví v dávce a sledujete je, pak načtete čerstvá data základním endpointem.
Pohledy registrů: VR, RŽP, RES a další
Pohled vrací údaje z jednoho registru v jeho vlastní, podrobnější struktuře — ne v té, kterou popisujeme u základního endpointu. Volá se stejně, GET /ekonomicke-subjekty-{registr}/{ico}. Který má smysl volat, poznáte podle seznamRegistraci v odpovědi základního endpointu: pro registr, ve kterém subjekt není, vrátí pohled 404 VYSTUP_SUBJEKT_NENALEZEN. Pohledy VR, RŽP a RES si můžete vyzkoušet ve formuláři nahoře; schéma odpovědí je ve Swagger UI (VR, RŽP, RES). Nejčastěji se používá veřejný rejstřík, který má pár nástrah:
- Historie místo aktuálního stavu. Pohled VR vrací většinu údajů jako pole verzí
[{"datumZapisu", "datumVymazu", "hodnota"}]. Aktuální je záznam bezdatumVymazu— nebrat automaticky první prvek pole. - Čísla jako text se středníkem. Částky (například základní kapitál) přicházejí jako řetězec
"13129700000;00", kde středník je desetinná čárka. U podílů typuZLOMEKale"51;100"znamená zlomek 51/100. Parsujte podle typu, ne jedním pravidlem. - Osobní údaje. U fyzických osob ve statutárních orgánech a mezi společníky vrací pohled VR jméno, datum narození a adresu. Pokud je ukládáte nebo zobrazujete, řiďte se GDPR — ARES.CZ z nich například ukazuje jen jméno a obec.
- Zahraniční osoby bez IČO. Zahraniční právnické osoby mezi společníky nebo akcionáři IČO nemají — počítejte s chybějícím polem
ico.
Limity a podmínky provozu
Platí pro všechny endpointy dohromady. Podmínky provozu ARES dovolují Ministerstvu financí omezit nebo zablokovat přístup uživateli, který pošle víc než 500 dotazů za minutu. Denní strop REST API nemá. Stejně tak může přístup omezit při:
- opakovaném posílání stejných dotazů nebo dotazů s chybně vyplněnými údaji,
- velkém počtu souběžných automatizovaných dotazů,
- obcházení limitu dotazy z více IP adres,
- automatickém prohledávání databáze náhodnými údaji,
- pokusech o narušení bezpečnosti serveru.
ARES neposílá hlavičky se zbývajícím limitem (X-RateLimit-*) ani Retry-After, hlídat se musíte sami. Odpověď na jednoduchý dotaz trvá obvykle 0,15–0,35 s. Doporučujeme držet se zhruba poloviny limitu a výsledky ukládat do cache — identifikační údaje firem se mění zřídka a na změny upozorní notifikační dávky.
„60 000 dotazů denně" už neplatí. Tento často citovaný limit patřil starému XML rozhraní (10 000 dotazů ve dne a 50 000 v noci). Pro REST API rozhoduje jen minutový práh a chování popsané výše.
Změny verzí API. Ministerstvo financí ohlašuje změny v changelogu a RSS. Verze 1.4.0 (30. 9. 2026) například zrušila pole statniObcanstvi u fyzických osob ve VR a přidala clenstvi u společného podílu. Čtěte pole defenzivně a neznámá ignorujte.
Migrace ze starého XML ARES (wwwinfo.mfcr.cz)
Původní XML služby ARES na adrese wwwinfo.mfcr.cz/cgi-bin/ares/… skončily a doména dnes vůbec neodpovídá. Pokud účetní program, e-shop nebo skript přestal načítat údaje o firmách, nejspíš volá právě je. Převodní tabulka podle archivní dokumentace XML služeb:
| Starý XML skript | Účel | Náhrada v REST API |
|---|---|---|
darv_std.cgi, darv_bas.cgi | identifikační údaje, základní výpis z více registrů | GET /ekonomicke-subjekty/{ico} |
darv_reg.cgi | seznam registrací subjektu | seznamRegistraci v GET /ekonomicke-subjekty/{ico} |
darv_or.cgi, darv_vr.cgi, darv_vreo.cgi | výpis a elektronický opis veřejného rejstříku | GET /ekonomicke-subjekty-vr/{ico} |
darv_rzp.cgi | živnostenský rejstřík | GET /ekonomicke-subjekty-rzp/{ico} |
darv_res.cgi | statistický registr RES | GET /ekonomicke-subjekty-res/{ico} |
darv_cns.cgi, darv_psh.cgi, darv_sko.cgi | církve, politické strany, školy | -rcns, -rpsh, -rs + /{ico} |
darv_rzz.cgi, darv_szr.cgi, darv_ceu.cgi | zdravotní služby, zemědělci, evidence úpadců | -nrpzs, -szr, -ceu + /{ico} |
ares_es.cgi | přehled (hledání) ekonomických subjektů | POST /ekonomicke-subjekty/vyhledat |
darv_adr.cgi | standardizovaná adresa | POST /standardizovane-adresy/vyhledat |
darv_zm.cgi | přehled změn ekonomických subjektů | POST /ekonomicke-subjekty-notifikace/vyhledat |
xar.cgi (POST, až 100 dotazů) | hromadné dotazy | POST /ekonomicke-subjekty/vyhledat s polem ico (až 100) |
Hlavní rozdíly: místo XML se jmennými prostory dostanete JSON, IČO musí mít vždy 8 číslic, adresa je ve strukturovaném objektu sidlo s kódy RÚIAN a místo denního limitu platí minutový práh. Starou adresu typu wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi?ico=27074358 tedy nahradí ares.gov.cz/ekonomicke-subjekty-v-be/rest/ekonomicke-subjekty/27074358.
Co ARES API neobsahuje
Dnešní REST API odpovídá v JSON a obor činnosti vrací jako kódy CZ-NACE (pohled RES i převažující činnost) i s kategorií počtu zaměstnanců. Některé údaje ale ve veřejných registrech nejsou, a proto je nenajdete ani v ARES:
- Finanční údaje (obrat, zisk) — české firmy je zakládají do sbírky listin jako PDF, strojově čitelné API pro ně neexistuje. Slovenské účtovné závierky nabízí RegisterUZ.
- Kontakty (telefon, e-mail, web) ani datovou schránku — ARES je nevrací.
- Spolehlivost plátce DPH a bankovní účty — jsou v registru plátců DPH (ADISREG), ne v ARES.
- Insolvence a exekuce v detailu — insolvenční řízení najdete v ISIR, exekuce v placené Centrální evidenci exekucí.
- Garance dostupnosti — ARES je státní služba bez smlouvy o úrovni služeb (SLA). Kdo potřebuje garantovanou dostupnost, kontakty nebo finance v jednom rozhraní, sáhne po komerčních poskytovatelích, kteří data z registrů agregují.
Časté otázky k ARES API
Je ARES API zdarma a potřebuje registraci?
Ano, je zdarma a bez registrace i bez API klíče. Stačí poslat HTTPS dotaz na ares.gov.cz/ekonomicke-subjekty-v-be/rest. Používání se řídí podmínkami provozu ARES, které omezují hlavně počet a povahu dotazů.
Jaký je limit dotazů do ARES API?
Podmínky provozu ARES dovolují Ministerstvu financí omezit nebo zablokovat uživatele, který pošle víc než 500 dotazů za minutu. Denní strop REST API nemá. Často citovaných „60 000 dotazů denně" platilo pro staré XML rozhraní, které skončilo. Blokovat lze i opakování stejných dotazů nebo prohledávání náhodnými IČO.
Proč ARES vrací chybu 400 pro existující IČO?
IČO musí mít přesně 8 číslic. Číslo bez úvodních nul (například 177041) ARES odmítne s kódem VSTUP_NEVALIDNI_FORMAT_ICO; doplňte nuly zleva na 00177041. Kontrolní součet IČO ARES neověřuje — neplatné, ale osmimístné číslo vrátí 404 VYSTUP_SUBJEKT_NENALEZEN.
Jak v ARES API najít firmu podle názvu?
Pošlete POST /ekonomicke-subjekty/vyhledat s polem obchodniJmeno. Když dotazu odpovídá víc než 1 000 subjektů, ARES nevrátí nic a ohlásí VYSTUP_PRILIS_MNOHO_VYSLEDKU — dotaz zužte třeba obcí sídla (sidlo.kodObce), právní formou nebo CZ-NACE. Výchozí stránka má 20 záznamů, další načtete parametry start a pocet.
Funguje ještě XML ARES na wwwinfo.mfcr.cz?
Nefunguje. Staré XML služby (darv_bas.cgi, darv_res.cgi, ares_es.cgi a další) skončily a doména wwwinfo.mfcr.cz už neodpovídá. Integrace je potřeba převést na REST API — převodní tabulku starých skriptů na nové endpointy najdete v sekci Migrace ze starého XML ARES na této stránce.
Jak hlídat změny firem bez neustálého dotazování?
ARES zveřejňuje notifikační dávky: průběžně vydávané seznamy IČO, u kterých se v daném registru (například ve veřejném rejstříku) něco změnilo, s typem změny INS, UPD nebo DEL. Stáhněte novou dávku a znovu načtěte jen IČO, která sledujete. Ušetříte dotazy a nepřekročíte limit. Seznam dávek sahá zhruba měsíc zpět, stahujte je proto pravidelně.
Lze ARES API volat přímo z prohlížeče?
Ano. ARES vrací hlavičku Access-Control-Allow-Origin: *, takže fetch() z JavaScriptu funguje bez proxy (ověřeno 1. 10. 2026). Na tom stojí i náš nástroj Vyzkoušet ARES API na začátku této stránky. U aplikace s větším provozem ale dotazy veďte přes server s cache, ať zbytečně nezatěžujete ARES.
Související návody a zdroje
- API veřejných registrů — přehled ARES, ADISREG, VIES, ISIR, slovenských registrů a otevřených dat
- Vyhledávání v ARES podle IČO a DIČ — stejná data bez programování
- Obchodní rejstřík a živnostenský rejstřík — co obsahují a jak v nich hledat
Oficiální zdroje: Swagger UI ARES · Podmínky provozu ARES · Changelog API · Technická dokumentace ARES (PDF)
Nejznámější firmy v ARES.CZ
- Škoda Auto a.s.
- ČEZ, a. s.
- Česká spořitelna, a.s.
- Komerční banka, a.s.
- Československá obchodní banka, a. s.
- MONETA Money Bank, a.s.
- Fio banka, a.s.
- O2 Czech Republic a.s.
- T-Mobile Czech Republic a.s.
- Vodafone Czech Republic a.s.
- Lidl Česká republika s.r.o.
- Kaufland Česká republika v.o.s.
- Tesco Stores ČR a.s.
- Albert Česká republika, s.r.o.
- Alza.cz a.s.
- VELKÁ PECKA s.r.o.
- IKEA Česká republika, s.r.o.
- Česká pošta, s.p.
- České dráhy, a.s.
- Seznam.cz, a.s.