openapi: 3.0.3
info:
  title: Ellipse Cloud REST API
  version: "2026-07-07"
  description: |
    REST API pre integráciu s Ellipse Cloud PMS.
    Autentifikácia: OAuth2 Bearer (`/api/auth/v2/token`) alebo legacy HTTP Basic (sunset 2026-10-01).
    Väčšina modulov používa query parameter `type` na routing operácií.
    Ľudsky čitateľná dokumentácia: https://docs.ellipsecloud.com/api-dokumentacia/
  contact:
    name: Ellipse Cloud API support
    email: alerts@horecagroup.sk
servers:
  - url: https://{tenant}
    description: Tenant Ellipse Cloud server
    variables:
      tenant:
        default: demo.ellipsecloud.com
tags:
  - name: auth
    description: OAuth2 token API v2 nahrádza priame HTTP Basic volania. Token získate cez client_credentials, potom posielate Authorization: Bearer.
  - name: chmbase
    description: CRUD operácie nad rezerváciami, izbami, cenami a dostupnosťou. GET/POST s parametrom type alebo JSON body (POST). Scope chmbase:read / chmbase:write.
  - name: stays
    description: Operačné dáta hotelovej plachty — zoznam pobytov, detail rezervácie, check-in stav, hotelový účet. Scope stays:read; 1srchres vyžaduje stays:gdpr. Detail rezervácie vracia externé mapovanie: typ pobytu (`ext_stay_type_id`), služby (`mapping_code`), položky pokladne (`plu`).
  - name: money
    description: Faktúry, bločky, pokladničné položky, partneri. Scope money:read / money:write.
  - name: crm
    description: Správa CRM kontaktov, kredit, insight. Vyžaduje crm_api=1 na pripojení + príslušný sub-scope.
  - name: bor
    description: Pripísanie položiek na izbu / hotelový účet hosta. bor scope bor:write, bor2 scope bor2:write.
  - name: register
    description: Správa zľavových QR kódov a pokladničných operácií. Scope register:read / register:write.
  - name: services
    description: Rezervácie služieb a oblastí (wellness, gastro). Scope services:read.
  - name: wb
    description: Endpointy pre booking engine a channel manager. Autentifikácia cez Bearer/Basic so scope wb:*. Pre analytiku vyhľadávaní (LYST / Looker) pozri modul Booking analytika.
  - name: analytics
    description: Export vyhľadávaní a konverzií z web booking engine pre externé BI (Looker Studio, BigQuery). Scope analytics:booking — na API spojení zapnite Booking analytika API (analytics_api). Súvisí s reportom manager web/13 (YoY / LYST).
  - name: rs
    description: Verejné read-only JSON API nad redakčným obsahom (články, izby, balíky, poukazy). OpenAPI: /api/rs/RS_CONTENT_API.yaml
  - name: rms
    description: Verejný katalóg izieb pre RMS integrácie. rmsbookings vyžaduje autentifikáciu.
  - name: mcp
    description: Endpointy pre AI asistentov (ChatGPT, Claude, Gemini). HMAC podpis okrem health/discovery. Kanonický gateway: mcp.ellipsecloud.com
  - name: integrations
    description: Assa Abloy, Salto, iCal export. Vyžadujú povolené API pripojenie alebo token v URL.
  - name: regorders
    description: Polling vybavených objednávok z kuchyne pre bzučiaky a výdajné miesta. Odporúčame obmedziť prístup IP firewallom.
  - name: peripherals
    description: Integrácie s čítačkami dokladov a periférnymi zariadeniami. Hash reťazec a IP whitelist sa nastavujú individuálne v admine.
