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:

Tri veci, ktoré treba vedieť hneď na začiatku

VlastnosťČo to znamená pre vás
Iba čítanieAPI nič nemení a nič neobjednáva. Nemôžete ním omylom zrušiť ani predĺžiť službu.
Iba váš účetToken je naviazaný na jeden zákaznícky účet. Cudzie údaje sa cez neho nedajú zobraziť.
Iba zo serveraToken patrí na server alebo do skriptu, nikdy do webovej stránky, prehliadača či mobilnej aplikácie.

Malý slovníček

PojemVysvetlenie
TokenDlhý tajný reťazec, ktorý funguje ako heslo pre program. Začína sa wh_live_.
EndpointJedna „adresa“ API, napríklad /v1/domains. Každá vracia iný druh údajov.
JSONTextový 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.
curlProgram 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

  1. Prihláste sa do Setupu na setup.webhouse.sk tým istým prístupom, aký používate na správu služieb.
  2. 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.
  3. Kliknite na „Vytvoriť token“ a vyplňte formulár:
    PoleČo doň napísať
    NázovPodľa použitia, napríklad Monitoring expirácií. Pomôže vám neskôr zistiť, ktorý token kam patrí.
    OprávneniaZaškrtnite iba to, čo integrácia naozaj potrebuje (tabuľka nižšie).
    Platnosť doNajviac 1 rok. Odporúčame 90 dní a token pravidelne obnovovať.
    Povolené IP adresyVerejná 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žbyVoliteľné. Token potom uvidí iba vybrané domény alebo hostingy.
  4. Potvrďte heslom do Setupu, prípadne aj kódom dvojfaktorového overenia.
  5. 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ávnenieSprístupníPotrebujete, ak chcete…
account:readZákladné údaje účtu a informácie o tokeneoveriť, že token funguje
services:readSpoločný zoznam všetkých služiebjeden prehľad domén aj hostingov
domains:readDomény, expirácie, stav, nameserverysledovať expirácie domén
domains:pricingCeny predĺženia doménvedieť, koľko bude predĺženie stáť
hosting:readHostingy, ich limity, domény a databázyprehľad hostingových služieb
usage:readObsadenosť a kvótysledovať zaplnenie priestoru
mail-domains:readSúhrny e-mailových doménprehľad e-mailu bez konkrétnych adries
mailboxes:readCitlivé: 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

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
dataSamotný výsledok. Pri zozname je to pole objektov, pri detaile jeden objekt.
paginationIba 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" }
}
PoleVýznam
idIdentifikátor účtu v API (začína acc_).
nameNázov účtu, teda vaša firma alebo meno.
customer_numberZákaznícke číslo, aké vidíte v Setupe a na faktúrach.
currencyMena cenníka účtu, napríklad EUR.
vat_modeDaňový režim: standard (bežná DPH), reverse_charge (prenesená daňová povinnosť), destination_country (daň krajiny príjemcu).
tax_rate_percentSadzba dane v percentách, napríklad "23.00".
token.idVerejné označenie tokenu. Nie je tajné, hodí sa pri komunikácii s podporou.
token.nameNázov, ktorý ste tokenu dali pri vytvorení.
token.scopesOprávnenia, ktoré token skutočne má. Ak používateľ medzitým stratil nejaké právo, zoznam bude kratší, než ste zadali.
token.restricted_to_servicestrue = token vidí iba vybrané služby, nie celý účet.
token.expires_atDá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" }
}
PoleVýznam
idIdentifikátor služby (srv_…). Týmto sa token obmedzuje na vybrané služby.
typedomain alebo hosting.
nameNázov domény alebo hostingu.
statusactive, expired, pending_registration, external, suspended – vysvetlenie v časti Spoločné pojmy.
paid_untilDátum, do ktorého je služba zaplatená. null = nevieme určiť.
auto_renewtrue = predlžuje sa automaticky.
resource_idIdentifiká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" }
}
PoleVýznam
idIdentifikátor domény (dom_…). Používa sa v ďalších volaniach.
service_idTá istá doména v zozname služieb (/v1/services).
nameNázov domény v bežnom tvare, vrátane diakritiky pri IDN doménach (príklad.sk).
name_asciiTechnický tvar bez diakritiky (xn--prklad-4va.sk). Pri bežných doménach je rovnaký ako name.
statusactive = registrovaná a platná, expired = expirovala, pending_registration = objednaná, registrácia ešte neprebehla, external = nie je u nás v správe.
managed_by_webhousetrue = doménu spravuje WebHouse; false = je u iného registrátora.
registered_onVo verzii 1 je vždy null, dátum registrácie zatiaľ neposkytujeme.
expires_onDátum, kedy doméne končí registrácia v registri.
renewal_deadline_atTermín, dokedy treba predĺženie uhradiť, aby sa stihlo bezpečne spracovať. Je skorší než expires_on.
paid_untilDátum, do ktorého je doména zaplatená.
renewabletrue = doménu je možné teraz predĺžiť a poznáme jej cenu.
auto_renewtrue = predĺženie sa uhrádza automaticky (z kreditu alebo bez faktúry).
hosting_service_idHosting, na ktorom doména beží, alebo null.
updated_atKedy sa údaj o doméne naposledy zmenil.

