WebHouse API – návod pre zákazníkov
Tento návod vás krok za krokom prevedie od vytvorenia prístupového kľúča až po čítanie údajov o vašich doménach, hostingoch a e-mailových schránkach. Nepotrebujete byť programátor: všetky príkazy sa dajú skopírovať a spustiť, pri každom je vidieť, čo vráti a čo jednotlivé údaje znamenajú.
1. Čo je API a na čo ho použijete
API je spôsob, ako si vaše programy môžu z WebHouse automaticky prečítať to, čo bežne vidíte v Setupe: zoznam domén, dátumy expirácie, ceny predĺženia, obsadenosť hostingu či veľkosť e-mailových schránok.
Typické použitie:
- upozornenie do firemného chatu, keď sa blíži expirácia domény,
- prehľad obsadenosti hostingu vo vlastnom dashboarde,
- pravidelný export zoznamu domén do tabuľky alebo do interného systému,
- kontrola, či niektorá schránka nemá plnú kvótu.
Tri veci, ktoré treba vedieť hneď na začiatku
| Vlastnosť | Čo to znamená pre vás |
|---|---|
| Iba čítanie | API nič nemení a nič neobjednáva. Nemôžete ním omylom zrušiť ani predĺžiť službu. |
| Iba váš účet | Token je naviazaný na jeden zákaznícky účet. Cudzie údaje sa cez neho nedajú zobraziť. |
| Iba zo servera | Token patrí na server alebo do skriptu, nikdy do webovej stránky, prehliadača či mobilnej aplikácie. |
Malý slovníček
| Pojem | Vysvetlenie |
|---|---|
| Token | Dlhý tajný reťazec, ktorý funguje ako heslo pre program. Začína sa wh_live_. |
| Endpoint | Jedna „adresa“ API, napríklad /v1/domains. Každá vracia iný druh údajov. |
| JSON | Textový formát odpovede. Údaje sú v ňom v pároch "názov": hodnota. |
| Hlavička (header) | Doplnková informácia pri požiadavke. Token posielate v hlavičke Authorization. |
| curl | Program v príkazovom riadku, ktorým sa dá zavolať API bez písania kódu. Je súčasťou Windows 10/11, macOS aj Linuxu. |
| Scope (oprávnenie) | Určuje, ktoré údaje smie token čítať. Napríklad domains:read = zoznam domén. |
Základná adresa API je vždy: https://api.webhouse.sk/v1
2. Vytvorenie tokenu krok za krokom
- Prihláste sa do Setupu na setup.webhouse.sk tým istým prístupom, aký používate na správu služieb.
- Otvorte „Môj setup → API tokeny“. Ak položku nevidíte, váš používateľ nemá prístup k tejto časti účtu. Požiadajte kolegu, ktorý účet spravuje.
- Kliknite na „Vytvoriť token“ a vyplňte formulár:
Pole Čo doň napísať Názov Podľa použitia, napríklad Monitoring expirácií. Pomôže vám neskôr zistiť, ktorý token kam patrí.Oprávnenia Zaškrtnite iba to, čo integrácia naozaj potrebuje (tabuľka nižšie). Platnosť do Najviac 1 rok. Odporúčame 90 dní a token pravidelne obnovovať. Povolené IP adresy Verejná IP servera, z ktorého budete API volať. Ak ju uvediete, token z inej adresy nebude fungovať ani v prípade, že sa dostane k cudzej osobe. Obmedzenie na služby Voliteľné. Token potom uvidí iba vybrané domény alebo hostingy. - Potvrďte heslom do Setupu, prípadne aj kódom dvojfaktorového overenia.
- Skopírujte token a bezpečne ho uložte. Zobrazí sa iba raz. WebHouse ho neukladá v čitateľnej podobe a nedokáže vám ho ukázať znova. Ak ho stratíte, vytvoríte si nový.
Token vyzerá takto:
wh_live_5ka6jgzcluyfshei_6744zeiy7yd4d5f4wxtlaiuwukxegsuwuraaek775frugcpnynqq
Prvá časť wh_live_5ka6jgzcluyfshei je verejné označenie tokenu, ktoré uvidíte aj v zozname v Setupe.
Zvyšok je tajná časť, ktorú nikomu neposielajte.
Prehľad oprávnení
| Oprávnenie | Sprístupní | Potrebujete, ak chcete… |
|---|---|---|
account:read | Základné údaje účtu a informácie o tokene | overiť, že token funguje |
services:read | Spoločný zoznam všetkých služieb | jeden prehľad domén aj hostingov |
domains:read | Domény, expirácie, stav, nameservery | sledovať expirácie domén |
domains:pricing | Ceny predĺženia domén | vedieť, koľko bude predĺženie stáť |
hosting:read | Hostingy, ich limity, domény a databázy | prehľad hostingových služieb |
usage:read | Obsadenosť a kvóty | sledovať zaplnenie priestoru |
mail-domains:read | Súhrny e-mailových domén | prehľad e-mailu bez konkrétnych adries |
mailboxes:read | Citlivé: konkrétne e-mailové adresy a ich obsadenosť | zoznam schránok a ich zaplnenie |
Tip: Token nikdy nemá viac práv než používateľ, ktorý ho vytvoril. Ak tento používateľ stratí prístup k účtu alebo ho zablokujeme, token okamžite prestane fungovať.
Bezpečnosť tokenu
- Uložte ho do premennej prostredia alebo do správcu hesiel, nie priamo do zdrojového kódu.
- Nikdy ho nevkladajte do webovej stránky, JavaScriptu v prehliadači, mobilnej aplikácie ani do verejného repozitára.
- Posielajte ho výhradne v hlavičke
Authorization. API token v adrese ani vo formulári neprijme. - Pri podozrení na únik token okamžite zrušte v Setupe (prestane fungovať ihneď) a vytvorte nový.
- Na výmenu bez výpadku použite funkciu Rotovať: vznikne nový token a starý ešte 24 alebo 72 hodín funguje.
O vytvorení a zrušení tokenu aj o podozrivom použití (nová sieť, nepovolená IP, nesprávna tajná časť) vás informujeme e-mailom.
3. Prvé volanie
Najjednoduchšie je vyskúšať API cez curl v príkazovom riadku. Token si najprv uložte do premennej,
aby ste ho nemuseli stále vypisovať (a aby neostal v histórii príkazov).
Linux a macOS
read -s T # vloží token bez toho, aby sa zobrazil
curl -sS https://api.webhouse.sk/v1/account -H "Authorization: Bearer $T"
Windows (PowerShell)
$T = Read-Host "Token" -AsSecureString
$plain = [Runtime.InteropServices.Marshal]::PtrToStringAuto(
[Runtime.InteropServices.Marshal]::SecureStringToBSTR($T))
curl.exe -sS https://api.webhouse.sk/v1/account -H "Authorization: Bearer $plain"
Ak všetko sedí, uvidíte odpoveď podobnú tejto:
{"data":{"id":"acc_01J7Y3M8KD6QTX0000000000ZZ","name":"Firma s.r.o.","customer_number":"12345",
"currency":"EUR","vat_mode":"standard","tax_rate_percent":"23.00","token":{"id":"5ka6jgzcluyfshei",
"name":"Monitoring expirácií","scopes":["account:read","domains:read"],"restricted_to_services":false,
"expires_at":"2026-12-18T09:00:00Z"}},"meta":{"generated_at":"2026-09-20T08:10:07Z"}}
Odpoveď je jeden dlhý riadok. Ak máte nainštalovaný program jq, pridajte na koniec
príkazu | jq a odpoveď sa pekne odsadí. Vo Windows môžete odpoveď skopírovať napríklad do
jsonformatter.org.
Dostali ste chybu?
401 Unauthorized– token je nesprávne skopírovaný, zrušený, expirovaný alebo voláte z nepovolenej IP adresy.403 Insufficient token scope– tokenu chýba potrebné oprávnenie, doplňte ho v Setupe.- Viac v časti Chyby a čo s nimi.
4. Ako čítať odpoveď
Každá úspešná odpoveď má rovnakú štruktúru. Vaše údaje sú vždy v časti data:
{
"data": [ … tu sú samotné údaje … ],
"pagination": { "next_cursor": "eyJ2Ijox…", "has_more": true, "limit": 50 },
"meta": { "generated_at": "2026-09-20T08:10:07Z" }
}
| Časť | Význam |
|---|---|
data | Samotný výsledok. Pri zozname je to pole objektov, pri detaile jeden objekt. |
pagination | Iba pri zoznamoch. Hovorí, či existuje ďalšia stránka – viď Stránkovanie. |
meta.generated_at | Čas, kedy API odpoveď zostavilo (v UTC). |
Prázdny zoznam vyzerá takto a nie je to chyba – znamená, že taká služba u vás nie je, prípadne ju token nevidí:
{"data":[],"pagination":{"next_cursor":null,"has_more":false,"limit":50},"meta":{…}}
/account – údaje o účte a tokene
GET /v1/account
Potrebné oprávnenie: account:read
Najlepší spôsob, ako overiť, že token funguje a aké má oprávnenia.
curl -sS https://api.webhouse.sk/v1/account -H "Authorization: Bearer $T"
{
"data": {
"id": "acc_01J7Y3M8KD6QTX0000000000ZZ",
"name": "Firma s.r.o.",
"customer_number": "12345",
"currency": "EUR",
"vat_mode": "standard",
"tax_rate_percent": "23.00",
"token": {
"id": "5ka6jgzcluyfshei",
"name": "Monitoring expirácií",
"scopes": ["account:read", "domains:read"],
"restricted_to_services": false,
"expires_at": "2026-12-18T09:00:00Z"
}
},
"meta": { "generated_at": "2026-09-20T08:10:07Z" }
}
| Pole | Význam |
|---|---|
id | Identifikátor účtu v API (začína acc_). |
name | Názov účtu, teda vaša firma alebo meno. |
customer_number | Zákaznícke číslo, aké vidíte v Setupe a na faktúrach. |
currency | Mena cenníka účtu, napríklad EUR. |
vat_mode | Daňový režim: standard (bežná DPH), reverse_charge (prenesená daňová povinnosť), destination_country (daň krajiny príjemcu). |
tax_rate_percent | Sadzba dane v percentách, napríklad "23.00". |
token.id | Verejné označenie tokenu. Nie je tajné, hodí sa pri komunikácii s podporou. |
token.name | Názov, ktorý ste tokenu dali pri vytvorení. |
token.scopes | Oprávnenia, ktoré token skutočne má. Ak používateľ medzitým stratil nejaké právo, zoznam bude kratší, než ste zadali. |
token.restricted_to_services | true = token vidí iba vybrané služby, nie celý účet. |
token.expires_at | Dátum a čas expirácie tokenu (UTC). Potom prestane fungovať. |
/services – všetky služby v jednom zozname
GET /v1/services GET /v1/services/{service_id}
Potrebné oprávnenie: services:read
Spoločný prehľad domén aj hostingov. Hodí sa, keď chcete jednu tabuľku so všetkým, čo máte objednané.
curl -sS "https://api.webhouse.sk/v1/services?type=domain&limit=200" -H "Authorization: Bearer $T"
{
"data": [
{ "id": "srv_01J7Y4PKR81MDQ0000000000AB", "type": "domain", "name": "example.sk",
"status": "active", "paid_until": "2027-04-12", "auto_renew": true,
"resource_id": "dom_01J7Y4PKR81MDQ0000000000AB" },
{ "id": "srv_01J7Y55HDA9NRP0000000000CD", "type": "hosting", "name": "Hosting Business",
"status": "active", "paid_until": "2027-01-31", "auto_renew": true,
"resource_id": "hst_01J7Y55HDA9NRP0000000000CD" }
],
"pagination": { "next_cursor": null, "has_more": false, "limit": 200 },
"meta": { "generated_at": "2026-09-20T08:10:07Z" }
}
| Pole | Význam |
|---|---|
id | Identifikátor služby (srv_…). Týmto sa token obmedzuje na vybrané služby. |
type | domain alebo hosting. |
name | Názov domény alebo hostingu. |
status | active, expired, pending_registration, external, suspended – vysvetlenie v časti Spoločné pojmy. |
paid_until | Dátum, do ktorého je služba zaplatená. null = nevieme určiť. |
auto_renew | true = predlžuje sa automaticky. |
resource_id | Identifikátor tej istej služby v jej vlastnej sekcii: dom_… pre domény, hst_… pre hostingy. Cez neho získate detail. |
Voliteľné filtre: type=domain|hosting, status=active|expired|…,
limit (1 – 200) a cursor.
/domains – zoznam domén
GET /v1/domains
Potrebné oprávnenie: domains:read
# všetky domény, najviac 200 naraz
curl -sS "https://api.webhouse.sk/v1/domains?limit=200" -H "Authorization: Bearer $T"
# domény, ktoré expirujú do konca roka a nepredlžujú sa automaticky
curl -sS "https://api.webhouse.sk/v1/domains?expires_before=2026-12-31&auto_renew=false&sort=expires_on" \
-H "Authorization: Bearer $T"
{
"data": [
{
"id": "dom_01J7Y4PKR81MDQ0000000000AB",
"service_id": "srv_01J7Y4PKR81MDQ0000000000AB",
"name": "example.sk",
"name_ascii": "example.sk",
"status": "active",
"managed_by_webhouse": true,
"registered_on": null,
"expires_on": "2027-04-12",
"renewal_deadline_at": "2027-04-11T21:59:59Z",
"paid_until": "2027-04-12",
"renewable": true,
"auto_renew": true,
"hosting_service_id": "hst_01J7Y55HDA9NRP0000000000CD",
"updated_at": "2026-09-18T16:30:00Z"
}
],
"pagination": { "next_cursor": null, "has_more": false, "limit": 200 },
"meta": { "generated_at": "2026-09-20T08:10:07Z" }
}
| Pole | Význam |
|---|---|
id | Identifikátor domény (dom_…). Používa sa v ďalších volaniach. |
service_id | Tá istá doména v zozname služieb (/v1/services). |
name | Názov domény v bežnom tvare, vrátane diakritiky pri IDN doménach (príklad.sk). |
name_ascii | Technický tvar bez diakritiky (xn--prklad-4va.sk). Pri bežných doménach je rovnaký ako name. |
status | active = registrovaná a platná, expired = expirovala, pending_registration = objednaná, registrácia ešte neprebehla, external = nie je u nás v správe. |
managed_by_webhouse | true = doménu spravuje WebHouse; false = je u iného registrátora. |
registered_on | Vo verzii 1 je vždy null, dátum registrácie zatiaľ neposkytujeme. |
expires_on | Dátum, kedy doméne končí registrácia v registri. |
renewal_deadline_at | Termín, dokedy treba predĺženie uhradiť, aby sa stihlo bezpečne spracovať. Je skorší než expires_on. |
paid_until | Dátum, do ktorého je doména zaplatená. |
renewable | true = doménu je možné teraz predĺžiť a poznáme jej cenu. |
auto_renew | true = predĺženie sa uhrádza automaticky (z kreditu alebo bez faktúry). |
hosting_service_id | Hosting, na ktorom doména beží, alebo null. |
updated_at | Kedy sa údaj o doméne naposledy zmenil. |
Filtre a triedenie
| Parameter | Hodnoty | Príklad |
|---|---|---|
status | active, expired, pending_registration, external | ?status=expired |
expires_before | Dátum RRRR-MM-DD, vrátane | ?expires_before=2026-12-31 |
expires_after | Dátum RRRR-MM-DD, vrátane | ?expires_after=2026-10-01 |
auto_renew | true alebo false | ?auto_renew=false |
hosting_service_id | hst_… | ?hosting_service_id=hst_01J7Y… |
sort | name, -name, expires_on, -expires_on (- = zostupne) | ?sort=expires_on |
Detail jednej domény
GET /v1/domains/{domain_id}
Potrebné oprávnenie: domains:read
curl -sS https://api.webhouse.sk/v1/domains/dom_01J7Y4PKR81MDQ0000000000AB \
-H "Authorization: Bearer $T"
Vráti rovnaké polia ako zoznam, len pre jednu doménu (v data je objekt, nie pole).
Cena predĺženia domény
GET /v1/domains/{domain_id}/renewal-options
Potrebné oprávnenia: domains:read a domains:pricing
curl -sS https://api.webhouse.sk/v1/domains/dom_01J7Y4PKR81MDQ0000000000AB/renewal-options \
-H "Authorization: Bearer $T"
{
"data": [
{
"period_months": 12,
"currency": "EUR",
"net_amount": "12.00",
"tax_amount": "2.76",
"gross_amount": "14.76",
"tax_rate_percent": "23.00",
"price_as_of": "2026-09-18T16:40:00Z",
"valid_until": "2026-09-19T16:40:00Z",
"is_premium": false,
"is_binding_quote": false
}
],
"meta": { "generated_at": "2026-09-20T08:10:07Z" }
}
| Pole | Význam |
|---|---|
period_months | Na koľko mesiacov sa doména predĺži, zvyčajne 12. |
currency | Mena ceny, podľa cenníka vášho účtu. |
net_amount | Cena bez dane, napríklad "12.00" = 12,00 EUR. |
tax_amount | Suma dane. |
gross_amount | Cena s daňou, teda to, čo zaplatíte. |
tax_rate_percent | Použitá sadzba dane v percentách. |
price_as_of | Kedy bola cena vypočítaná. |
valid_until | Dokedy je uvedená cena orientačne platná. |
is_premium | true pri prémiových doménach s neštandardnou cenou. |
is_binding_quote | Vždy false. Záväzná je suma na zálohovej faktúre. |
Ceny sú textové reťazce, nie čísla. Je to zámerné: "17.10" sa takto prenesie presne,
kým ako číslo by sa z neho stalo 17.1 a pri sčítavaní by vznikali haliere navyše. V PHP použite
bcadd(), v JavaScripte počítajte v centoch alebo použite knižnicu na desatinné čísla.
Ak sa doména práve nedá predĺžiť, dostanete prázdny zoznam "data": []. Ak ju predĺžiť možno, ale
cena ešte nie je pripravená, vráti sa chyba 503 data-unavailable. Cena sa nikdy neodhaduje ani
neuvádza ako nula.
Nameservery domény
GET /v1/domains/{domain_id}/nameservers
Potrebné oprávnenie: domains:read
{
"data": {
"domain_id": "dom_01J7Y4PKR81MDQ0000000000AB",
"nameservers": ["ns1.webhouse.sk", "ns2.webhouse.sk"],
"measured_at": "2026-09-20T03:00:00Z",
"data_status": "fresh"
},
"meta": { "generated_at": "2026-09-20T08:10:07Z" }
}
Ide o hodnoty zistené z registra, ktoré pravidelne obnovujeme. measured_at hovorí, kedy sme ich
naposledy úspešne načítali, a data_status ukazuje, nakoľko sú aktuálne – viď Spoločné pojmy.
/hosting-services – hostingové služby
GET /v1/hosting-services
Potrebné oprávnenie: hosting:read
curl -sS https://api.webhouse.sk/v1/hosting-services -H "Authorization: Bearer $T"
{
"data": [
{ "id": "hst_01J7Y55HDA9NRP0000000000CD", "service_id": "srv_01J7Y55HDA9NRP0000000000CD",
"name": "Hosting Business", "plan_code": "business", "status": "active",
"paid_until": "2027-01-31", "auto_renew": true }
],
"pagination": { "next_cursor": null, "has_more": false, "limit": 50 },
"meta": { "generated_at": "2026-09-20T08:10:07Z" }
}
| Pole | Význam |
|---|---|
id | Identifikátor hostingu (hst_…). |
service_id | Ten istý hosting v zozname služieb. |
name | Názov hostingu, ako ho vidíte v Setupe. |
plan_code | Označenie programu, napríklad business. |
status | active alebo suspended (pozastavený). |
paid_until | Dokedy je hosting zaplatený. |
auto_renew | true = predlžuje sa automaticky. |
Voliteľný filter status=active|suspended.
Detail hostingu s limitmi
GET /v1/hosting-services/{hosting_id}
Potrebné oprávnenie: hosting:read; časť usage sa pridá iba s usage:read
{
"data": {
"id": "hst_01J7Y55HDA9NRP0000000000CD",
"service_id": "srv_01J7Y55HDA9NRP0000000000CD",
"name": "Hosting Business",
"plan_code": "business",
"status": "active",
"paid_until": "2027-01-31",
"auto_renew": true,
"php_versions_available": ["8.3", "8.4", "8.5"],
"limits": { "storage_bytes": 107374182400, "mail_storage_bytes": 10737418240,
"mailboxes": 100, "databases": 20, "domains": 25 },
"usage": { "storage_bytes": 38449283072, "mailboxes": 34, "databases": 8, "domains": 12,
"measured_at": "2026-09-18T16:35:12Z", "data_status": "fresh" }
},
"meta": { "generated_at": "2026-09-20T08:10:07Z" }
}
| Pole | Význam |
|---|---|
php_versions_available | Verzie PHP, ktoré sa na tomto hostingu dajú nastaviť. |
limits.storage_bytes | Celkový priestor podľa programu, v bajtoch. 107374182400 = 100 GB. null = bez limitu. |
limits.mail_storage_bytes | Priestor vyhradený pre e-mail, v bajtoch. |
limits.mailboxes | Maximálny počet e-mailových schránok. |
limits.databases | Maximálny počet databáz. |
limits.domains | Maximálny počet domén na hostingu. |
usage.storage_bytes | Aktuálne využitý priestor v bajtoch. |
usage.mailboxes, usage.databases, usage.domains | Koľko ich reálne máte. |
usage.measured_at | Kedy sme obsadenosť naposledy merali. |
usage.data_status | fresh, stale alebo unavailable. |
Podrobná obsadenosť hostingu
GET /v1/hosting-services/{hosting_id}/usage
Potrebné oprávnenia: hosting:read a usage:read
{
"data": {
"hosting_service_id": "hst_01J7Y55HDA9NRP0000000000CD",
"storage": { "used_bytes": 38449283072, "quota_bytes": 107374182400, "usage_percent": "35.81" },
"breakdown": {
"web": { "used_bytes": 21474836480, "measured_at": "2026-09-19T02:10:00Z", "data_status": "fresh" },
"databases": { "used_bytes": 4294967296, "measured_at": "2026-09-18T02:10:00Z", "data_status": "stale" },
"mail": { "used_bytes": 12679479296, "measured_at": "2026-09-20T07:00:00Z", "data_status": "fresh" }
},
"mailboxes": { "used": 34, "limit": 100 },
"databases": { "used": 8, "limit": 20 },
"domains": { "used": 12, "limit": 25 },
"measured_at": "2026-09-18T02:10:00Z",
"data_status": "stale"
},
"meta": { "generated_at": "2026-09-20T08:10:07Z" }
}
| Pole | Význam |
|---|---|
storage.used_bytes | Súčet web + databázy + e-mail v bajtoch. |
storage.quota_bytes | Povolený priestor podľa programu. |
storage.usage_percent | Percento zaplnenia ako reťazec, napríklad "35.81". |
breakdown.web | Veľkosť webových súborov. |
breakdown.databases | Veľkosť databáz. |
breakdown.mail | Veľkosť e-mailových schránok. |
mailboxes, databases, domains | Dvojica used (koľko máte) a limit (koľko môžete mať). |
measured_at | Najstarší čas merania spomedzi zložiek – teda odkedy je údaj v najhoršom prípade. |
data_status | Súhrnný stav aktuálnosti za celý hosting. |
Ak sa niektorú zložku nikdy nepodarilo zmerať, celkový súčet je null
a data_status je unavailable. Nikdy nedostanete neúplný súčet, ktorý by vyzeral ako
správne číslo.
Domény priradené k hostingu
GET /v1/hosting-services/{hosting_id}/domains
Potrebné oprávnenie: hosting:read
{
"data": [
{ "id": "dom_01J7Y4PKR81MDQ0000000000AB", "name": "example.sk",
"name_ascii": "example.sk", "status": "active" }
],
"pagination": { "next_cursor": null, "has_more": false, "limit": 50 },
"meta": { "generated_at": "2026-09-20T08:10:07Z" }
}
Skrátený tvar domény. Úplný detail získate cez /v1/domains/{id}.
Databázy hostingu
GET /v1/hosting-services/{hosting_id}/databases
Potrebné oprávnenie: hosting:read; veľkosti iba s usage:read
{
"data": [
{ "id": "hdb_01J7YB2C4X5K9P0000000000MN", "name": "example_web", "engine": "mysql",
"size_bytes": 1073741824, "measured_at": "2026-09-18T02:10:00Z", "data_status": "stale" }
],
"pagination": { "next_cursor": null, "has_more": false, "limit": 50 },
"meta": { "generated_at": "2026-09-20T08:10:07Z" }
}
| Pole | Význam |
|---|---|
id | Identifikátor databázy (hdb_…). |
name | Názov databázy. |
engine | mysql alebo postgresql. |
size_bytes | Veľkosť v bajtoch. Zobrazí sa iba s oprávnením usage:read. |
Prihlasovacie údaje k databázam ani názvy serverov API nikdy nevracia.
/mail-domains – e-mailové domény
GET /v1/mail-domains GET /v1/mail-domains/{mail_domain_id}
Potrebné oprávnenie: mail-domains:read; časť usage iba s usage:read
E-mailová doména je nezávislá od registrácie domény. Doménu môžete mať registrovanú u nás a e-mail inde, alebo naopak. V tomto zozname sú iba domény, ktorým e-mail prevádzkuje WebHouse.
{
"data": [
{
"id": "mld_01J7Y8W97N83CY0000000000GH",
"name": "example.sk",
"name_ascii": "example.sk",
"status": "active",
"domain_id": "dom_01J7Y4PKR81MDQ0000000000AB",
"hosting_service_id": "hst_01J7Y55HDA9NRP0000000000CD",
"mailboxes_count": 12,
"quota_bytes": 10737418240,
"usage": { "mail_domain_id": "mld_01J7Y8W97N83CY0000000000GH",
"used_bytes": 4294967296, "quota_bytes": 10737418240,
"usage_percent": "40.00", "mailboxes_count": 12,
"measured_at": "2026-09-20T07:00:00Z", "data_status": "fresh" }
}
],
"pagination": { "next_cursor": null, "has_more": false, "limit": 50 },
"meta": { "generated_at": "2026-09-20T08:10:07Z" }
}
| Pole | Význam |
|---|---|
id | Identifikátor e-mailovej domény (mld_…). |
name / name_ascii | Názov domény v bežnom a technickom tvare. |
status | active = funguje, disabled = vypnutá, incoming_blocked = prichádzajúca pošta je blokovaná (zvyčajne po prekročení kvóty). |
domain_id | Prepojenie na registrovanú doménu, alebo null, ak doménu nemáte registrovanú u nás. |
hosting_service_id | Hosting, pod ktorý e-mail patrí, alebo null. |
mailboxes_count | Počet schránok v doméne. |
quota_bytes | Kvóta celej domény v bajtoch; null = doménová kvóta nie je nastavená. |
usage | Obsadenosť – rovnaké polia ako pri /usage nižšie. |
Obsadenosť jednej e-mailovej domény
GET /v1/mail-domains/{mail_domain_id}/usage
Potrebné oprávnenia: mail-domains:read a usage:read
| Pole | Význam |
|---|---|
used_bytes | Koľko miesta zaberajú všetky schránky domény. |
quota_bytes | Kvóta domény, ak je nastavená. |
usage_percent | Percento zaplnenia ako reťazec. |
mailboxes_count | Počet schránok. |
measured_at a data_status | Kedy sme merali a nakoľko je údaj aktuálny. |
Súhrn e-mailu za celý účet
GET /v1/mail-usage
Potrebné oprávnenia: mail-domains:read a usage:read
{
"data": { "mail_domains_count": 3, "mailboxes_count": 27, "used_bytes": 9663676416,
"measured_at": "2026-09-20T07:00:00Z", "data_status": "fresh" },
"meta": { "generated_at": "2026-09-20T08:10:07Z" }
}
Jedno volanie namiesto prechádzania všetkých domén. Pre tento endpoint platí prísnejší limit počtu volaní.
Schránky a ich obsadenosť
GET /v1/mail-domains/{mail_domain_id}/mailboxes GET /v1/mailboxes/{mailbox_id}
Potrebné oprávnenia: mail-domains:read a mailboxes:read (citlivé)
{
"data": [
{ "id": "mbx_01J7YMRTK7EJAW0000000000EF",
"mail_domain_id": "mld_01J7Y8W97N83CY0000000000GH",
"address": "info@example.sk",
"status": "active",
"used_bytes": 2147483648,
"quota_bytes": 5368709120,
"usage_percent": "40.00",
"measured_at": "2026-09-18T16:30:00Z",
"data_status": "fresh" }
],
"pagination": { "next_cursor": null, "has_more": false, "limit": 50 },
"meta": { "generated_at": "2026-09-20T08:10:07Z" }
}
| Pole | Význam |
|---|---|
address | Celá e-mailová adresa. |
status | active alebo disabled (vypnutá schránka). |
used_bytes | Koľko miesta schránka zaberá. |
quota_bytes | Kvóta schránky; null = bez obmedzenia. |
usage_percent | Percento zaplnenia; null, ak kvóta nie je nastavená. |
Oprávnenie mailboxes:read sprístupní konkrétne e-mailové adresy, čo sú osobné
údaje. Prideľujte ho iba integráciám, ktoré ich naozaj potrebujú.
Spoločné pojmy a jednotky
Aktuálnosť údajov: measured_at a data_status
Obsadenosť nemeriame pri každom volaní, ale pravidelne na pozadí. Preto pri každej takej hodnote nájdete čas merania a stav aktuálnosti:
data_status | Význam | Ako to čítať |
|---|---|---|
fresh | Čerstvé, úspešné meranie | Hodnota je aktuálna. |
stale | Posledná známa hodnota | Meranie je staršie alebo posledný pokus zlyhal. Hodnota platila v čase measured_at. |
unavailable | Nikdy sme nemerali | Hodnota je null. Nepovažujte ju za nulu. |
Dôležité pravidlo: ak meranie zlyhá, nikdy nevrátime nulu. Buď dostanete poslednú
známu hodnotu označenú ako stale, alebo null so stavom unavailable.
Vďaka tomu vám monitoring nenahlási „prázdny hosting“ len preto, že sa meranie nepodarilo.
Veľkosti v bajtoch
Všetky veľkosti sú v bajtoch, aby nedochádzalo k zaokrúhľovaniu. Prevod:
| Bajty | Zrozumiteľne | Výpočet |
|---|---|---|
1073741824 | 1 GB | 1024 × 1024 × 1024 |
10737418240 | 10 GB | bajty ÷ 1073741824 |
107374182400 | 100 GB |
// PHP
$gb = round($bytes / 1024 ** 3, 2);
// JavaScript
const gb = (bytes / 1024 ** 3).toFixed(2);
Dátumy a časy
- Dátum bez času:
2027-04-12(rok-mesiac-deň). - Dátum s časom:
2026-09-20T08:10:07Z. PísmenoZznamená UTC, čo je v lete o dve hodiny menej a v zime o hodinu menej ako slovenský čas.08:10 Zv lete zodpovedá 10:10 u nás.
Peniaze
Sumy sú reťazce s dvoma desatinnými miestami v mene podľa poľa currency, napríklad
"13.90". Spracujte ich desatinným typom (bcmath, BigDecimal,
decimal.Decimal), nie bežným desatinným číslom.
Identifikátory
Každý objekt má identifikátor s predponou, z ktorej hneď viete, o čo ide:
| Predpona | Objekt | Príklad |
|---|---|---|
acc_ | zákaznícky účet | acc_01J7Y3M8KD6QTX… |
srv_ | služba v spoločnom zozname | srv_01J7Y4PKR81MDQ… |
dom_ | doména | dom_01J7Y4PKR81MDQ… |
hst_ | hosting | hst_01J7Y55HDA9NRP… |
hdb_ | databáza hostingu | hdb_01J7YB2C4X5K9P… |
mld_ | e-mailová doména | mld_01J7Y8W97N83CY… |
mbx_ | e-mailová schránka | mbx_01J7YMRTK7EJAW… |
Identifikátory nič neprezrádzajú a nemenia sa. Ukladajte si ich, ak chcete objekt sledovať dlhodobo.
Stavy služieb
| Stav | Kde sa objaví | Význam |
|---|---|---|
active | všade | Služba je v poriadku a platná. |
expired | služby, domény | Platnosť uplynula. |
pending_registration | služby, domény | Objednané, registrácia ešte neprebehla. |
external | služby, domény | Doména nie je v našej správe (iný registrátor). |
suspended | služby, hostingy | Služba je pozastavená. |
disabled | Doména alebo schránka je vypnutá. | |
incoming_blocked | e-mailové domény | Prichádzajúca pošta je blokovaná, zvyčajne pre prekročenú kvótu. |
Stránkovanie: ako zobraziť ďalšie záznamy
Zoznamy vracajú v jednom volaní predvolene 50 záznamov, najviac 200. Ak ich máte viac, API nepoužíva čísla strán, ale takzvaný kurzor – značku, kde sa má pokračovať.
"pagination": { "next_cursor": "eyJ2Ijox…", "has_more": true, "limit": 50 }
- Ak je
has_morehodnotatrue, existujú ďalšie záznamy. - Hodnotu
next_cursorpošlite v parametricursor. - Opakujte, kým
has_morenie jefalse.
# prvá stránka
curl -sS "https://api.webhouse.sk/v1/domains" -H "Authorization: Bearer $T"
# ďalšia stránka – kurzor z predchádzajúcej odpovede
curl -sS "https://api.webhouse.sk/v1/domains?cursor=eyJ2Ijox…" -H "Authorization: Bearer $T"
Najjednoduchšie je stránkovaniu sa vyhnúť a pýtať si rovno väčšiu stránku:
curl -sS "https://api.webhouse.sk/v1/domains?limit=200" -H "Authorization: Bearer $T"
Pravidlá kurzora:
- Pri ďalšom volaní nechajte ostatné parametre (filtre, triedenie) rovnaké, inak dostanete chybu
400. Meniť môžete ibalimit. - Kurzor platí 24 hodín a iba pre token, ktorý ho dostal.
- Hodnotu v adrese zakódujte (v PHP
http_build_query(), v JavaScripteURLSearchParams).
Chyby a čo s nimi
Chybová odpoveď je vždy v rovnakom tvare:
{
"type": "https://api.webhouse.sk/problems/insufficient-scope",
"title": "Insufficient token scope",
"status": 403,
"detail": "The token does not have the mailboxes:read scope.",
"request_id": "req_01J7Z1SH8A3M0000000000JK"
}
Hodnotu request_id si odložte. Podľa nej vieme na podpore dohľadať konkrétnu požiadavku.
Tá istá hodnota je aj v hlavičke X-Request-ID.
| Kód | Čo sa stalo | Čo robiť |
|---|---|---|
400 | Neplatný parameter, nepodporovaný filter alebo neplatný kurzor. | Opravte adresu. Pri kurzore začnite znova od prvej stránky. |
401 | Token chýba, je zle skopírovaný, zrušený, expirovaný, voláte z nepovolenej IP, alebo používateľ stratil prístup k účtu. | Skontrolujte token v Setupe. Dôvod zámerne nezverejňujeme. |
403 | Tokenu chýba oprávnenie, alebo požiadavka nešla cez HTTPS. | Doplňte oprávnenie v Setupe a používajte výhradne https://. |
404 | Objekt neexistuje, patrí inému zákazníkovi, alebo je mimo služieb povolených tokenu. | Overte identifikátor. Tieto tri prípady zámerne nerozlišujeme. |
405 | Použili ste inú metódu než GET. | API je iba na čítanie. |
429 | Prekročili ste limit počtu volaní. | Počkajte počet sekúnd z hlavičky Retry-After a skúste znova. |
500 | Neočakávaná chyba na našej strane. | Skúste o chvíľu znova, prípadne kontaktujte podporu s request_id. |
503 | Údaj momentálne nie je k dispozícii (data-unavailable), alebo je API krátkodobo nedostupné (service-unavailable). | Zopakujte neskôr podľa Retry-After. |
Limity volaní
- 120 požiadaviek za minútu na token, krátkodobo až 30 naraz.
- 300 požiadaviek za minútu na celý zákaznícky účet.
- Prísnejší limit pre
/v1/mail-domains/{id}/mailboxesa/v1/mail-usage. - Aktuálny stav ukazujú hlavičky
RateLimit-LimitaRateLimit-Remaining.
Údaje o obsadenosti sa aktualizujú v intervaloch niekoľkých minút až hodín, preto nemá zmysel volať API častejšie. Odporúčame výsledky uložiť (cachovať) a obnovovať ich napríklad raz za 15 minút.
Kompletný príklad v PHP
Tento skript vypíše domény, ktoré expirujú do 60 dní a nepredlžujú sa automaticky. Sám si poradí so stránkovaním aj s limitom volaní.
<?php
$token = getenv('WEBHOUSE_API_TOKEN'); // token nikdy nepíšte priamo do kódu
function webhouse_get(string $path, array $query, string $token): array
{
$url = 'https://api.webhouse.sk/v1' . $path . ($query ? '?' . http_build_query($query) : '');
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, 'Accept: application/json'],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 20,
CURLOPT_HEADER => true,
]);
$raw = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
$headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
curl_close($ch);
$body = json_decode(substr($raw, $headerSize), true);
if ($status === 429) { // prekročený limit – počkáme a skúsime znova
preg_match('/^retry-after:\s*(\d+)/mi', substr($raw, 0, $headerSize), $m);
sleep((int) ($m[1] ?? 30));
return webhouse_get($path, $query, $token);
}
if ($status !== 200) {
throw new RuntimeException(sprintf('%d %s (request_id: %s)',
$status, $body['title'] ?? '', $body['request_id'] ?? ''));
}
return $body;
}
$query = [
'expires_before' => date('Y-m-d', strtotime('+60 days')),
'auto_renew' => 'false',
'sort' => 'expires_on',
'limit' => 200,
];
do {
$page = webhouse_get('/domains', $query, $token);
foreach ($page['data'] as $domain) {
printf("%-30s expiruje %s%s\n",
$domain['name'],
$domain['expires_on'] ?? 'neznáme',
$domain['renewable'] ? '' : ' (teraz sa nedá predĺžiť)');
}
$query['cursor'] = $page['pagination']['next_cursor'];
} while ($page['pagination']['has_more']);
Skript spustíte takto:
WEBHOUSE_API_TOKEN='wh_live_…' php expirujuce-domeny.php
Kompletný príklad v JavaScripte (Node.js)
Pozor: tento kód patrí na server. V prehliadači by bol token viditeľný pre každého návštevníka. API preto zámerne nepodporuje volania z prehliadača (nemá povolené CORS).
const token = process.env.WEBHOUSE_API_TOKEN;
async function webhouseGet(path, query = {}) {
const url = new URL(`https://api.webhouse.sk/v1${path}`);
for (const [k, v] of Object.entries(query)) {
if (v !== undefined && v !== null) url.searchParams.set(k, v);
}
for (;;) {
const res = await fetch(url, {
headers: { Authorization: `Bearer ${token}`, Accept: 'application/json' },
});
if (res.status === 429) { // počkáme podľa Retry-After
const wait = Number(res.headers.get('retry-after') ?? 30);
await new Promise((r) => setTimeout(r, wait * 1000));
continue;
}
const body = await res.json();
if (!res.ok) throw new Error(`${res.status} ${body.title} (request_id: ${body.request_id})`);
return body;
}
}
const gb = (bytes) => (bytes === null ? '?' : (bytes / 1024 ** 3).toFixed(2));
const { data: hostingy } = await webhouseGet('/hosting-services');
for (const hosting of hostingy) {
const u = (await webhouseGet(`/hosting-services/${hosting.id}/usage`)).data;
console.log(
`${hosting.name}: ${gb(u.storage.used_bytes)} GB z ${gb(u.storage.quota_bytes)} GB ` +
`(${u.storage.usage_percent ?? '?'} %), údaj: ${u.data_status}`
);
}
WEBHOUSE_API_TOKEN='wh_live_…' node obsadenost.mjs
Prechod cez všetky stránky priamo v príkazovom riadku
C=''; while :; do
R=$(curl -sS "https://api.webhouse.sk/v1/domains?limit=200${C:+&cursor=$C}" -H "Authorization: Bearer $T")
echo "$R" | jq -r '.data[] | [.name, .expires_on] | @tsv'
C=$(echo "$R" | jq -r '.pagination.next_cursor // empty')
[ -z "$C" ] && break
done
Riešenie problémov
| Príznak | Najčastejšia príčina | Riešenie |
|---|---|---|
Odpoveď 401 hneď pri prvom volaní | Token je neúplne skopírovaný alebo obsahuje medzeru či nový riadok. | Skopírujte token znova celý. Musí mať tvar wh_live_…_… s dvoma podčiarkovníkmi. |
401 až po čase | Token expiroval, bol zrušený, alebo používateľ stratil prístup k účtu. | Vytvorte nový token v Setupe. |
403 insufficient-scope | Tokenu chýba oprávnenie pre daný endpoint. | Porovnajte token.scopes z /v1/account s tým, čo endpoint vyžaduje. |
403 https-required | Volali ste cez http://. | Používajte vždy https://. Token poslaný nešifrovane považujte za prezradený a zrušte ho. |
Prázdny zoznam "data": [] | Taká služba na účte nie je, alebo je token obmedzený na iné služby. | Skontrolujte token.restricted_to_services v /v1/account. |
Hodnota je null | Údaj sa nikdy nepodarilo zmerať (data_status: unavailable). | Nepočítajte s ňou ako s nulou. Skúste neskôr. |
429 pri každom volaní | Skript volá API v slučke bez prestávky. | Rešpektujte hlavičku Retry-After a výsledky si ukladajte. |
503 data-unavailable pri cene predĺženia | Cena pre doménu ešte nie je pripravená. | Skúste o niekoľko minút znova. |
Podpora
Ak si neviete rady, ozvite sa nám. Do správy uveďte:
- hodnotu
request_idz odpovede (alebo z hlavičkyX-Request-ID), - verejné označenie tokenu, teda
token.idz/v1/account, - presnú adresu, ktorú ste volali, a čas volania.
Nikdy neposielajte samotný token, a to ani nám. Na dohľadanie problému nám stačia údaje vyššie.
Technický popis API v strojovo čitateľnej podobe (OpenAPI 3.1) nájdete na openapi.yaml. Dá sa načítať do nástrojov ako Postman alebo Insomnia.