Base URL: http://62.109.132.9:9296Auth: Basic Auth (jméno + heslo přiděleny na vyžádání, test:test/test)
Formát: JSON (podporuje i XML)
Datum testování: 20.03.2026
API předpokládá komunikaci pomocí HTTPS a povolení komunikace z určených IP adres.
Pro autorizaci se používá Basic Auth (HTTP hlavička Authorization: Basic base64(jmeno:heslo)).
Všechny endpointy vrací JSON (application/json) nebo XML (application/xml).
POST/PUT endpointy přijímají application/json, application/xml a application/x-www-form-urlencoded.
Důležité konvence:
login je typicky email uživatele (pokud není dohodnuto jinak)lang (jazyk) defaultuje na czSeznam poboček/resortů.
Parametry: žádné
Response: 200 OK — Array of Resort_data
| Pole | Typ | Popis |
|---|---|---|
| id | integer | ID resortu |
| nazev | string | Název pobočky |
Příklad odpovědi:
[{"id": 1, "nazev": "Premier fitness"}]
Stav: ✅ Funguje
Seznam kategorií služeb.
| Parametr | Typ | Povinný | Default | Popis |
|---|---|---|---|---|
| lang | string | Ne | cz | Jazyk |
Response: Array of Categories_data
| Pole | Typ | Popis |
|---|---|---|
| id | integer | ID kategorie |
| nazev | string | Název |
| povolene_resorty | string | Povolené resorty (čárkou oddělené) |
| pocet_osob | integer | Počet osob |
| povolena_clenstvi | string | ID povolených členství (středníkem; prázdné = všechna) |
| id_souhlasu | integer | ID požadovaného souhlasu (10 = kryokomora) |
| doplneni_nazvu | string | Doplnění názvu |
| type | integer | Typ: 1=časové rezervace, 2=lekce, 5=ubytování, 99=ostatní |
| img | string | Název obrázku |
Stav: ✅ Funguje (v testovacím prostředí 1 kategorie: 10001 "Prodej členství")
Seznam služeb s cenami.
| Parametr | Typ | Povinný | Default | Popis |
|---|---|---|---|---|
| resort | integer | Ano | — | ID resortu |
| id_kategorie | integer | Ano | — | ID kategorie |
| user_id | integer | Ano | — | ID uživatele (0 pro anonymní) |
| id_resource | integer | Ne | 0 | Filtr na resource (trenér apod.) |
| lang | string | Ne | cz | Jazyk |
Důležité: Ceny se liší podle user_id — člen dostává členskou cenu (např. 50% sleva pro typ "Majitel").
Response: Array of Services_data
| Pole | Typ | Popis |
|---|---|---|
| id | integer | ID služby |
| nazev | string | Název |
| kategorie | string | ID kategorie |
| id_typ_sportoviste | integer | Typ sportoviště |
| resort | integer | Resort |
| description | string | Popis |
| service_detail | array | Detail služby (viz níže) |
service_detail:
| Pole | Typ | Popis |
|---|---|---|
| id | integer | ID detailu |
| delka | integer | Délka (minuty) |
| cena | decimal | Cena (Kč) |
| posible | integer | 1=dostupné |
| description | string | Popis |
| primy_prodej | integer | 1=přímý prodej |
| stav_skladu | integer | Stav skladu |
| voucher | integer | Voucher |
Příklad odpovědi:
[
{"id":900004011,"nazev":"Roční členství NAJEDNOU","kategorie":"10001","resort":1,
"service_detail":[{"id":900004011,"delka":0,"cena":15990.0,"posible":1,"primy_prodej":1,"stav_skladu":999,"voucher":0}]},
{"id":900004007,"nazev":"10 vstupů","kategorie":"10001","resort":1,
"service_detail":[{"id":900004007,"delka":0,"cena":1600.0,"posible":1}]},
{"id":900004008,"nazev":"20 vstupů","kategorie":"10001","resort":1,
"service_detail":[{"id":900004008,"delka":0,"cena":3000.0,"posible":1}]},
{"id":900004005,"nazev":"Měsíční členství","kategorie":"10001","resort":1,
"service_detail":[{"id":900004005,"delka":0,"cena":1790.0,"posible":1}]}
]
Stav: ✅ Funguje (pouze kategorie 10001 má data)
Dostupné služby k danému datu.
| Parametr | Typ | Povinný | Popis |
|---|---|---|---|
| resort | integer | Ano | |
| id_kategorie | integer | Ano | |
| user_id | integer | Ano | |
| datum_start | string | Ano | Datum |
| pohlavi_maser | integer | Ne (def: -1) | Pohlaví maséra |
Response: Stejná struktura jako Services.
Stav: ❌ 500 Error — chybí stored procedure API_HUMANIT_II_GET_SLUZBY_FRE_G
Volné termíny pro rezervaci.
| Parametr | Typ | Povinný | Default | Popis |
|---|---|---|---|---|
| resort | integer | Ano | — | |
| date_start | string | Ano | — | Formát: DD.MM.YYYY |
| id_kategorie | integer | Ano | — | |
| user_id | integer | Ne | 0 | |
| id_maser | integer | Ne | 0 | |
| id_sluzby_1 | integer | Ne | 0 | |
| id_sluzby_2 | integer | Ne | 0 | |
| pocet_dni_dopredu | integer | Ne | 0 | |
| lang | string | Ne | cz |
Response: Array of Freetime_data
| Pole | Typ | Popis |
|---|---|---|
| id_kategorie | integer | |
| povolena_clenstvi | string | |
| id_souhlasu | integer | |
| freetime | date | Volný termín |
| resources_info | object | {available_resources, available_resources_male, available_resources_female} |
| service_available | array | Dostupné služby s detaily a resources |
Stav: ⚠️ Endpoint existuje, ale padá s "numeric overflow" pro kategorii 10001. Pro ostatní kategorie vrací prázdné pole.
Varianty/typy lekcí.
| Parametr | Typ | Povinný | Default |
|---|---|---|---|
| lang | string | Ne | cz |
Response: Array of Lesson_variants_data
| Pole | Typ | Popis |
|---|---|---|
| varianta_lekce | integer | ID varianty |
| nazev | string | Název (max 40 znaků) |
| popis | string | Popis (max 3000 znaků) |
Příklad:
[
{"varianta_lekce":1,"nazev":"skupinove","popis":"skupinove"},
{"varianta_lekce":11,"nazev":"aerobik","popis":"aerobik"},
{"varianta_lekce":13,"nazev":"yoga","popis":"yoga"},
{"varianta_lekce":17,"nazev":"spinning","popis":"spinning"},
{"varianta_lekce":23,"nazev":"zumba","popis":"zumba"}
]
19 typů: skupinove, vacu, photon, aerobik, pilates, yoga, trx, gravity, kruhovy, spinning, bodystyling, hit4fit, expander, tehulky, bosu, zumba, trampolinky, deti, bojove_sporty
Stav: ✅ Funguje
Rozvrh lekcí.
| Parametr | Typ | Povinný | Default |
|---|---|---|---|
| resort | integer | Ano | — |
| date_start | string | Ano | — |
| id_kategorie | integer | Ne | 0 |
| user_id | integer | Ne | 0 |
| pocet_dni_dopredu | integer | Ne | 0 |
| id_service | integer | Ne | 0 |
| lang | string | Ne | cz |
Formát data: DD.MM.YYYY (ne ISO formát!)
Response: Array of Lesson_data
| Pole | Typ | Popis |
|---|---|---|
| resort | integer | |
| kategorie | integer | |
| date_time | date | Start lekce |
| id_staff | integer | ID instruktora |
| pohlavi | string | Pohlaví |
| osloveni | string | Přezdívka instruktora |
| id_service | integer | ID lekce (pro rezervaci) |
| delka | integer | Délka v minutách |
| cena | decimal | Cena |
| nazev | string | Název (20 znaků) |
| popis | string | Popis (400 znaků) |
| kapacita | integer | Celková kapacita |
| obsazeno | integer | Obsazených míst |
| volno | integer | Volných míst |
| cislo_salu | integer | Číslo sálu |
| id_staff_original | integer | Původní instruktor (detekce zástupů) |
| varianta_lekce | integer | ID varianty lekce |
| typ_lekce | integer | ID typu lekce |
| kapacita_members | integer | Kapacita pro členy |
| kapacita_nonmembers | integer | Kapacita pro nečleny |
| volno_members | integer | Volno pro členy |
| volno_nonmembers | integer | Volno pro nečleny |
| user_posible | integer | Může konkrétní klient? |
| povolena_clenstvi | string | Povolená členství |
| id_souhlasu | integer | Požadovaný souhlas |
Stav: ✅ Funguje (v testu prázdný — žádné lekce naplánovány)
Seznam kurtů/sportovišť.
| Parametr | Typ | Povinný | Popis |
|---|---|---|---|
| resort | integer | Ano | |
| id_kategorie | integer | Ano | |
| datum | date | Ano | Formát: YYYY-MM-DD |
Response: Array of Courts_data
| Pole | Typ | Popis |
|---|---|---|
| id_resource | integer | ID |
| nazev | string | Název |
| resort | integer | Resort |
| kategorie | integer | Kategorie |
| platnost_do | date | Platnost do |
Příklad: [{"id_resource":100,"nazev":"Posilovna","resort":1,"kategorie":100,"platnost_do":"2099-12-31T00:00:00"}]
Stav: ✅ Funguje (kategorie 100)
Seznam cvičebních sálů.
Response: Array of Room_data
| Pole | Typ |
|---|---|
| cislo_salu | integer |
| nazev | string |
Data: 6 sálů — Aerobik (1), Funkční tr. (4), Cross GYM (5), Fighting arena 1 (6), Fighting arena 2 (7), Outdoor (8)
Stav: ✅ Funguje
Seznam masérů.
Response: Array of Masseur_data — { resort, id, jmeno, prijmeni, pohlavi }
Stav: ⚠️ 404 (žádní maséři v testovací DB)
Seznam personálu (maséři, trenéři...).
Response: Array of Staff_data — { resort, id, jmeno, prijmeni, pohlavi, id_typ_sportoviste, kategorie }
Stav: ⚠️ 404 (žádný personál v testovací DB)
Typy členství.
Response: Array of Clenstvi_data
| Pole | Typ | Popis |
|---|---|---|
| id | integer | ID členství |
| nazev | string | Název |
| minimum_kredit | decimal | Minimální kredit |
Stav: ✅ Funguje (51 typů členství)
Lookup uživatele dle emailu.
| Parametr | Typ | Povinný |
|---|---|---|
| login | string | Ano |
Response: User_id_data
{"user_id": 4000012, "state": 0}
user_id: -1 = nenalezenstate: 0=reg. na recepci, 1=registrován, 2=email odeslán, 3=potvrzenoStav: ✅ Funguje
Plné přihlášení klienta.
| Parametr | Typ | Povinný | Popis |
|---|---|---|---|
| login | string | Ano | |
| password | string | Ano | MD5 hash hesla |
| member_card_number | string | Ne | Číslo věrnostní karty |
Response: User_data (kompletní profil — viz sekce User)
HTTP kódy:
Stav: ✅ Funguje
Kompletní data klienta.
Response: User_data
{
"user_id": 4000012,
"login": "info@premierfitness.cz",
"email": "info@premierfitness.cz",
"name": "Pavel",
"surname": "Precek",
"title_before": "",
"title_after": "",
"birthdate": "1981-02-01T00:00:00",
"current_balance": 158.0,
"currency": "CZK",
"id_membership": 1001,
"membership": "Majitel",
"member_card": false,
"member_card_number": null,
"membership_exp": "2049-06-18T00:00:00",
"gdpr_souhlasy": 0,
"minimum_kredit": 0.0,
"phone": "777123456",
"street": "...",
"zip": "...",
"city": "...",
"country": "CZ",
"language": "cs",
"state": 0,
"qr": "...",
"loyalty_program_level": 1,
"souhlasy_podminky": {...},
"zmeny_provozu": {"sms":false,"email":false,"push":false},
"obchodni_sdeleni": {"sms":false,"email":false,"push":false}
}
Klíčová pole:
state: 0=registrace na recepci, 1=registrován, 2=email odeslán nepotvrzeno, 3=potvrzenocurrent_balance: zůstatek po odečtení budoucích rezervacípass: MD5 hash hesla (pro PUT)zam_kredit_1/2/3: zaměstnanecké kredity (členství 1000-1999)Stav: ✅ Funguje (reálná user ID od ~4000000)
Aktualizace uživatelských údajů. Body = User_data objekt.
Response: {"success": 1, "messaget": "text"}
Fakturační údaje.
Response: Fakturacni_udaje
{"company_id":"","vat_id":"","name":"","surname":"","company_name":"","street":"","zip":"","city":"","country":"","typ_osoby":""}
Stav: ✅ Funguje
Zápis fakturačních údajů. Body = Fakturacni_udaje.
Response: {"success": 1, "messaget": "text"}
Členství klienta.
Response:
{
"id_membership": 1001,
"membership": "Majitel",
"membership_od": "2022-02-01T00:00:00",
"membership_do": "2049-06-18T00:00:00",
"dluzne_clenstvi": 0.0,
"mesicni_clenstvi": 0.0,
"stav": 0,
"stav_text": ""
}
stav (bitmask): 0=OK, 1=dluží další měsíc, 10=prošlé, 200=přerušené, 1000=dluh za členství, 2000=dluh za 1. platbu, 4000=dluh za zápisné
Stav: ✅ Funguje
Historie pohybů na účtu.
Response: Array of Payment_history — { resort, datum, castka, cdd, text, uhrada, typ_uhrady, sportoviste }
sportoviste: 1010=příjem kreditu, 1001=příjem členství, <1000=nákup služeb, >9000=nákup zbožíStav: ⚠️ 404 (žádná historie v testu)
Balíčky klienta.
Response: Array of Balicek — { nazev, zdarma, zbyva, jednotka, od_kdy, do_kdy, id_balicku, id_typ_clenstvi, sleva_prc, kategorie }
zdarma: počet jednotek zdarma (0 = prostá sleva)sleva_prc: sleva v procentechStav: ⚠️ 404
Předpisy plateb za členství.
Response: Array of Payment_order — { rokmm, datum, predpis, uhrada, zbyva, text, membership }
Stav: ⚠️ 404
Účtenka dle čísla dokladu.
| Parametr | Typ | Povinný | Popis |
|---|---|---|---|
| cdd | integer | Ano | Číslo daňového dokladu |
| resort | integer | Ano | |
| send_email | integer | Ne (def: 0) | 1 = odeslat doklad emailem |
Response: {"uctenka": "string"}
Registrace nového klienta.
Body:
{
"login": "email@example.com",
"password": "md5hash",
"name": "Jan",
"surname": "Novák",
"email": "secondary@email.cz",
"phone": "+420123456789",
"member_card": "Ano",
"agree_to_conditions": true,
"company_name": "",
"company_id": "",
"language": "cs",
"state": 2
}
state: 2 = odeslat potvrzovací email, 3 = rovnou potvrzeno (bez emailu)Response: Register_result_data
{"user_id": 4021141, "success": 1, "messaget": "OK"}
success: 1=OK, -1=shoda email (potvrzený klient), -2=shoda email (nepotvrzený)Stav: ✅ Funguje (reálně vytváří uživatele!)
Dokončení registrace. Body: string (potvrzovací kód).
Response: {"ok": 1, "result_text": "text"}
Odeslání kódu pro reset hesla (emailem i SMS).
Minimálně jeden parametr (email nebo phone) je povinný.
Response: {"ok": 1, "result_text": "text"}
ok: -2 = email nenalezenStav: ⚠️ Funguje ale odesílá skutečné emaily/SMS
Dokončení resetu hesla.
Body:
{"login": "email", "password": "md5hash", "uuid": "kód-z-emailu"}
Ověření přihlašovacích údajů (počet záznamů v DB).
Response:
{
"pz_username": 1,
"pz_username_pass": 0,
"pz_username_with_card": 0,
"pz_username_without_card": 1
}
Stav: ✅ Funguje
Seznam rezervací klienta.
| Parametr | Typ | Povinný | Default |
|---|---|---|---|
| user_id | integer | Ano | — |
| historie | integer | Ne | 0 |
| id_rezervace | integer | Ne | 0 |
| lang | string | Ne | cz |
Response: Array of Reservations_sel_result_data
| Pole | Typ | Popis |
|---|---|---|
| resort | integer | |
| id_rezervace | integer | |
| id_kategorie | integer | |
| datum | date | |
| id_service | integer | |
| delka | integer | |
| id_resource | integer | |
| price | decimal | |
| status | integer | |
| datum_expirace | date | |
| poznamka | string | |
| zpusob_uhrady | integer | |
| service_info | object | Vnořené info o službě |
| categorie_info | object | Vnořené info o kategorii |
| resource_info | object | Info o maséru/kurtu |
| uuid | string | |
| datum_pro_smazani | date | Deadline pro smazání |
Stav: ⚠️ 404 (žádné rezervace v testu)
Vytvoření nové rezervace.
Body:
{
"resort": 1,
"id_kategorie": 2,
"user_id": 3,
"datum": "2026-03-20T14:00:00Z",
"id_service_1": 5,
"delka_1": 60,
"id_resource_1": 7,
"pohlavi_1": "M",
"id_service_2": 0,
"delka_2": 0,
"id_resource_2": 0,
"pohlavi_2": "",
"poznamka": "text",
"zpusob_uhrady": 0,
"name": "Jméno",
"surname": "Příjmení",
"email": "email@test.cz",
"phone": "+420...",
"language": "cs"
}
zpusob_uhrady: 0=standard (platba přes api/Payment), 100=splátkyname/surname/email/phone: volitelné pokud je user_id zadánResponse:
{"success": 1, "messaget": "OK", "uuid": "abc-def-123"}
success: 1=OK, 2=OK+platba nutná, -1=plno, -100=klient nenalezen, -200=nepovolené členství, -201=neplatné členstvíSmazání rezervace.
Response: {"success": 1, "messaget": "text", "storno_poplatek": 0.0}
Aktivní hlídané termíny.
Rozšířené hlídané termíny.
Hlídané termíny dle ID.
Vytvoření nového hlídání (základní, rozšířené, rozšířené+jazyk).
Body:
{
"resort": 1, "id_kategorie": 2, "user_id": 3,
"datum": "2026-03-20T00:00:00Z",
"id_service_1": 5, "delka_1": 60,
"poznamka": "text",
"id_resource_1": 8, "pohlavi_1": "M",
"id_watchdog": 0,
"name": "", "surname": "", "email": "", "phone": "",
"language": "cs"
}
Smazání hlídaného termínu.
Response: {"success": 1, "messaget": "text"}
Stav: ⚠️ GET vrací 404 (žádná data), POST/DELETE netestováno
Info o voucheru.
Response: Voucher_result_data
| Pole | Typ | Popis |
|---|---|---|
| datum_od | date | Platnost od |
| datum_do | date | Platnost do |
| por_cislo | integer | Pořadové číslo |
| nazev_poukazu | string | Název |
| popis | string | Popis |
| cena | decimal | Cena |
| id_voucher | integer | ID |
| posible | integer | 1/0 |
| qr_kod | string | QR kód |
Vouchery napárované na klienta.
Spárování voucheru s klientem.
Body: {"id_voucher": 1, "user_id": 2, "id_payment_shop": "shop-id"}
Uplatnění voucheru (stejné body).
Response: {"success": 1, "messaget": "text", "id_mp": 3}
Stav: ⚠️ GET vrací 404, POST netestováno
Zapsání přijaté platby.
Oznámení o neúspěšné platbě.
Body (oba):
{
"uuid": ["uuid-z-rezervace"],
"user_id": 1,
"amount": 500.00,
"id_payment_shop": "shop-id",
"id_payment_pp_1": "payment-id-1",
"id_payment_pp_2": "payment-id-2",
"zpusob_uhrady": 1,
"zpusob_odeslani": 0
}
uuid: "KREDIT" pro platbu kreditem, "VOUCHER" pro nákup voucheruzpusob_odeslani: 0=elektronicky, 1=papírověResponse: {"success": 1, "messaget": "text", "id_mp": 123}
Definice dotazníků (id_feedback_form=0 = všechny).
Response: Array of Feedback_form
[{"id_form":1,"nazev":"text","poznamka":"text",
"list_items":[{"id_item":1,"poradi":1,"typ":1,"povolen_vlastni_text":0,"nazev":"text","moznosti":["a","b"]}]}]
Odeslání vyplněného dotazníku.
Body:
{
"id_form": 1, "user_id": 2, "poznamka": "text",
"id_1": 4, "id_2": 5, "id_3": 6,
"list_items": [{"id_item": 1, "vlastni_text": "text", "hodnota": 3}]
}
Stav: ⚠️ GET vrací 404 (žádné formuláře)
Seznam platných akcí/promo.
Response: Array of Akce_data
| Pole | Typ |
|---|---|
| id | integer |
| nazev_obrazku | string |
| nadpis | string |
| popis | string |
| akcni_odkaz | string |
| nazev_akcniho_tlacitka | string |
Stav: ⚠️ 404 (žádné aktivní akce)
Odeslání SMS.
| Parametr | Typ | Povinný | Popis |
|---|---|---|---|
| phone | string | Ano | Telefonní číslo |
| text | string | Ano | Text SMS |
| id_sms | string | Ne (def: 0) | ID šablony SMS |
⚠️ POZOR: Odesílá reálnou SMS! Netestovat bez důvodu.
| Endpoint | Poznámka |
|---|---|
| GET api/Resorts | 1 resort (Premier fitness) |
| GET api/Categories | 1 kategorie (10001) |
| GET api/Services | 4 služby (členství, vstupy) |
| GET api/Clenstvi | 51 typů členství |
| GET api/Room | 6 sálů |
| GET api/Lesson/variants | 19 variant |
| GET api/Lesson | Funguje (prázdná data) |
| GET api/Courts | 1 kurt (Posilovna, kat. 100) |
| GET/POST api/Validate | OK |
| GET api/Login | Lookup i plné přihlášení |
| GET api/User | Kompletní profil |
| GET api/user/fu, membership | Fakturace, členství |
| POST api/Register | Vytváří reálné uživatele |
| Endpoint | Chyba |
|---|---|
| GET api/Freetime | "numeric overflow" v stored proceduře (kat. 10001), DateTime parsing pro jiné formáty |
| GET api/Lesson (ISO datum) | "String was not recognized as a valid DateTime" pro formáty jiné než DD.MM.YYYY |
| GET api/Services/free | Chybí stored procedure API_HUMANIT_II_GET_SLUZBY_FRE_G |
Tyto endpointy vrací 404 s prázdným tělem — pravděpodobně žádná data v testovací DB:
Akce, Masseurs, Staff, Feedback, Reservations (GET), Watchdog, watchdog_II, Voucher (GET), voucher/klient_parovane, user/credit_history, user/balicky, user/payment_order
POST/PUT/DELETE endpointy: Register, Registerfinish, Resetpassfinish, Payment, Payment/Cancel, Reservations (POST/DELETE), Watchdog (POST/DELETE), Voucher (POST), voucher/klient_parovane (POST), Feedback (POST), User (PUT), user/fu (PUT), Send_SMS
DD.MM.YYYYYYYY-MM-DDuser_id (člen vs. host)POST api/Register) skutečně vytváří uživatele v produkční DB — pozor!