Filtre a triedenie

ParameterHodnotyPríklad
statusactive, expired, pending_registration, external?status=expired
expires_beforeDátum RRRR-MM-DD, vrátane?expires_before=2026-12-31
expires_afterDátum RRRR-MM-DD, vrátane?expires_after=2026-10-01
auto_renewtrue alebo false?auto_renew=false
hosting_service_idhst_…?hosting_service_id=hst_01J7Y…
sortname, -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" }
}
PoleVýznam
period_monthsNa koľko mesiacov sa doména predĺži, zvyčajne 12.
currencyMena ceny, podľa cenníka vášho účtu.
net_amountCena bez dane, napríklad "12.00" = 12,00 EUR.
tax_amountSuma dane.
gross_amountCena s daňou, teda to, čo zaplatíte.
tax_rate_percentPoužitá sadzba dane v percentách.
price_as_ofKedy bola cena vypočítaná.
valid_untilDokedy je uvedená cena orientačne platná.
is_premiumtrue pri prémiových doménach s neštandardnou cenou.
is_binding_quoteVž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" }
}
PoleVýznam
idIdentifikátor hostingu (hst_…).
service_idTen istý hosting v zozname služieb.
nameNázov hostingu, ako ho vidíte v Setupe.
plan_codeOznačenie programu, napríklad business.
statusactive alebo suspended (pozastavený).
paid_untilDokedy je hosting zaplatený.
auto_renewtrue = 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" }
}
PoleVýznam
php_versions_availableVerzie PHP, ktoré sa na tomto hostingu dajú nastaviť.
limits.storage_bytesCelkový priestor podľa programu, v bajtoch. 107374182400 = 100 GB. null = bez limitu.
limits.mail_storage_bytesPriestor vyhradený pre e-mail, v bajtoch.
limits.mailboxesMaximálny počet e-mailových schránok.
limits.databasesMaximálny počet databáz.
limits.domainsMaximálny počet domén na hostingu.
usage.storage_bytesAktuálne využitý priestor v bajtoch.
usage.mailboxes, usage.databases, usage.domainsKoľko ich reálne máte.
usage.measured_atKedy sme obsadenosť naposledy merali.
usage.data_statusfresh, 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" }
}
PoleVýznam
storage.used_bytesSúčet web + databázy + e-mail v bajtoch.
storage.quota_bytesPovolený priestor podľa programu.
storage.usage_percentPercento zaplnenia ako reťazec, napríklad "35.81".
breakdown.webVeľkosť webových súborov.
breakdown.databasesVeľkosť databáz.
breakdown.mailVeľkosť e-mailových schránok.
mailboxes, databases, domainsDvojica used (koľko máte) a limit (koľko môžete mať).
measured_atNajstarší čas merania spomedzi zložiek – teda odkedy je údaj v najhoršom prípade.
data_statusSú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" }
}
PoleVýznam
idIdentifikátor databázy (hdb_…).
nameNázov databázy.
enginemysql alebo postgresql.
size_bytesVeľ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" }
}
PoleVýznam
idIdentifikátor e-mailovej domény (mld_…).
name / name_asciiNázov domény v bežnom a technickom tvare.
statusactive = funguje, disabled = vypnutá, incoming_blocked = prichádzajúca pošta je blokovaná (zvyčajne po prekročení kvóty).
domain_idPrepojenie na registrovanú doménu, alebo null, ak doménu nemáte registrovanú u nás.
hosting_service_idHosting, pod ktorý e-mail patrí, alebo null.
mailboxes_countPočet schránok v doméne.
quota_bytesKvóta celej domény v bajtoch; null = doménová kvóta nie je nastavená.
usageObsadenosť – 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