paths:
  "/api/auth/v2/token/":
    post:
      tags: [auth]
      operationId: auth_v2_token
      summary: Vystavenie access + refresh tokenu (client_credentials alebo refresh_token rotation)
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/auth/v2/revoke/":
    post:
      tags: [auth]
      operationId: auth_v2_revoke
      summary: Revokácia refresh alebo access tokenu (RFC 7009)
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/auth/v2/introspect/":
    post:
      tags: [auth]
      operationId: auth_v2_introspect
      summary: Overenie stavu tokenu (RFC 7662)
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/auth/v2/discovery/":
    get:
      tags: [auth]
      operationId: auth_v2_discovery
      summary: OAuth2 metadata (TTL tokenov, podporované granty)
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/auth/v2/jwks/":
    get:
      tags: [auth]
      operationId: auth_v2_jwks
      summary: JWKS (HS256 — kid, bez verejného kľúča)
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/chmbase/":
    get:
      tags: [chmbase]
      operationId: chmbase_roomtypes
      summary: Zoznam typov izieb
      description: "Scope: `chmbase:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "roomtypes" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/chmbase/":
    get:
      tags: [chmbase]
      operationId: chmbase_roomcount
      summary: Dostupnosť izieb podľa dátumu
      description: "Scope: `chmbase:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "roomcount" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/chmbase/":
    get:
      tags: [chmbase]
      operationId: chmbase_stayprices
      summary: Ceny pobytov
      description: "Scope: `chmbase:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "stayprices" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/chmbase/":
    get:
      tags: [chmbase]
      operationId: chmbase_roomstdrate
      summary: Štandardné sadzby izieb
      description: "Scope: `chmbase:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "roomstdrate" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/chmbase/":
    get:
      tags: [chmbase]
      operationId: chmbase_offer
      summary: Detail balíka / ponuky
      description: "Scope: `chmbase:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "offer" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/chmbase/":
    get:
      tags: [chmbase]
      operationId: chmbase_variant
      summary: Varianty pobytov
      description: "Scope: `chmbase:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "variant" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/chmbase/":
    get:
      tags: [chmbase]
      operationId: chmbase_hotelinfo
      summary: Informácie o hoteli
      description: "Scope: `chmbase:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "hotelinfo" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/chmbase/":
    get:
      tags: [chmbase]
      operationId: chmbase_gallery
      summary: Galéria hotela / izieb
      description: "Scope: `chmbase:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "gallery" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/chmbase/":
    get:
      tags: [chmbase]
      operationId: chmbase_pictograms
      summary: Piktogramy vybavenia
      description: "Scope: `chmbase:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "pictograms" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/chmbase/":
    get:
      tags: [chmbase]
      operationId: chmbase_bookingmeta
      summary: Meta dáta booking engine
      description: "Scope: `chmbase:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "bookingmeta" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/chmbase/":
    get:
      tags: [chmbase]
      operationId: chmbase_resinfo
      summary: Detail rezervácie (chmbase pohľad)
      description: "Scope: `chmbase:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "resinfo" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/chmbase/":
    get:
      tags: [chmbase]
      operationId: chmbase_cancellation
      summary: Storno podmienky
      description: "Scope: `chmbase:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "cancellation" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/chmbase/":
    post:
      tags: [chmbase]
      operationId: chmbase_newbooking
      summary: Vytvorenie novej rezervácie
      description: "Scope: `chmbase:write`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "newbooking" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/chmbase/":
    post:
      tags: [chmbase]
      operationId: chmbase_cancel
      summary: Zrušenie rezervácie
      description: "Scope: `chmbase:write`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "cancel" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/chmbase/":
    post:
      tags: [chmbase]
      operationId: chmbase_edit
      summary: Úprava rezervácie
      description: "Scope: `chmbase:write`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "edit" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/chmbase/":
    post:
      tags: [chmbase]
      operationId: chmbase_editdata
      summary: Úprava údajov hostí
      description: "Scope: `chmbase:write`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "editdata" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/chmbase/":
    post:
      tags: [chmbase]
      operationId: chmbase_addroom
      summary: Pridanie izby k rezervácii
      description: "Scope: `chmbase:write`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "addroom" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/chmbase/":
    post:
      tags: [chmbase]
      operationId: chmbase_deleteroom
      summary: Odstránenie izby z rezervácie
      description: "Scope: `chmbase:write`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "deleteroom" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/chmbase/":
    post:
      tags: [chmbase]
      operationId: chmbase_resdate
      summary: Zmena dátumov pobytu
      description: "Scope: `chmbase:write`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "resdate" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/chmbase/":
    post:
      tags: [chmbase]
      operationId: chmbase_changeprice
      summary: Zmena ceny rezervácie
      description: "Scope: `chmbase:write`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "changeprice" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/chmbase/":
    post:
      tags: [chmbase]
      operationId: chmbase_edithotelbook
      summary: Úprava hotel book záznamu
      description: "Scope: `chmbase:write`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "edithotelbook" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/stays/":
    get:
      tags: [stays]
      operationId: stays_list
      summary: Zoznam pobytov / obsadenosť (anonymized=1 bez OÚ)
      description: "Scope: `stays:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "list" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/stays/":
    get:
      tags: [stays]
      operationId: stays_getreservation
      summary: Detail rezervácie (resid+email/pin alebo altid)
      description: "Scope: `stays:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "getreservation" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/stays/":
    get:
      tags: [stays]
      operationId: stays_getreservation_verified
      summary: Overený detail rezervácie
      description: "Scope: `stays:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "getreservation_verified" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/stays/":
    get:
      tags: [stays]
      operationId: stays_getonlinecheck
      summary: Stav online check-inu
      description: "Scope: `stays:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "getonlinecheck" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/stays/":
    get:
      tags: [stays]
      operationId: stays_status
      summary: Stav rezervácie
      description: "Scope: `stays:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "status" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/stays/":
    get:
      tags: [stays]
      operationId: stays_roomstatus
      summary: Stav izby
      description: "Scope: `stays:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "roomstatus" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/stays/":
    get:
      tags: [stays]
      operationId: stays_roompairs
      summary: Mapovanie izieb
      description: "Scope: `stays:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "roompairs" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/stays/":
    get:
      tags: [stays]
      operationId: stays_persons
      summary: Osoby na izbe
      description: "Scope: `stays:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "persons" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/stays/":
    get:
      tags: [stays]
      operationId: stays_resbyphone
      summary: Vyhľadanie rezervácie podľa telefónu
      description: "Scope: `stays:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "resbyphone" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/stays/":
    get:
      tags: [stays]
      operationId: stays_card
      summary: Hotelový účet (karta)
      description: "Scope: `stays:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "card" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/stays/":
    post:
      tags: [stays]
      operationId: stays_paybill
      summary: Úhrada účtu
      description: "Scope: `stays:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "paybill" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/stays/":
    post:
      tags: [stays]
      operationId: stays_restopay
      summary: Platba cez reštauráciu
      description: "Scope: `stays:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "restopay" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/stays/":
    get:
      tags: [stays]
      operationId: stays_offers
      summary: Ponuky pre pobyt
      description: "Scope: `stays:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "offers" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/stays/":
    get:
      tags: [stays]
      operationId: stays_vouchers
      summary: Poukazy hosta
      description: "Scope: `stays:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "vouchers" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/stays/":
    get:
      tags: [stays]
      operationId: stays_partner
      summary: Partner / firma
      description: "Scope: `stays:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "partner" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/stays/":
    get:
      tags: [stays]
      operationId: stays_heatmap
      summary: Heatmapa obsadenosti
      description: "Scope: `stays:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "heatmap" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/stays/":
    get:
      tags: [stays]
      operationId: stays_pinmap
      summary: PIN mapa izieb
      description: "Scope: `stays:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "pinmap" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/stays/":
    get:
      tags: [stays]
      operationId: stays_afterstay
      summary: After-stay dotazník / follow-up
      description: "Scope: `stays:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "afterstay" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/stays/":
    get:
      tags: [stays]
      operationId: stays_sex
      summary: Číselník pohlaví
      description: "Scope: `stays:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "sex" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/stays/":
    get:
      tags: [stays]
      operationId: stays_board
      summary: Číselník stravovania
      description: "Scope: `stays:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "board" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/stays/":
    get:
      tags: [stays]
      operationId: stays_country
      summary: Číselník krajín
      description: "Scope: `stays:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "country" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/stays/":
    get:
      tags: [stays]
      operationId: stays_1srchres
      summary: GDPR vyhľadávanie rezervácií
      description: "Scope: `stays:gdpr`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "1srchres" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/stays/":
    post:
      tags: [stays]
      operationId: stays_cardpay
      summary: Platba hotelového účtu kartou (token z getreservation)
      description: "Scope: `stays:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "cardpay" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/stays/":
    get:
      tags: [stays]
      operationId: stays_getreservation_example
      summary: Príklad: detail rezervácie podľa altid (demo)
      description: "Scope: `stays:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "getreservation" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/money/":
    get:
      tags: [money]
      operationId: money_vat
      summary: Sadzby DPH
      description: "Scope: `money:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "vat" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/money/":
    get:
      tags: [money]
      operationId: money_regitems
      summary: Položky registra
      description: "Scope: `money:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "regitems" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/money/":
    get:
      tags: [money]
      operationId: money_regsets
      summary: Sety položiek
      description: "Scope: `money:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "regsets" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/money/":
    get:
      tags: [money]
      operationId: money_registers
      summary: Pokladne / registre
      description: "Scope: `money:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "registers" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/money/":
    get:
      tags: [money]
      operationId: money_regcat
      summary: Kategórie registra
      description: "Scope: `money:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "regcat" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/money/":
    get:
      tags: [money]
      operationId: money_invcat
      summary: Kategórie faktúr
      description: "Scope: `money:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "invcat" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/money/":
    get:
      tags: [money]
      operationId: money_invgroup
      summary: Skupiny faktúr
      description: "Scope: `money:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "invgroup" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/money/":
    get:
      tags: [money]
      operationId: money_invlist
      summary: Zoznam faktúr
      description: "Scope: `money:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "invlist" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/money/":
    get:
      tags: [money]
      operationId: money_billslist
      summary: Zoznam bločkov
      description: "Scope: `money:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "billslist" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/money/":
    get:
      tags: [money]
      operationId: money_exbillslist
      summary: Externé bločky — zoznam
      description: "Scope: `money:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "exbillslist" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/money/":
    get:
      tags: [money]
      operationId: money_exbill
      summary: Externý bloček — detail
      description: "Scope: `money:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "exbill" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/money/":
    get:
      tags: [money]
      operationId: money_bill
      summary: Detail bločku
      description: "Scope: `money:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "bill" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/money/":
    get:
      tags: [money]
      operationId: money_lastinvid
      summary: Posledné ID faktúry
      description: "Scope: `money:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "lastinvid" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/money/":
    get:
      tags: [money]
      operationId: money_lastbillid
      summary: Posledné ID bločku
      description: "Scope: `money:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "lastbillid" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/money/":
    get:
      tags: [money]
      operationId: money_invrange
      summary: Rozsah faktúr
      description: "Scope: `money:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "invrange" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/money/":
    get:
      tags: [money]
      operationId: money_billrange
      summary: Rozsah bločkov
      description: "Scope: `money:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "billrange" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/money/":
    get:
      tags: [money]
      operationId: money_getpartner
      summary: Detail partnera
      description: "Scope: `money:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "getpartner" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/money/":
    post:
      tags: [money]
      operationId: money_invoice
      summary: Vytvorenie faktúry
      description: "Scope: `money:write`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "invoice" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/money/":
    post:
      tags: [money]
      operationId: money_invpayment
      summary: Platba faktúry
      description: "Scope: `money:write`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "invpayment" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/money/":
    post:
      tags: [money]
      operationId: money_billspayment
      summary: Platba bločkov
      description: "Scope: `money:write`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "billspayment" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/money/":
    post:
      tags: [money]
      operationId: money_addpartner
      summary: Pridanie partnera
      description: "Scope: `money:write`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "addpartner" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/crm/":
    get:
      tags: [crm]
      operationId: crm_users
      summary: Zoznam CRM používateľov (limit/offset)
      description: "Scope: `crm:list`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "users" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/crm/":
    get:
      tags: [crm]
      operationId: crm_profile
      summary: Profil CRM kontaktu
      description: "Scope: `crm:profile`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "profile" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/crm/":
    get:
      tags: [crm]
      operationId: crm_insight
      summary: CRM insight (kredit, obrat, VIP)
      description: "Scope: `crm:insight`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "insight" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/crm/":
    post:
      tags: [crm]
      operationId: crm_credit_add
      summary: Pripísanie kreditu
      description: "Scope: `crm:credit_add`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "credit_add" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/crm/":
    post:
      tags: [crm]
      operationId: crm_credit_sub
      summary: Odpočítanie kreditu
      description: "Scope: `crm:credit_sub`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "credit_sub" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/crm/":
    post:
      tags: [crm]
      operationId: crm_user_add
      summary: Registrácia nového CRM kontaktu
      description: "Scope: `crm:user_add`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "user_add" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/crm/":
    post:
      tags: [crm]
      operationId: crm_user_remove
      summary: Odstránenie CRM kontaktu
      description: "Scope: `crm:user_remove`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "user_remove" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/bor/":
    get:
      tags: [bor]
      operationId: bor_roompairs
      summary: Mapovanie izieb pre zápis
      description: "Scope: `bor:write`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "roompairs" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/bor/":
    get:
      tags: [bor]
      operationId: bor_checkroom
      summary: Overenie izby pred zápisom
      description: "Scope: `bor:write`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "checkroom" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/bor/":
    post:
      tags: [bor]
      operationId: bor_billtoroom
      summary: Zápis položky na hotelový účet izby
      description: "Scope: `bor:write`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "billtoroom" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/bor2/":
    get:
      tags: [bor]
      operationId: bor2_openbills
      summary: Otvorené účty
      description: "Scope: `bor2:write`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "openbills" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/bor2/":
    post:
      tags: [bor]
      operationId: bor2_billtoroom
      summary: Zápis položky (bor2)
      description: "Scope: `bor2:write`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "billtoroom" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/register/":
    get:
      tags: [register]
      operationId: register_registerlist
      summary: Zoznam pokladní
      description: "Scope: `register:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "registerlist" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/register/":
    get:
      tags: [register]
      operationId: register_listsc
      summary: Zoznam zľavových kódov
      description: "Scope: `register:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "listsc" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/register/":
    get:
      tags: [register]
      operationId: register_used
      summary: Použité kódy
      description: "Scope: `register:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "used" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/register/":
    get:
      tags: [register]
      operationId: register_invoice_head
      summary: Hlavička faktúry z pokladne
      description: "Scope: `register:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "invoice_head" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/register/":
    post:
      tags: [register]
      operationId: register_setsc
      summary: Vytvorenie / úprava zľavového kódu
      description: "Scope: `register:write`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "setsc" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/register/":
    post:
      tags: [register]
      operationId: register_deletesc
      summary: Zmazanie zľavového kódu
      description: "Scope: `register:write`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "deletesc" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/services/":
    get:
      tags: [services]
      operationId: services_areas
      summary: Oblasti / zóny služieb
      description: "Scope: `services:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "areas" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/services/":
    get:
      tags: [services]
      operationId: services_reservations
      summary: Rezervácie služieb
      description: "Scope: `services:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "reservations" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/rooms/":
    get:
      tags: [wb]
      operationId: wb_rooms
      summary: Zoznam izieb pre web booking
      description: "Scope: `wb:rooms`"
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/offers/":
    get:
      tags: [wb]
      operationId: wb_offers
      summary: Ponuky / balíky
      description: "Scope: `wb:offers`"
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/checkroomsavailability/":
    get:
      tags: [wb]
      operationId: wb_checkroomsavailability
      summary: Dostupnosť izieb
      description: "Scope: `wb:availability`"
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/checkpricescallendar/":
    get:
      tags: [wb]
      operationId: wb_checkpricescallendar
      summary: Cenový kalendár
      description: "Scope: `wb:prices`"
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/stayprices/":
    get:
      tags: [wb]
      operationId: wb_stayprices
      summary: Ceny pobytov (WB)
      description: "Scope: `wb:stayprices`"
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/multiellipsebookingdl/":
    post:
      tags: [wb]
      operationId: wb_multiellipsebookingdl
      summary: Multi-property booking download
      description: "Scope: `wb:bookings`"
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/analytics/":
    get:
      tags: [analytics]
      operationId: analytics_booking_events
      summary: Event log vyhľadávaní — kedy (event_date) host hľadal ktorý termín (stay_date). Odporúčané pre LYST v Looker.
      description: "Scope: `analytics:booking`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "booking_events" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/analytics/":
    get:
      tags: [analytics]
      operationId: analytics_booking_aggregates
      summary: Agregát podľa termínu príchodu (stay_date) — kumulatívny stav z reservations_stats.
      description: "Scope: `analytics:booking`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "booking_aggregates" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/analytics/":
    get:
      tags: [analytics]
      operationId: analytics_booking_snapshots
      summary: Denné snímky stavu vyhľadávaní (snapshot_date) — zdroj pre LYST v reporte aj v BI.
      description: "Scope: `analytics:booking`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "booking_snapshots" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/analytics/":
    get:
      tags: [analytics]
      operationId: analytics_docs
      summary: Markdown dokumentácia modulu (Looker workflow, GDPR, príklady LYST)
      description: "Scope: `analytics:booking`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "docs" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/rs/":
    get:
      tags: [rs]
      operationId: rs_meta
      summary: RS obsah: meta
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "meta" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/rs/":
    get:
      tags: [rs]
      operationId: rs_articles
      summary: RS obsah: articles
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "articles" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/rs/":
    get:
      tags: [rs]
      operationId: rs_article
      summary: RS obsah: article
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "article" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/rs/":
    get:
      tags: [rs]
      operationId: rs_banners
      summary: RS obsah: banners
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "banners" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/rs/":
    get:
      tags: [rs]
      operationId: rs_text
      summary: RS obsah: text
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "text" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/rs/":
    get:
      tags: [rs]
      operationId: rs_categories
      summary: RS obsah: categories
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "categories" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/rs/":
    get:
      tags: [rs]
      operationId: rs_category_articles
      summary: RS obsah: category_articles
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "category_articles" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/rs/":
    get:
      tags: [rs]
      operationId: rs_articles_latest
      summary: RS obsah: articles_latest
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "articles_latest" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/rs/":
    get:
      tags: [rs]
      operationId: rs_galleries
      summary: RS obsah: galleries
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "galleries" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/rs/":
    get:
      tags: [rs]
      operationId: rs_gallery
      summary: RS obsah: gallery
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "gallery" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/rs/":
    get:
      tags: [rs]
      operationId: rs_rooms
      summary: RS obsah: rooms
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "rooms" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/rs/":
    get:
      tags: [rs]
      operationId: rs_room
      summary: RS obsah: room
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "room" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/rs/":
    get:
      tags: [rs]
      operationId: rs_room_filters_catalog
      summary: RS obsah: room_filters_catalog
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "room_filters_catalog" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/rs/":
    get:
      tags: [rs]
      operationId: rs_offers
      summary: RS obsah: offers
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "offers" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/rs/":
    get:
      tags: [rs]
      operationId: rs_offers_top
      summary: RS obsah: offers_top
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "offers_top" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/rs/":
    get:
      tags: [rs]
      operationId: rs_vouchers
      summary: RS obsah: vouchers
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "vouchers" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/rs/":
    get:
      tags: [rs]
      operationId: rs_events
      summary: RS obsah: events
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "events" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/rms/":
    get:
      tags: [rms]
      operationId: rms_langs
      summary: Podporované jazyky
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "langs" }
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/rms/":
    get:
      tags: [rms]
      operationId: rms_list
      summary: Katalóg izieb s fotkami a vybavením
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "list" }
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/rms/":
    get:
      tags: [rms]
      operationId: rms_bookings
      summary: Anonymizované rezervácie pre RMS
      description: "Scope: `rms:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "rmsbookings" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/mcp/v1/health/":
    get:
      tags: [mcp]
      operationId: mcp_health
      summary: Health check
      description: "Scope: `verejné`"
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/mcp/v1/discovery/":
    get:
      tags: [mcp]
      operationId: mcp_discovery
      summary: Discovery profil
      description: "Scope: `verejné`"
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/mcp/v1/profile/":
    get:
      tags: [mcp]
      operationId: mcp_profile
      summary: Profil hotela
      description: "Scope: `HMAC`"
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/mcp/v1/availability/":
    post:
      tags: [mcp]
      operationId: mcp_availability
      summary: Dostupnosť
      description: "Scope: `HMAC`"
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/mcp/v1/offers/":
    post:
      tags: [mcp]
      operationId: mcp_offers
      summary: Ponuky
      description: "Scope: `HMAC`"
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/mcp/v1/quote/":
    post:
      tags: [mcp]
      operationId: mcp_quote
      summary: Cenová ponuka
      description: "Scope: `HMAC`"
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/mcp/v1/best_price_periods/":
    post:
      tags: [mcp]
      operationId: mcp_best_price_periods
      summary: Najlepšie obdobia cien
      description: "Scope: `HMAC`"
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/mcp/v1/gift_vouchers/":
    post:
      tags: [mcp]
      operationId: mcp_gift_vouchers
      summary: Darčekové poukazy
      description: "Scope: `HMAC`"
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/mcp/v1/service_timeslots/":
    post:
      tags: [mcp]
      operationId: mcp_service_timeslots
      summary: Termíny služieb
      description: "Scope: `HMAC`"
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/mcp/v1/contract-party/":
    get:
      tags: [mcp]
      operationId: mcp_contract_party
      summary: Fakturačné údaje
      description: "Scope: `HMAC`"
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/mcp/v1/area-booking-ingest/":
    post:
      tags: [mcp]
      operationId: mcp_area_booking_ingest
      summary: Import area booking
      description: "Scope: `HMAC`"
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/mcp/v1/area-booking-cancel/":
    post:
      tags: [mcp]
      operationId: mcp_area_booking_cancel
      summary: Zrušenie area booking
      description: "Scope: `HMAC`"
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/assaabloy/":
    post:
      tags: [integrations]
      operationId: assaabloy
      summary: Assa Abloy Visionline — vydanie / prepísanie karty
      description: "Scope: `assaabloy:write`"
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/salto/":
    post:
      tags: [integrations]
      operationId: salto
      summary: Salto zámky — vydanie karty (rovnaká JSON štruktúra ako Assa Abloy)
      description: "Scope: `salto:write`"
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/ical/{room|area}/{token}.ical.ics/":
    get:
      tags: [integrations]
      operationId: ical
      summary: iCal export (RFC 5545) pre OTA a kalendáre
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/regorders/":
    get:
      tags: [regorders]
      operationId: regorders_all
      summary: Vybavené objednávky (dnes alebo od fromid)
      description: "Scope: `register:read`"
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "all" }
      security:
        - bearerAuth: []
        - basicAuth: []
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/datastore/":
    post:
      tags: [peripherals]
      operationId: datastore_write
      summary: Zápis JSON dát z periférie (prepíše predchádzajúce dáta pre rovnaký hash)
      parameters:
        - name: hash
          in: query
          required: true
          schema: { type: string, example: "{service}-{device}-{encryptedId}" }
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
  "/api/validate/":
    post:
      tags: [peripherals]
      operationId: validate_qr
      summary: Validácia QR dokladu (integrácia na mieru — kontaktujte support)
      parameters:
        - name: type
          in: query
          required: true
          schema: { type: string, example: "1" }
      responses:
        '200':
          description: Úspech
          content:
            application/json:
              schema: { type: object }
        '401':
          description: Neautorizované
        '403':
          description: Nedostatočný scope
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Access token z POST /api/auth/v2/token
    basicAuth:
      type: http
      scheme: basic
      description: Legacy api_connections (sunset 2026-10-01)
security:
  - bearerAuth: []
