{"openapi":"3.0.0","paths":{"/public/v1/is-connected":{"get":{"description":"200, ha a Bearer kulcs vagy OAuth token egy munkaterületre mutat. A CLI és az integráció ezzel ellenőrzi a belépést.","operationId":"isConnected","parameters":[],"responses":{"200":{"description":"A kulcs egy munkaterületre mutat.","content":{"application/json":{"schema":{"type":"object","properties":{"connected":{"type":"boolean","enum":[true]}},"required":["connected"]}}},"headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}}},"400":{"description":"The request body or a parameter did not validate. Permanent: fix the request, do not retry unchanged.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing, malformed, expired or unknown credential, or the workspace plan does not include API access. Permanent until the credential changes.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Authenticated, but this key lacks the scope (`code: SCOPE_REQUIRED`, `scope: pms:read` or `pms:write`) or the workspace plan does not include the feature (`code: PLAN_REQUIRED`). The body names the missing scope and the key owner's role.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No such object in this workspace. Also returned for an object that exists in another workspace, deliberately: an id is not a way to probe for it.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited. Retryable: wait for the number of seconds in `Retry-After`, or until the instant in `RateLimit-Reset`.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected failure on our side. Retryable with backoff.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"apiKey":[]},{"oauth2":["pms:read","pms:write"]}],"summary":"Ellenőrzi a kulcsot","tags":["Public API"],"x-rate-limit":{"default":"90 requests per hour per credential (API_LIMIT, default 90)","writes":"60 requests per hour","headers":["RateLimit-Limit","RateLimit-Remaining","RateLimit-Reset","RateLimit-Policy"],"retryAfterOn429":true}}},"/public/v1/properties":{"get":{"description":"A munkaterület szálláshelyei azonosítóval, státusszal, várossal, pénznemmel és egységszámmal.","operationId":"listProperties","parameters":[{"name":"includeArchived","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"status","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"A munkaterület szálláshelyei.","content":{"application/json":{"schema":{"type":"object","properties":{"properties":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string","example":"clxyzproperty1"},"name":{"type":"string","example":"Tóparti Apartman"},"status":{"type":"string","example":"ACTIVE"},"city":{"type":"string","example":"Balatonfüred"},"currency":{"type":"string","example":"HUF"},"timezone":{"type":"string","example":"Europe/Budapest"},"unitCount":{"type":"integer","example":2}},"required":["id","name"]}}},"required":["properties"]}}},"headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}}},"400":{"description":"The request body or a parameter did not validate. Permanent: fix the request, do not retry unchanged.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing, malformed, expired or unknown credential, or the workspace plan does not include API access. Permanent until the credential changes.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Authenticated, but this key lacks the scope (`code: SCOPE_REQUIRED`, `scope: pms:read` or `pms:write`) or the workspace plan does not include the feature (`code: PLAN_REQUIRED`). The body names the missing scope and the key owner's role.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No such object in this workspace. Also returned for an object that exists in another workspace, deliberately: an id is not a way to probe for it.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited. Retryable: wait for the number of seconds in `Retry-After`, or until the instant in `RateLimit-Reset`.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected failure on our side. Retryable with backoff.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"apiKey":[]},{"oauth2":["pms:read","pms:write"]}],"summary":"Szálláshelyek listája","tags":["Public API"],"x-rate-limit":{"default":"90 requests per hour per credential (API_LIMIT, default 90)","writes":"60 requests per hour","headers":["RateLimit-Limit","RateLimit-Remaining","RateLimit-Reset","RateLimit-Policy"],"retryAfterOn429":true}}},"/public/v1/properties/{id}/units":{"get":{"description":"A megadott szálláshely kiadható egységei az árcsomagjaikkal.","operationId":"listPropertyUnits","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"Object id in this workspace."}],"responses":{"200":{"description":"Egy szálláshely kiadható egységei.","content":{"application/json":{"schema":{"type":"object","properties":{"units":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string"},"name":{"type":"string","example":"Tóparti"},"propertyId":{"type":"string"},"propertyName":{"type":"string","example":"Tóparti Apartman"},"countOfRooms":{"type":"integer","example":1},"ratePlans":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string"},"title":{"type":"string","example":"Alap"},"isDefault":{"type":"boolean"}}}}},"required":["id","name"]}}},"required":["units"]}}},"headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}}},"400":{"description":"The request body or a parameter did not validate. Permanent: fix the request, do not retry unchanged.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing, malformed, expired or unknown credential, or the workspace plan does not include API access. Permanent until the credential changes.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Authenticated, but this key lacks the scope (`code: SCOPE_REQUIRED`, `scope: pms:read` or `pms:write`) or the workspace plan does not include the feature (`code: PLAN_REQUIRED`). The body names the missing scope and the key owner's role.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No such object in this workspace. Also returned for an object that exists in another workspace, deliberately: an id is not a way to probe for it.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited. Retryable: wait for the number of seconds in `Retry-After`, or until the instant in `RateLimit-Reset`.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected failure on our side. Retryable with backoff.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"apiKey":[]},{"oauth2":["pms:read","pms:write"]}],"summary":"Egy szálláshely egységei","tags":["Public API"],"x-rate-limit":{"default":"90 requests per hour per credential (API_LIMIT, default 90)","writes":"60 requests per hour","headers":["RateLimit-Limit","RateLimit-Remaining","RateLimit-Reset","RateLimit-Policy"],"retryAfterOn429":true}}},"/public/v1/properties/{id}":{"get":{"description":"Cím, be- és kijelentkezés, egységek és árcsomagok. 404, ha a szálláshely nem ebben a munkaterületben van.","operationId":"getProperty","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"Object id in this workspace."}],"responses":{"200":{"description":"Egy szálláshely az egységeivel és árcsomagjaival.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string","example":"clxyzproperty1"},"name":{"type":"string","example":"Tóparti Apartman"},"status":{"type":"string","example":"ACTIVE"},"city":{"type":"string","example":"Balatonfüred"},"currency":{"type":"string","example":"HUF"},"timezone":{"type":"string","example":"Europe/Budapest"},"unitCount":{"type":"integer","example":2}},"required":["id","name"]}}},"headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}}},"400":{"description":"The request body or a parameter did not validate. Permanent: fix the request, do not retry unchanged.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing, malformed, expired or unknown credential, or the workspace plan does not include API access. Permanent until the credential changes.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Authenticated, but this key lacks the scope (`code: SCOPE_REQUIRED`, `scope: pms:read` or `pms:write`) or the workspace plan does not include the feature (`code: PLAN_REQUIRED`). The body names the missing scope and the key owner's role.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No such object in this workspace. Also returned for an object that exists in another workspace, deliberately: an id is not a way to probe for it.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited. Retryable: wait for the number of seconds in `Retry-After`, or until the instant in `RateLimit-Reset`.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected failure on our side. Retryable with backoff.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"apiKey":[]},{"oauth2":["pms:read","pms:write"]}],"summary":"Egy szálláshely","tags":["Public API"],"x-rate-limit":{"default":"90 requests per hour per credential (API_LIMIT, default 90)","writes":"60 requests per hour","headers":["RateLimit-Limit","RateLimit-Remaining","RateLimit-Reset","RateLimit-Policy"],"retryAfterOn429":true}}},"/public/v1/units":{"get":{"description":"Minden egység a munkaterületen, vagy egy szálláshelyé `propertyId` szerint. Minden sor viszi a propertyId-t és az árcsomagokat.","operationId":"listUnits","parameters":[{"name":"propertyId","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Kiadható egységek propertyId-vel és árcsomagokkal.","content":{"application/json":{"schema":{"type":"object","properties":{"units":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string"},"name":{"type":"string","example":"Tóparti"},"propertyId":{"type":"string"},"propertyName":{"type":"string","example":"Tóparti Apartman"},"countOfRooms":{"type":"integer","example":1},"ratePlans":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string"},"title":{"type":"string","example":"Alap"},"isDefault":{"type":"boolean"}}}}},"required":["id","name"]}}},"required":["units"]}}},"headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}}},"400":{"description":"The request body or a parameter did not validate. Permanent: fix the request, do not retry unchanged.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing, malformed, expired or unknown credential, or the workspace plan does not include API access. Permanent until the credential changes.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Authenticated, but this key lacks the scope (`code: SCOPE_REQUIRED`, `scope: pms:read` or `pms:write`) or the workspace plan does not include the feature (`code: PLAN_REQUIRED`). The body names the missing scope and the key owner's role.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No such object in this workspace. Also returned for an object that exists in another workspace, deliberately: an id is not a way to probe for it.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited. Retryable: wait for the number of seconds in `Retry-After`, or until the instant in `RateLimit-Reset`.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected failure on our side. Retryable with backoff.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"apiKey":[]},{"oauth2":["pms:read","pms:write"]}],"summary":"Kiadható egységek","tags":["Public API"],"x-rate-limit":{"default":"90 requests per hour per credential (API_LIMIT, default 90)","writes":"60 requests per hour","headers":["RateLimit-Limit","RateLimit-Remaining","RateLimit-Reset","RateLimit-Policy"],"retryAfterOn429":true}}},"/public/v1/calendar":{"get":{"description":"`from` és `to` inkluzív, YYYY-MM-DD. Opcionális `propertyId` és `unitId`. Minden egység `nights` tömbje viszi a sellable, reserved, ownerBlocked, maintenanceBlocked értékeket.","operationId":"getCalendar","parameters":[{"name":"from","required":true,"in":"query","description":"Inclusive, YYYY-MM-DD.","schema":{"example":"2026-09-12","type":"string"}},{"name":"to","required":true,"in":"query","description":"Inclusive, YYYY-MM-DD.","schema":{"example":"2026-09-15","type":"string"}},{"name":"propertyId","required":false,"in":"query","schema":{"type":"string"}},{"name":"unitId","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Naptár: egységenként nights (sellable, reserved, ownerBlocked, maintenanceBlocked), plusz reservations és blocks.","content":{"application/json":{"schema":{"type":"object","properties":{"from":{"type":"string","example":"2026-09-01"},"to":{"type":"string","example":"2026-09-14"},"units":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string"},"name":{"type":"string","example":"Tóparti"},"nights":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"date":{"type":"string","example":"2026-09-12"},"physical":{"type":"integer"},"reserved":{"type":"integer"},"ownerBlocked":{"type":"integer"},"maintenanceBlocked":{"type":"integer"},"sellable":{"type":"integer"}}}}}}},"reservations":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string"},"status":{"type":"string","example":"CONFIRMED"},"source":{"type":"string","example":"MANUAL"},"arrivalDate":{"type":"string","example":"2026-09-12"},"departureDate":{"type":"string","example":"2026-09-15"},"unitId":{"type":"string"},"propertyId":{"type":"string"},"totalAmountMinor":{"type":"integer","example":12600000,"description":"Fillér. 12600000 = 126 000 Ft."},"currency":{"type":"string","example":"HUF"},"guest":{"type":"object","additionalProperties":true,"properties":{"firstName":{"type":"string","example":"Anna"},"lastName":{"type":"string","example":"Kovács"},"email":{"type":"string","example":"anna@example.com"}}},"unit":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string"},"name":{"type":"string"}}},"property":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string"},"name":{"type":"string"}}}},"required":["id"]}},"blocks":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}},"headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}}},"400":{"description":"The request body or a parameter did not validate. Permanent: fix the request, do not retry unchanged.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing, malformed, expired or unknown credential, or the workspace plan does not include API access. Permanent until the credential changes.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Authenticated, but this key lacks the scope (`code: SCOPE_REQUIRED`, `scope: pms:read` or `pms:write`) or the workspace plan does not include the feature (`code: PLAN_REQUIRED`). The body names the missing scope and the key owner's role.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No such object in this workspace. Also returned for an object that exists in another workspace, deliberately: an id is not a way to probe for it.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited. Retryable: wait for the number of seconds in `Retry-After`, or until the instant in `RateLimit-Reset`.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected failure on our side. Retryable with backoff.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"apiKey":[]},{"oauth2":["pms:read","pms:write"]}],"summary":"Naptár egy időszakra","tags":["Public API"],"x-rate-limit":{"default":"90 requests per hour per credential (API_LIMIT, default 90)","writes":"60 requests per hour","headers":["RateLimit-Limit","RateLimit-Remaining","RateLimit-Reset","RateLimit-Policy"],"retryAfterOn429":true}}},"/public/v1/reservations":{"get":{"description":"Szűrők: from, to (átfedés, nem csak érkezés), status, source, propertyId, unitId, search. A vendég, az egység és a szálláshely benne van a sorban.","operationId":"listReservations","parameters":[{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["INQUIRY","PROVISIONAL","CONFIRMED","CANCELLED","CHECKED_IN","CHECKED_OUT","NO_SHOW"]}},{"name":"source","required":false,"in":"query","schema":{"type":"string","enum":["DIRECT","MANUAL","BOOKING_COM","AIRBNB","SZALLAS_HU","EXPEDIA","AGODA","VRBO","TRIP_COM","GOOGLE_VACATION_RENTALS","OTHER"]}},{"name":"propertyId","required":false,"in":"query","schema":{"type":"string"}},{"name":"unitId","required":false,"in":"query","schema":{"type":"string"}},{"name":"from","required":false,"in":"query","schema":{"example":"2026-09-01","type":"string"}},{"name":"to","required":false,"in":"query","schema":{"example":"2026-09-30","type":"string"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"type":"string"}},{"name":"take","required":false,"in":"query","schema":{"minimum":1,"type":"number"}},{"name":"isOverbooking","required":false,"in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Foglalások az átfedő időszakra. Vendég, egység, szálláshely a sorban.","content":{"application/json":{"schema":{"type":"object","properties":{"reservations":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string"},"status":{"type":"string","example":"CONFIRMED"},"source":{"type":"string","example":"MANUAL"},"arrivalDate":{"type":"string","example":"2026-09-12"},"departureDate":{"type":"string","example":"2026-09-15"},"unitId":{"type":"string"},"propertyId":{"type":"string"},"totalAmountMinor":{"type":"integer","example":12600000,"description":"Fillér. 12600000 = 126 000 Ft."},"currency":{"type":"string","example":"HUF"},"guest":{"type":"object","additionalProperties":true,"properties":{"firstName":{"type":"string","example":"Anna"},"lastName":{"type":"string","example":"Kovács"},"email":{"type":"string","example":"anna@example.com"}}},"unit":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string"},"name":{"type":"string"}}},"property":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string"},"name":{"type":"string"}}}},"required":["id"]}}},"required":["reservations"]}}},"headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}}},"400":{"description":"The request body or a parameter did not validate. Permanent: fix the request, do not retry unchanged.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing, malformed, expired or unknown credential, or the workspace plan does not include API access. Permanent until the credential changes.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Authenticated, but this key lacks the scope (`code: SCOPE_REQUIRED`, `scope: pms:read` or `pms:write`) or the workspace plan does not include the feature (`code: PLAN_REQUIRED`). The body names the missing scope and the key owner's role.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No such object in this workspace. Also returned for an object that exists in another workspace, deliberately: an id is not a way to probe for it.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited. Retryable: wait for the number of seconds in `Retry-After`, or until the instant in `RateLimit-Reset`.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected failure on our side. Retryable with backoff.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"apiKey":[]},{"oauth2":["pms:read","pms:write"]}],"summary":"Foglalások listája","tags":["Public API"],"x-rate-limit":{"default":"90 requests per hour per credential (API_LIMIT, default 90)","writes":"60 requests per hour","headers":["RateLimit-Limit","RateLimit-Remaining","RateLimit-Reset","RateLimit-Policy"],"retryAfterOn429":true}},"post":{"description":"Csak MANUAL vagy DIRECT forrás. OTA-foglalást soha nem kell begépelni. Idempotency-Key fejléc ajánlott.","operationId":"createReservation","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateReservationDto"}}}},"responses":{"201":{"description":"A létrehozott kézi vagy direkt foglalás.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string"},"status":{"type":"string","example":"CONFIRMED"},"source":{"type":"string","example":"MANUAL"},"arrivalDate":{"type":"string","example":"2026-09-12"},"departureDate":{"type":"string","example":"2026-09-15"},"unitId":{"type":"string"},"propertyId":{"type":"string"},"totalAmountMinor":{"type":"integer","example":12600000,"description":"Fillér. 12600000 = 126 000 Ft."},"currency":{"type":"string","example":"HUF"},"guest":{"type":"object","additionalProperties":true,"properties":{"firstName":{"type":"string","example":"Anna"},"lastName":{"type":"string","example":"Kovács"},"email":{"type":"string","example":"anna@example.com"}}},"unit":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string"},"name":{"type":"string"}}},"property":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string"},"name":{"type":"string"}}}},"required":["id"]}}},"headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}}},"400":{"description":"The request body or a parameter did not validate. Permanent: fix the request, do not retry unchanged.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing, malformed, expired or unknown credential, or the workspace plan does not include API access. Permanent until the credential changes.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Authenticated, but this key lacks the scope (`code: SCOPE_REQUIRED`, `scope: pms:read` or `pms:write`) or the workspace plan does not include the feature (`code: PLAN_REQUIRED`). The body names the missing scope and the key owner's role.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No such object in this workspace. Also returned for an object that exists in another workspace, deliberately: an id is not a way to probe for it.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited. Retryable: wait for the number of seconds in `Retry-After`, or until the instant in `RateLimit-Reset`.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected failure on our side. Retryable with backoff.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"apiKey":[]},{"oauth2":["pms:read","pms:write"]}],"summary":"Kézi vagy direkt foglalás","tags":["Public API"],"x-rate-limit":{"default":"90 requests per hour per credential (API_LIMIT, default 90)","writes":"60 requests per hour","headers":["RateLimit-Limit","RateLimit-Remaining","RateLimit-Reset","RateLimit-Policy"],"retryAfterOn429":true}}},"/public/v1/reservations/{id}":{"get":{"description":"Dátumok, vendég, létszám, összegek, fizetési állapot. 404, ha a foglalás nem ebben a munkaterületben van.","operationId":"getReservation","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"Object id in this workspace."}],"responses":{"200":{"description":"Egy foglalás részletei.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string"},"status":{"type":"string","example":"CONFIRMED"},"source":{"type":"string","example":"MANUAL"},"arrivalDate":{"type":"string","example":"2026-09-12"},"departureDate":{"type":"string","example":"2026-09-15"},"unitId":{"type":"string"},"propertyId":{"type":"string"},"totalAmountMinor":{"type":"integer","example":12600000,"description":"Fillér. 12600000 = 126 000 Ft."},"currency":{"type":"string","example":"HUF"},"guest":{"type":"object","additionalProperties":true,"properties":{"firstName":{"type":"string","example":"Anna"},"lastName":{"type":"string","example":"Kovács"},"email":{"type":"string","example":"anna@example.com"}}},"unit":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string"},"name":{"type":"string"}}},"property":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string"},"name":{"type":"string"}}}},"required":["id"]}}},"headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}}},"400":{"description":"The request body or a parameter did not validate. Permanent: fix the request, do not retry unchanged.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing, malformed, expired or unknown credential, or the workspace plan does not include API access. Permanent until the credential changes.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Authenticated, but this key lacks the scope (`code: SCOPE_REQUIRED`, `scope: pms:read` or `pms:write`) or the workspace plan does not include the feature (`code: PLAN_REQUIRED`). The body names the missing scope and the key owner's role.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No such object in this workspace. Also returned for an object that exists in another workspace, deliberately: an id is not a way to probe for it.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited. Retryable: wait for the number of seconds in `Retry-After`, or until the instant in `RateLimit-Reset`.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected failure on our side. Retryable with backoff.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"apiKey":[]},{"oauth2":["pms:read","pms:write"]}],"summary":"Egy foglalás","tags":["Public API"],"x-rate-limit":{"default":"90 requests per hour per credential (API_LIMIT, default 90)","writes":"60 requests per hour","headers":["RateLimit-Limit","RateLimit-Remaining","RateLimit-Reset","RateLimit-Policy"],"retryAfterOn429":true}}},"/public/v1/reservations/{id}/cancel":{"post":{"description":"Felszabadítja az éjszakákat és szinkronizálja a csatornákat. Opcionális `reason`. Idempotency-Key fejléc ajánlott.","operationId":"cancelReservation","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"Object id in this workspace."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelReservationDto"}}}},"responses":{"201":{"description":"A lemondott foglalás.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string"},"status":{"type":"string","example":"CONFIRMED"},"source":{"type":"string","example":"MANUAL"},"arrivalDate":{"type":"string","example":"2026-09-12"},"departureDate":{"type":"string","example":"2026-09-15"},"unitId":{"type":"string"},"propertyId":{"type":"string"},"totalAmountMinor":{"type":"integer","example":12600000,"description":"Fillér. 12600000 = 126 000 Ft."},"currency":{"type":"string","example":"HUF"},"guest":{"type":"object","additionalProperties":true,"properties":{"firstName":{"type":"string","example":"Anna"},"lastName":{"type":"string","example":"Kovács"},"email":{"type":"string","example":"anna@example.com"}}},"unit":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string"},"name":{"type":"string"}}},"property":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string"},"name":{"type":"string"}}}},"required":["id"]}}},"headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}}},"400":{"description":"The request body or a parameter did not validate. Permanent: fix the request, do not retry unchanged.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing, malformed, expired or unknown credential, or the workspace plan does not include API access. Permanent until the credential changes.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Authenticated, but this key lacks the scope (`code: SCOPE_REQUIRED`, `scope: pms:read` or `pms:write`) or the workspace plan does not include the feature (`code: PLAN_REQUIRED`). The body names the missing scope and the key owner's role.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No such object in this workspace. Also returned for an object that exists in another workspace, deliberately: an id is not a way to probe for it.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited. Retryable: wait for the number of seconds in `Retry-After`, or until the instant in `RateLimit-Reset`.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected failure on our side. Retryable with backoff.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"apiKey":[]},{"oauth2":["pms:read","pms:write"]}],"summary":"Foglalás lemondása","tags":["Public API"],"x-rate-limit":{"default":"90 requests per hour per credential (API_LIMIT, default 90)","writes":"60 requests per hour","headers":["RateLimit-Limit","RateLimit-Remaining","RateLimit-Reset","RateLimit-Policy"],"retryAfterOn429":true}}},"/public/v1/reservations/{id}/dates":{"put":{"description":"`arrivalDate` és `departureDate` (a távozás kizáró). Opcionális `unitId` és `rooms`. OTA-foglalásra 409 CHANNEL_MANAGED. Idempotency-Key fejléc ajánlott.","operationId":"moveReservationDates","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"Object id in this workspace."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoveReservationDto"}}}},"responses":{"200":{"description":"A foglalás az új dátumokkal.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string"},"status":{"type":"string","example":"CONFIRMED"},"source":{"type":"string","example":"MANUAL"},"arrivalDate":{"type":"string","example":"2026-09-12"},"departureDate":{"type":"string","example":"2026-09-15"},"unitId":{"type":"string"},"propertyId":{"type":"string"},"totalAmountMinor":{"type":"integer","example":12600000,"description":"Fillér. 12600000 = 126 000 Ft."},"currency":{"type":"string","example":"HUF"},"guest":{"type":"object","additionalProperties":true,"properties":{"firstName":{"type":"string","example":"Anna"},"lastName":{"type":"string","example":"Kovács"},"email":{"type":"string","example":"anna@example.com"}}},"unit":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string"},"name":{"type":"string"}}},"property":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string"},"name":{"type":"string"}}}},"required":["id"]}}},"headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}}},"400":{"description":"The request body or a parameter did not validate. Permanent: fix the request, do not retry unchanged.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing, malformed, expired or unknown credential, or the workspace plan does not include API access. Permanent until the credential changes.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Authenticated, but this key lacks the scope (`code: SCOPE_REQUIRED`, `scope: pms:read` or `pms:write`) or the workspace plan does not include the feature (`code: PLAN_REQUIRED`). The body names the missing scope and the key owner's role.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No such object in this workspace. Also returned for an object that exists in another workspace, deliberately: an id is not a way to probe for it.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited. Retryable: wait for the number of seconds in `Retry-After`, or until the instant in `RateLimit-Reset`.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected failure on our side. Retryable with backoff.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"apiKey":[]},{"oauth2":["pms:read","pms:write"]}],"summary":"Foglalás dátumainak mozgatása","tags":["Public API"],"x-rate-limit":{"default":"90 requests per hour per credential (API_LIMIT, default 90)","writes":"60 requests per hour","headers":["RateLimit-Limit","RateLimit-Remaining","RateLimit-Reset","RateLimit-Policy"],"retryAfterOn429":true}}},"/public/v1/rates":{"get":{"description":"`from` és `to` inkluzív. Opcionális propertyId, unitId, ratePlanId. Árcsomagonként a nightly rateMinor és a tartózkodási korlátok.","operationId":"getRates","parameters":[{"name":"from","required":true,"in":"query","description":"Inclusive, YYYY-MM-DD.","schema":{"example":"2026-09-12","type":"string"}},{"name":"to","required":true,"in":"query","description":"Inclusive, YYYY-MM-DD.","schema":{"example":"2026-09-15","type":"string"}},{"name":"propertyId","required":false,"in":"query","schema":{"type":"string"}},{"name":"unitId","required":false,"in":"query","schema":{"type":"string"}},{"name":"ratePlanId","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Éjszakai árak és korlátok árcsomagonként.","content":{"application/json":{"schema":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"ratePlans":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"ratePlanId":{"type":"string"},"title":{"type":"string","example":"Alap"},"unitId":{"type":"string"},"currency":{"type":"string","example":"HUF"},"nights":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"date":{"type":"string","example":"2026-09-12"},"rateMinor":{"type":"integer","example":4200000},"minStay":{"type":"integer","nullable":true}}}}}}}}}}},"headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}}},"400":{"description":"The request body or a parameter did not validate. Permanent: fix the request, do not retry unchanged.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing, malformed, expired or unknown credential, or the workspace plan does not include API access. Permanent until the credential changes.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Authenticated, but this key lacks the scope (`code: SCOPE_REQUIRED`, `scope: pms:read` or `pms:write`) or the workspace plan does not include the feature (`code: PLAN_REQUIRED`). The body names the missing scope and the key owner's role.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No such object in this workspace. Also returned for an object that exists in another workspace, deliberately: an id is not a way to probe for it.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited. Retryable: wait for the number of seconds in `Retry-After`, or until the instant in `RateLimit-Reset`.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected failure on our side. Retryable with backoff.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"apiKey":[]},{"oauth2":["pms:read","pms:write"]}],"summary":"Éjszakai árak","tags":["Public API"],"x-rate-limit":{"default":"90 requests per hour per credential (API_LIMIT, default 90)","writes":"60 requests per hour","headers":["RateLimit-Limit","RateLimit-Remaining","RateLimit-Reset","RateLimit-Policy"],"retryAfterOn429":true}},"put":{"description":"Lapos törzs: ratePlanId vagy unitId, from, to (inkluzív), priceMinor vagy rateMinor, opcionális minStay és korlátok. `null` törli a korlátot. Idempotency-Key fejléc ajánlott.","operationId":"setRates","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkRatesDto"}}}},"responses":{"200":{"description":"Az írt éjszakák száma és a rate plan.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}}},"400":{"description":"The request body or a parameter did not validate. Permanent: fix the request, do not retry unchanged.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing, malformed, expired or unknown credential, or the workspace plan does not include API access. Permanent until the credential changes.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Authenticated, but this key lacks the scope (`code: SCOPE_REQUIRED`, `scope: pms:read` or `pms:write`) or the workspace plan does not include the feature (`code: PLAN_REQUIRED`). The body names the missing scope and the key owner's role.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No such object in this workspace. Also returned for an object that exists in another workspace, deliberately: an id is not a way to probe for it.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited. Retryable: wait for the number of seconds in `Retry-After`, or until the instant in `RateLimit-Reset`.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected failure on our side. Retryable with backoff.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"apiKey":[]},{"oauth2":["pms:read","pms:write"]}],"summary":"Árak beállítása időszakra","tags":["Public API"],"x-rate-limit":{"default":"90 requests per hour per credential (API_LIMIT, default 90)","writes":"60 requests per hour","headers":["RateLimit-Limit","RateLimit-Remaining","RateLimit-Reset","RateLimit-Policy"],"retryAfterOn429":true}}},"/public/v1/blocks":{"post":{"description":"`unitId`, `firstNight`, `lastNight` (inkluzív), `kind` OWNER vagy MAINTENANCE, opcionális reason. Idempotency-Key fejléc ajánlott.","operationId":"createBlock","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBlockDto"}}}},"responses":{"201":{"description":"A létrehozott zárolás.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string"},"unitId":{"type":"string"},"kind":{"type":"string","example":"OWNER"},"firstNight":{"type":"string","example":"2026-09-12"},"lastNight":{"type":"string","example":"2026-09-14"}}}}},"headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}}},"400":{"description":"The request body or a parameter did not validate. Permanent: fix the request, do not retry unchanged.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing, malformed, expired or unknown credential, or the workspace plan does not include API access. Permanent until the credential changes.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Authenticated, but this key lacks the scope (`code: SCOPE_REQUIRED`, `scope: pms:read` or `pms:write`) or the workspace plan does not include the feature (`code: PLAN_REQUIRED`). The body names the missing scope and the key owner's role.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No such object in this workspace. Also returned for an object that exists in another workspace, deliberately: an id is not a way to probe for it.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited. Retryable: wait for the number of seconds in `Retry-After`, or until the instant in `RateLimit-Reset`.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected failure on our side. Retryable with backoff.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"apiKey":[]},{"oauth2":["pms:read","pms:write"]}],"summary":"Éjszakák zárolása","tags":["Public API"],"x-rate-limit":{"default":"90 requests per hour per credential (API_LIMIT, default 90)","writes":"60 requests per hour","headers":["RateLimit-Limit","RateLimit-Remaining","RateLimit-Reset","RateLimit-Policy"],"retryAfterOn429":true}},"delete":{"description":"`unitId`, `from`, `to` (inkluzív). A teljesen fedett zárolást törli, a széleket levágja, a közepét kettévágja. Idempotency-Key fejléc ajánlott.","operationId":"deleteBlocks","parameters":[{"name":"unitId","required":true,"in":"query","schema":{"type":"string"}},{"name":"from","required":true,"in":"query","description":"Inclusive, YYYY-MM-DD.","schema":{"example":"2026-09-12","type":"string"}},{"name":"to","required":true,"in":"query","description":"Inclusive, YYYY-MM-DD.","schema":{"example":"2026-09-14","type":"string"}}],"responses":{"200":{"description":"A feloldott zárolások. action: removed, shrunk vagy split.","content":{"application/json":{"schema":{"type":"object","properties":{"unitId":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"released":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}},"headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}}},"400":{"description":"The request body or a parameter did not validate. Permanent: fix the request, do not retry unchanged.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing, malformed, expired or unknown credential, or the workspace plan does not include API access. Permanent until the credential changes.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Authenticated, but this key lacks the scope (`code: SCOPE_REQUIRED`, `scope: pms:read` or `pms:write`) or the workspace plan does not include the feature (`code: PLAN_REQUIRED`). The body names the missing scope and the key owner's role.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No such object in this workspace. Also returned for an object that exists in another workspace, deliberately: an id is not a way to probe for it.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited. Retryable: wait for the number of seconds in `Retry-After`, or until the instant in `RateLimit-Reset`.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected failure on our side. Retryable with backoff.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"apiKey":[]},{"oauth2":["pms:read","pms:write"]}],"summary":"Zárolás feloldása időszakra","tags":["Public API"],"x-rate-limit":{"default":"90 requests per hour per credential (API_LIMIT, default 90)","writes":"60 requests per hour","headers":["RateLimit-Limit","RateLimit-Remaining","RateLimit-Reset","RateLimit-Policy"],"retryAfterOn429":true}}},"/public/v1/connections":{"get":{"description":"OTA-kapcsolatok státusszal, utolsó szinkronnal és utolsó hibával. Opcionális propertyId. A csatorna neve generikus, nem OTA-ág.","operationId":"listConnections","parameters":[{"name":"propertyId","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"OTA-kapcsolatok állapota, utolsó szinkron, utolsó hiba.","content":{"application/json":{"schema":{"type":"object","properties":{"connections":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string"},"channel":{"type":"string","example":"BOOKING_COM"},"title":{"type":"string","example":"Booking.com"},"status":{"type":"string","example":"CONNECTED"},"propertyId":{"type":"string"},"propertyName":{"type":"string","example":"Tóparti Apartman"},"lastSyncedAt":{"type":"string","format":"date-time","nullable":true},"lastError":{"type":"string","nullable":true}},"required":["id","channel","status"]}}},"required":["connections"]}}},"headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}}},"400":{"description":"The request body or a parameter did not validate. Permanent: fix the request, do not retry unchanged.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing, malformed, expired or unknown credential, or the workspace plan does not include API access. Permanent until the credential changes.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Authenticated, but this key lacks the scope (`code: SCOPE_REQUIRED`, `scope: pms:read` or `pms:write`) or the workspace plan does not include the feature (`code: PLAN_REQUIRED`). The body names the missing scope and the key owner's role.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No such object in this workspace. Also returned for an object that exists in another workspace, deliberately: an id is not a way to probe for it.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited. Retryable: wait for the number of seconds in `Retry-After`, or until the instant in `RateLimit-Reset`.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected failure on our side. Retryable with backoff.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"apiKey":[]},{"oauth2":["pms:read","pms:write"]}],"summary":"Csatornakapcsolatok állapota","tags":["Public API"],"x-rate-limit":{"default":"90 requests per hour per credential (API_LIMIT, default 90)","writes":"60 requests per hour","headers":["RateLimit-Limit","RateLimit-Remaining","RateLimit-Reset","RateLimit-Policy"],"retryAfterOn429":true}}},"/public/v1/reports/summary":{"get":{"description":"`from` és `to` inkluzív, opcionális propertyId. revenueMinor, occupancyPct, adrMinor, byChannel. Az összegek fillérben (HUF-nál 1 Ft = 100).","operationId":"getReportsSummary","parameters":[{"name":"propertyId","required":false,"in":"query","schema":{"type":"string"}},{"name":"to","required":false,"in":"query","description":"Inclusive YYYY-MM-DD.","schema":{"type":"string"}},{"name":"from","required":false,"in":"query","description":"Inclusive YYYY-MM-DD.","schema":{"type":"string"}}],"responses":{"200":{"description":"Bevétel, kihasználtság, ADR. Összegek fillérben. byChannel forrásonként.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"currency":{"type":"string","example":"HUF"},"from":{"type":"string","example":"2026-08-01"},"to":{"type":"string","example":"2026-08-31"},"revenueMinor":{"type":"integer","example":85000000},"occupancyPct":{"type":"number","example":72.5},"adrMinor":{"type":"integer"},"byChannel":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"source":{"type":"string","example":"DIRECT"},"revenueMinor":{"type":"integer"}}}}}}}},"headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}}},"400":{"description":"The request body or a parameter did not validate. Permanent: fix the request, do not retry unchanged.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing, malformed, expired or unknown credential, or the workspace plan does not include API access. Permanent until the credential changes.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Authenticated, but this key lacks the scope (`code: SCOPE_REQUIRED`, `scope: pms:read` or `pms:write`) or the workspace plan does not include the feature (`code: PLAN_REQUIRED`). The body names the missing scope and the key owner's role.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No such object in this workspace. Also returned for an object that exists in another workspace, deliberately: an id is not a way to probe for it.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited. Retryable: wait for the number of seconds in `Retry-After`, or until the instant in `RateLimit-Reset`.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected failure on our side. Retryable with backoff.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"apiKey":[]},{"oauth2":["pms:read","pms:write"]}],"summary":"Bevételi összefoglaló","tags":["Public API"],"x-rate-limit":{"default":"90 requests per hour per credential (API_LIMIT, default 90)","writes":"60 requests per hour","headers":["RateLimit-Limit","RateLimit-Remaining","RateLimit-Reset","RateLimit-Policy"],"retryAfterOn429":true}}},"/public/v1/messages":{"get":{"description":"Opcionális reservationId (vagy bookingId), propertyId. Minden szál viszi a vendéget, a foglalás azonosítóját és az utolsó üzenet idejét.","operationId":"listMessageThreads","parameters":[{"name":"propertyId","required":false,"in":"query","schema":{"type":"string"}},{"name":"reservationId","required":false,"in":"query","schema":{"type":"string"}},{"name":"bookingId","required":false,"in":"query","description":"Alias of reservationId.","schema":{"type":"string"}},{"name":"cursor","required":false,"in":"query","schema":{"type":"string"}},{"name":"take","required":false,"in":"query","schema":{"minimum":1,"type":"number"}}],"responses":{"200":{"description":"Vendégüzenet-szálak.","content":{"application/json":{"schema":{"type":"object","properties":{"threads":{"type":"array","items":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string"},"status":{"type":"string","example":"OPEN"},"reservationId":{"type":"string","nullable":true},"lastMessageAt":{"type":"string","format":"date-time","nullable":true},"guest":{"type":"object","additionalProperties":true,"properties":{"firstName":{"type":"string","example":"Anna"},"lastName":{"type":"string","example":"Kovács"}}}},"required":["id"]}},"cursor":{"type":"string","nullable":true}}}}},"headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}}},"400":{"description":"The request body or a parameter did not validate. Permanent: fix the request, do not retry unchanged.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing, malformed, expired or unknown credential, or the workspace plan does not include API access. Permanent until the credential changes.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Authenticated, but this key lacks the scope (`code: SCOPE_REQUIRED`, `scope: pms:read` or `pms:write`) or the workspace plan does not include the feature (`code: PLAN_REQUIRED`). The body names the missing scope and the key owner's role.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No such object in this workspace. Also returned for an object that exists in another workspace, deliberately: an id is not a way to probe for it.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited. Retryable: wait for the number of seconds in `Retry-After`, or until the instant in `RateLimit-Reset`.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected failure on our side. Retryable with backoff.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"apiKey":[]},{"oauth2":["pms:read","pms:write"]}],"summary":"Vendégüzenetek szálai","tags":["Public API"],"x-rate-limit":{"default":"90 requests per hour per credential (API_LIMIT, default 90)","writes":"60 requests per hour","headers":["RateLimit-Limit","RateLimit-Remaining","RateLimit-Reset","RateLimit-Policy"],"retryAfterOn429":true}}},"/public/v1/messages/{id}":{"get":{"description":"A szál és a benne lévő üzenetek időrendben. 404, ha a szál nem ebben a munkaterületben van.","operationId":"getMessageThread","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"},"description":"Object id in this workspace."}],"responses":{"200":{"description":"Egy szál az üzeneteivel.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string"},"status":{"type":"string","example":"OPEN"},"reservationId":{"type":"string","nullable":true},"lastMessageAt":{"type":"string","format":"date-time","nullable":true},"guest":{"type":"object","additionalProperties":true,"properties":{"firstName":{"type":"string","example":"Anna"},"lastName":{"type":"string","example":"Kovács"}}}},"required":["id"]}}},"headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}}},"400":{"description":"The request body or a parameter did not validate. Permanent: fix the request, do not retry unchanged.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing, malformed, expired or unknown credential, or the workspace plan does not include API access. Permanent until the credential changes.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Authenticated, but this key lacks the scope (`code: SCOPE_REQUIRED`, `scope: pms:read` or `pms:write`) or the workspace plan does not include the feature (`code: PLAN_REQUIRED`). The body names the missing scope and the key owner's role.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No such object in this workspace. Also returned for an object that exists in another workspace, deliberately: an id is not a way to probe for it.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited. Retryable: wait for the number of seconds in `Retry-After`, or until the instant in `RateLimit-Reset`.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected failure on our side. Retryable with backoff.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"apiKey":[]},{"oauth2":["pms:read","pms:write"]}],"summary":"Egy beszélgetés üzenetei","tags":["Public API"],"x-rate-limit":{"default":"90 requests per hour per credential (API_LIMIT, default 90)","writes":"60 requests per hour","headers":["RateLimit-Limit","RateLimit-Remaining","RateLimit-Reset","RateLimit-Policy"],"retryAfterOn429":true}}},"/public/v1/status":{"get":{"description":"Returns the API version, the current server time, and absolute URLs for every machine-readable document NaptárAI publishes: the OpenAPI spec, the OAuth metadata, the MCP endpoint and the developer documentation. It also states the scopes that exist and how a human obtains a key. This is the only route that answers without a credential, and it reads no workspace data. Rate limits: RFC 9331 RateLimit-Limit / Remaining / Reset / Policy on every response; 429 adds Retry-After. Default authenticated bucket is API_LIMIT (90/hour) per credential; this route is 120/minute per IP.","operationId":"getStatus","parameters":[],"responses":{"200":{"description":"Az API verziója, a szerver órája, és hol él minden géppel olvasható dokumentum.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"name":{"type":"string"},"status":{"type":"string","enum":["ok"]},"version":{"type":"string","example":"v1"},"time":{"type":"string","format":"date-time"},"documentation":{"type":"object","additionalProperties":true},"authentication":{"type":"object","additionalProperties":true},"mcp":{"type":"object","additionalProperties":true},"scopes":{"type":"object","additionalProperties":true},"rateLimits":{"type":"object","additionalProperties":true},"versioning":{"type":"object","additionalProperties":true}},"required":["name","status","version","time"]}}},"headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}}},"400":{"description":"The request body or a parameter did not validate. Permanent: fix the request, do not retry unchanged.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Missing, malformed, expired or unknown credential, or the workspace plan does not include API access. Permanent until the credential changes.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Authenticated, but this key lacks the scope (`code: SCOPE_REQUIRED`, `scope: pms:read` or `pms:write`) or the workspace plan does not include the feature (`code: PLAN_REQUIRED`). The body names the missing scope and the key owner's role.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"No such object in this workspace. Also returned for an object that exists in another workspace, deliberately: an id is not a way to probe for it.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limited. Retryable: wait for the number of seconds in `Retry-After`, or until the instant in `RateLimit-Reset`.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Unexpected failure on our side. Retryable with backoff.","headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window for this route.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window. Self-throttle on this.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets. A delta, not a timestamp.","schema":{"type":"integer"}},"RateLimit-Policy":{"description":"The quota and window, e.g. `60;w=3600`.","schema":{"type":"string"}},"Link":{"description":"RFC 8594 `rel=\"sunset\"` pointer to the deprecation policy. Present on every response; a `Sunset` header appears beside it only once a route is actually being retired.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"summary":"Service status and API discovery (no credential required)","tags":["Public API"],"x-rate-limit":{"default":"90 requests per hour per credential (API_LIMIT, default 90)","status":"120 requests per minute per IP","headers":["RateLimit-Limit","RateLimit-Remaining","RateLimit-Reset","RateLimit-Policy"],"retryAfterOn429":true},"security":[]}}},"info":{"title":"NaptárAI API","description":"REST API for NaptárAI (naptarai.hu), the Hungarian property management system and channel manager for short-term rentals: calendar, availability, nightly prices, bookings, guests, OTA channel health and the host's direct-booking website.\n\n## Authentication\nSend a per-workspace API key as the whole Authorization header (`Authorization: psty_...`), or an OAuth 2.1 + PKCE access token (`Authorization: Bearer pos_...`) minted for the resource `https://szallashelykezelo.hu/public/v1`. Keys are self-serve: sign up at https://naptarai.hu/regisztracio, then Settings, Developers. No sales contact and no waiting list.\n\n## Versioning\nThe version is in the path: every route lives under `/public/v1`. A breaking change ships as `/public/v2`; `/public/v1` keeps its contract. Additive changes (a new optional field, a new route, a new enum value) ship inside v1, so a client must ignore fields it does not know.\n\n## Deprecation\nA route that is going away answers with `Deprecation: true` and a `Sunset` header carrying the RFC 9110 date after which it stops working, alongside a `Link` header with `rel=\"deprecation\"` pointing at the notes. A sunset date is never less than 180 days from the first `Deprecation` header on that route. Nothing is deprecated today.\n\n## Rate limits\nEvery response carries the RFC 9331 headers `RateLimit-Limit`, `RateLimit-Remaining`, `RateLimit-Reset` and `RateLimit-Policy` for the route you called. Each route has its own bucket, keyed to the API key. A 429 adds `Retry-After` in seconds. Self-throttle on `RateLimit-Remaining` rather than waiting for the 429.\n\n## Errors\nEvery failure answers with the `ApiError` schema. See the response descriptions on any operation for what each status means and whether retrying can help.","version":"1.0","contact":{}},"tags":[],"servers":[{"url":"https://naptarai.hu/api","description":"NaptárAI production API"}],"components":{"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"Authorization","description":"A NaptárAI API key, sent as the whole header value: `Authorization: psty_...`. Keys are minted per workspace and carry scopes."},"oauth2":{"type":"oauth2","flows":{"authorizationCode":{"authorizationUrl":"https://naptarai.hu/oauth/authorize","tokenUrl":"https://naptarai.hu/api/oauth/token","scopes":{"pms:read":"Read calendar, availability, rates, bookings, guests, channel health and the direct-booking website.","pms:write":"Change rates, restrictions, blocks, direct bookings and guest-message drafts. Not granted by default.","posts:read":"Read scheduled and published posts.","posts:draft":"Create and edit drafts. Cannot publish or schedule.","posts:publish":"Schedule and publish posts.","channels:read":"List connected channels and their settings.","channels:write":"Connect, edit and disconnect channels.","media:write":"Upload media.","analytics:read":"Read analytics.","mcp:read":"MCP endpoint only: read tools (calendar, availability, rates, bookings). Not used by any REST route.","mcp:write":"MCP endpoint only: write tools (rates, restrictions, blocks, direct bookings, message drafts). Not used by any REST route."}}},"description":"OAuth 2.1 authorization code with PKCE (S256). Request the resource `https://szallashelykezelo.hu/public/v1` so the token is accepted here."}},"schemas":{"CreateReservationDto":{"type":"object","properties":{}},"CancelReservationDto":{"type":"object","properties":{}},"MoveReservationDto":{"type":"object","properties":{}},"BulkRatesDto":{"type":"object","properties":{}},"CreateBlockDto":{"type":"object","properties":{}},"ApiError":{"type":"object","additionalProperties":true,"properties":{"msg":{"type":"string","description":"Human-readable failure. Present on every error raised by NaptárAI itself (auth, scopes, quota, validation).","example":"This API key is missing the required permission: pms:write"},"code":{"type":"string","description":"Machine-readable failure. `SCOPE_REQUIRED` on a 403 from the scope guard; `PLAN_REQUIRED` when the workspace plan does not include the feature.","example":"SCOPE_REQUIRED"},"scope":{"type":"string","description":"On a 403 with code SCOPE_REQUIRED: the missing scope.","example":"pms:write"},"statusCode":{"type":"integer","description":"Present only on framework-level request-validation failures, where it repeats the HTTP status.","example":400},"message":{"type":"array","items":{"type":"string"},"description":"Present only on framework-level request-validation failures: one entry per field that failed.","example":["from must be YYYY-MM-DD"]},"error":{"type":"string","description":"Present only on framework-level failures: the status name.","example":"Bad Request"},"required":{"type":"array","items":{"type":"string"},"description":"On a 403 from the scope guard: the scopes the route needs.","example":["pms:write"]},"granted":{"type":"array","items":{"type":"string"},"description":"On a 403 from the scope guard: the scopes this key actually holds.","example":["pms:read"]},"role":{"type":"string","description":"On a 403 from the scope guard: the key owner's current role in the workspace, which is the usual cause.","example":"VIEWER"}}}}},"externalDocs":{"description":"Developer documentation","url":"https://naptarai.hu/fejlesztok"}}