PoleVýznam
used_bytesKoľko miesta zaberajú všetky schránky domény.
quota_bytesKvóta domény, ak je nastavená.
usage_percentPercento zaplnenia ako reťazec.
mailboxes_countPočet schránok.
measured_at a data_statusKedy 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" }
}
PoleVýznam
addressCelá e-mailová adresa.
statusactive alebo disabled (vypnutá schránka).
used_bytesKoľko miesta schránka zaberá.
quota_bytesKvóta schránky; null = bez obmedzenia.
usage_percentPercento 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_statusVýznamAko to čítať
freshČerstvé, úspešné meranieHodnota je aktuálna.
stalePosledná známa hodnotaMeranie je staršie alebo posledný pokus zlyhal. Hodnota platila v čase measured_at.
unavailableNikdy sme nemeraliHodnota 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:

BajtyZrozumiteľneVýpočet
10737418241 GB1024 × 1024 × 1024
1073741824010 GBbajty ÷ 1073741824
107374182400100 GB
// PHP
$gb = round($bytes / 1024 ** 3, 2);

// JavaScript
const gb = (bytes / 1024 ** 3).toFixed(2);

Dátumy a časy

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:

PredponaObjektPríklad
acc_zákaznícky účetacc_01J7Y3M8KD6QTX…
srv_služba v spoločnom zoznamesrv_01J7Y4PKR81MDQ…
dom_doménadom_01J7Y4PKR81MDQ…
hst_hostinghst_01J7Y55HDA9NRP…
hdb_databáza hostinguhdb_01J7YB2C4X5K9P…
mld_e-mailová doménamld_01J7Y8W97N83CY…
mbx_e-mailová schránkambx_01J7YMRTK7EJAW…

Identifikátory nič neprezrádzajú a nemenia sa. Ukladajte si ich, ak chcete objekt sledovať dlhodobo.

Stavy služieb

StavKde sa objavíVýznam
activevšadeSlužba je v poriadku a platná.
expiredslužby, doményPlatnosť uplynula.
pending_registrationslužby, doményObjednané, registrácia ešte neprebehla.
externalslužby, doményDoména nie je v našej správe (iný registrátor).
suspendedslužby, hostingySlužba je pozastavená.
disablede-mailDoména alebo schránka je vypnutá.
incoming_blockede-mailové doményPrichá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 }
  1. Ak je has_more hodnota true, existujú ďalšie záznamy.
  2. Hodnotu next_cursor pošlite v parametri cursor.
  3. Opakujte, kým has_more nie je false.
# 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:

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ť
400Neplatný parameter, nepodporovaný filter alebo neplatný kurzor.Opravte adresu. Pri kurzore začnite znova od prvej stránky.
401Token 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.
403Tokenu chýba oprávnenie, alebo požiadavka nešla cez HTTPS.Doplňte oprávnenie v Setupe a používajte výhradne https://.
404Objekt 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.
405Použili ste inú metódu než GET.API je iba na čítanie.
429Prekročili ste limit počtu volaní.Počkajte počet sekúnd z hlavičky Retry-After a skúste znova.
500Neoč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í

Ú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íznakNajčastejšia príčinaRieš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 časeToken expiroval, bol zrušený, alebo používateľ stratil prístup k účtu.Vytvorte nový token v Setupe.
403 insufficient-scopeTokenu chýba oprávnenie pre daný endpoint.Porovnajte token.scopes z /v1/account s tým, čo endpoint vyžaduje.
403 https-requiredVolali 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ĺženiaCena 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:

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.