> For the complete documentation index, see [llms.txt](https://mobile-calendar.gitbook.io/v1/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mobile-calendar.gitbook.io/v1/rest-api/models.md).

# Models

## The TokenRequest object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"TokenRequest":{"description":"Client credentials for obtaining JWT. `scope` is optional.","required":["clientId","clientSecret"],"properties":{"clientId":{"type":"string"},"clientSecret":{"type":"string"}},"type":"object"}}}}
```

## The TokenResponse object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"TokenResponse":{"description":"JWT token for use in Authorization header.","required":["access_token","token_type","expires_in"],"properties":{"access_token":{"type":"string"},"token_type":{"type":"string"},"expires_in":{"type":"integer"},"scope":{"type":"array","items":{"type":"string"}}},"type":"object"}}}}
```

## The AvailabilityDay object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"AvailabilityDay":{"description":"Daily availability for a specific date","required":["date","roomsToSell"],"properties":{"date":{"type":"string","format":"date"},"roomsToSell":{"description":"Number of rooms available for sale on this date","type":"integer"}},"type":"object"}}}}
```

## The RoomAvailabilityItem object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"RoomAvailabilityItem":{"description":"Availability data for a room or room type","required":["type","roomId","typeId","availability"],"properties":{"type":{"description":"Type of availability item","type":"string","enum":["ROOM","ROOM_TYPE"]},"roomId":{"description":"Room ID (integer for ROOM type) or array of room IDs (for ROOM_TYPE)","oneOf":[{"type":"integer"},{"type":"array","items":{"type":"integer"}}]},"typeId":{"description":"Room type ID (null for ROOM type, integer for ROOM_TYPE)","type":"integer","nullable":true},"availability":{"description":"Daily availability for the requested date range","type":"array","items":{"$ref":"#/components/schemas/AvailabilityDay"}}},"type":"object"},"AvailabilityDay":{"description":"Daily availability for a specific date","required":["date","roomsToSell"],"properties":{"date":{"type":"string","format":"date"},"roomsToSell":{"description":"Number of rooms available for sale on this date","type":"integer"}},"type":"object"}}}}
```

## The AvailabilityResponse object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"AvailabilityResponse":{"description":"Room availability response for specified date range","required":["data","meta"],"properties":{"data":{"description":"Availability data for all requested rooms or room types","type":"array","items":{"$ref":"#/components/schemas/RoomAvailabilityItem"}},"meta":{"$ref":"#/components/schemas/MetaWithRuid"}},"type":"object"},"RoomAvailabilityItem":{"description":"Availability data for a room or room type","required":["type","roomId","typeId","availability"],"properties":{"type":{"description":"Type of availability item","type":"string","enum":["ROOM","ROOM_TYPE"]},"roomId":{"description":"Room ID (integer for ROOM type) or array of room IDs (for ROOM_TYPE)","oneOf":[{"type":"integer"},{"type":"array","items":{"type":"integer"}}]},"typeId":{"description":"Room type ID (null for ROOM type, integer for ROOM_TYPE)","type":"integer","nullable":true},"availability":{"description":"Daily availability for the requested date range","type":"array","items":{"$ref":"#/components/schemas/AvailabilityDay"}}},"type":"object"},"AvailabilityDay":{"description":"Daily availability for a specific date","required":["date","roomsToSell"],"properties":{"date":{"type":"string","format":"date"},"roomsToSell":{"description":"Number of rooms available for sale on this date","type":"integer"}},"type":"object"},"MetaWithRuid":{"description":"Metadata with request tracking.","required":["ruid"],"properties":{"ruid":{"description":"Request Unique ID","type":"string","format":"uuid"}},"type":"object"}}}}
```

## The AvailabilityQueryParams object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"AvailabilityQueryParams":{"description":"Query parameters for availability endpoint. At least one of roomId or typeId is required.","required":["from","to"],"properties":{"roomId":{"description":"Room ID (integer) or array of room IDs. Can be used together with typeId.","oneOf":[{"type":"integer"},{"type":"array","items":{"type":"integer"}}]},"typeId":{"description":"Room type ID (integer) or array of room type IDs. Can be used together with roomId.","oneOf":[{"type":"integer"},{"type":"array","items":{"type":"integer"}}]},"from":{"description":"Start date for availability check (inclusive)","type":"string","format":"date"},"to":{"description":"End date for availability check (inclusive). Maximum 90 days from 'from' date.","type":"string","format":"date"}},"type":"object"}}}}
```

## The AvailabilityMixedExample object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"AvailabilityMixedExample":{"description":"Example response with both ROOM and ROOM_TYPE availability","type":"object"}}}}
```

## The Client object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"Client":{"description":"Client information","required":["clientId","name"],"properties":{"clientId":{"type":"integer"},"forename":{"type":"string"},"name":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string","format":"email"},"companyName":{"type":"string","nullable":true},"taxId":{"type":"string","nullable":true},"personalId":{"type":"string","nullable":true},"idCard":{"type":"string","nullable":true},"clientType":{"type":"string","enum":["NONE","REGULAR","UNWANTED"]},"address":{"type":"string","nullable":true},"comments":{"type":"string","nullable":true},"vehicleRegistrationNumber":{"type":"string","nullable":true},"countryId":{"type":"integer","nullable":true},"lang":{"description":"Language preference (ISO 639-1)","type":"string"},"addDate":{"description":"Client creation date with timezone","type":"string","format":"date-time"},"editDate":{"description":"Last modification date with timezone","type":"string","format":"date-time","nullable":true}},"type":"object"}}}}
```

## The ClientCreateRequest object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"ClientCreateRequest":{"description":"Create client request","required":["name"],"properties":{"forename":{"type":"string"},"name":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string","format":"email"},"companyName":{"type":"string","nullable":true},"taxId":{"type":"string","nullable":true},"personalId":{"type":"string","nullable":true},"idCard":{"type":"string","nullable":true},"clientType":{"type":"string","enum":["NONE","REGULAR","UNWANTED"]},"address":{"type":"string","nullable":true},"comments":{"type":"string","nullable":true},"vehicleRegistrationNumber":{"type":"string","nullable":true},"countryId":{"type":"integer","nullable":true},"lang":{"description":"Language preference (ISO 639-1)","type":"string"}},"type":"object"}}}}
```

## The ClientUpdateRequest object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"ClientUpdateRequest":{"description":"Update client request - all fields are optional","required":["clientId","name"],"properties":{"forename":{"type":"string"},"name":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string","format":"email"},"companyName":{"type":"string","nullable":true},"taxId":{"type":"string","nullable":true},"personalId":{"type":"string","nullable":true},"idCard":{"type":"string","nullable":true},"clientType":{"type":"string","enum":["NONE","REGULAR","UNWANTED"]},"address":{"type":"string","nullable":true},"comments":{"type":"string","nullable":true},"vehicleRegistrationNumber":{"type":"string","nullable":true},"countryId":{"type":"integer","nullable":true},"lang":{"description":"Language preference (ISO 639-1)","type":"string"}},"type":"object"}}}}
```

## The ClientListResponse object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"ClientListResponse":{"description":"List of clients","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Client"}},"meta":{"$ref":"#/components/schemas/MetaWithPagination"}},"type":"object"},"Client":{"description":"Client information","required":["clientId","name"],"properties":{"clientId":{"type":"integer"},"forename":{"type":"string"},"name":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string","format":"email"},"companyName":{"type":"string","nullable":true},"taxId":{"type":"string","nullable":true},"personalId":{"type":"string","nullable":true},"idCard":{"type":"string","nullable":true},"clientType":{"type":"string","enum":["NONE","REGULAR","UNWANTED"]},"address":{"type":"string","nullable":true},"comments":{"type":"string","nullable":true},"vehicleRegistrationNumber":{"type":"string","nullable":true},"countryId":{"type":"integer","nullable":true},"lang":{"description":"Language preference (ISO 639-1)","type":"string"},"addDate":{"description":"Client creation date with timezone","type":"string","format":"date-time"},"editDate":{"description":"Last modification date with timezone","type":"string","format":"date-time","nullable":true}},"type":"object"},"MetaWithPagination":{"description":"Pagination parameters with request tracking in list responses.","required":["totalItems","currentPage","totalPages","itemsPerPage","ruid"],"properties":{"totalItems":{"type":"integer","minimum":0},"currentPage":{"type":"integer","minimum":1},"totalPages":{"type":"integer","minimum":0},"itemsPerPage":{"type":"integer","minimum":1},"ruid":{"description":"Request Unique ID","type":"string","format":"uuid"}},"type":"object"}}}}
```

## The ClientResponse object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"ClientResponse":{"description":"Single client response with metadata","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/Client"},"meta":{"$ref":"#/components/schemas/MetaWithRuid"}},"type":"object"},"Client":{"description":"Client information","required":["clientId","name"],"properties":{"clientId":{"type":"integer"},"forename":{"type":"string"},"name":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string","format":"email"},"companyName":{"type":"string","nullable":true},"taxId":{"type":"string","nullable":true},"personalId":{"type":"string","nullable":true},"idCard":{"type":"string","nullable":true},"clientType":{"type":"string","enum":["NONE","REGULAR","UNWANTED"]},"address":{"type":"string","nullable":true},"comments":{"type":"string","nullable":true},"vehicleRegistrationNumber":{"type":"string","nullable":true},"countryId":{"type":"integer","nullable":true},"lang":{"description":"Language preference (ISO 639-1)","type":"string"},"addDate":{"description":"Client creation date with timezone","type":"string","format":"date-time"},"editDate":{"description":"Last modification date with timezone","type":"string","format":"date-time","nullable":true}},"type":"object"},"MetaWithRuid":{"description":"Metadata with request tracking.","required":["ruid"],"properties":{"ruid":{"description":"Request Unique ID","type":"string","format":"uuid"}},"type":"object"}}}}
```

## The ClientCreateResponse object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"ClientCreateResponse":{"description":"Created client response with metadata","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/Client"},"meta":{"$ref":"#/components/schemas/MetaWithRuid"}},"type":"object"},"Client":{"description":"Client information","required":["clientId","name"],"properties":{"clientId":{"type":"integer"},"forename":{"type":"string"},"name":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string","format":"email"},"companyName":{"type":"string","nullable":true},"taxId":{"type":"string","nullable":true},"personalId":{"type":"string","nullable":true},"idCard":{"type":"string","nullable":true},"clientType":{"type":"string","enum":["NONE","REGULAR","UNWANTED"]},"address":{"type":"string","nullable":true},"comments":{"type":"string","nullable":true},"vehicleRegistrationNumber":{"type":"string","nullable":true},"countryId":{"type":"integer","nullable":true},"lang":{"description":"Language preference (ISO 639-1)","type":"string"},"addDate":{"description":"Client creation date with timezone","type":"string","format":"date-time"},"editDate":{"description":"Last modification date with timezone","type":"string","format":"date-time","nullable":true}},"type":"object"},"MetaWithRuid":{"description":"Metadata with request tracking.","required":["ruid"],"properties":{"ruid":{"description":"Request Unique ID","type":"string","format":"uuid"}},"type":"object"}}}}
```

## The Pagination object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"Pagination":{"description":"Pagination parameters in list responses.","required":["totalItems","currentPage","totalPages","itemsPerPage"],"properties":{"totalItems":{"type":"integer","minimum":0},"currentPage":{"type":"integer","minimum":1},"totalPages":{"type":"integer","minimum":0},"itemsPerPage":{"type":"integer","minimum":1}},"type":"object"}}}}
```

## The MetaWithPagination object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"MetaWithPagination":{"description":"Pagination parameters with request tracking in list responses.","required":["totalItems","currentPage","totalPages","itemsPerPage","ruid"],"properties":{"totalItems":{"type":"integer","minimum":0},"currentPage":{"type":"integer","minimum":1},"totalPages":{"type":"integer","minimum":0},"itemsPerPage":{"type":"integer","minimum":1},"ruid":{"description":"Request Unique ID","type":"string","format":"uuid"}},"type":"object"}}}}
```

## The MetaWithRuid object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"MetaWithRuid":{"description":"Metadata with request tracking.","required":["ruid"],"properties":{"ruid":{"description":"Request Unique ID","type":"string","format":"uuid"}},"type":"object"}}}}
```

## The ErrorValue object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"ErrorValue":{"description":"Single error message or list of messages.","oneOf":[{"description":"Error value in error map can be:\n- single string, or\n- array of strings (multiple messages for one field).","type":"string"},{"type":"array","items":{"type":"string"}}]}}}}
```

## The ApiProblemBase object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"ApiProblemBase":{"description":"RFC 7807 Problem Details (base schema).","required":["type","title","status","detail","instance"],"properties":{"type":{"description":"RFC 7807 base — DO NOT use directly in endpoints.\nIn endpoints reference ApiProblem400/401/403/409/422/429/500.","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"type":"object"}}}}
```

## The ApiProblem400 object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"ApiProblem400":{"description":"Request syntax/format error.","allOf":[{"$ref":"#/components/schemas/ApiProblemBase"},{"properties":{"type":{"description":"400 Bad Request","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"type":"object"}]},"ApiProblemBase":{"description":"RFC 7807 Problem Details (base schema).","required":["type","title","status","detail","instance"],"properties":{"type":{"description":"RFC 7807 base — DO NOT use directly in endpoints.\nIn endpoints reference ApiProblem400/401/403/409/422/429/500.","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"type":"object"}}}}
```

## The ApiProblem401 object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"ApiProblem401":{"description":"Missing authentication or invalid credentials.","allOf":[{"$ref":"#/components/schemas/ApiProblemBase"},{"properties":{"type":{"description":"401 Unauthorized","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"type":"object"}]},"ApiProblemBase":{"description":"RFC 7807 Problem Details (base schema).","required":["type","title","status","detail","instance"],"properties":{"type":{"description":"RFC 7807 base — DO NOT use directly in endpoints.\nIn endpoints reference ApiProblem400/401/403/409/422/429/500.","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"type":"object"}}}}
```

## The ApiProblem403 object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"ApiProblem403":{"description":"Authenticated user but no access.","allOf":[{"$ref":"#/components/schemas/ApiProblemBase"},{"properties":{"type":{"description":"403 Forbidden","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"type":"object"}]},"ApiProblemBase":{"description":"RFC 7807 Problem Details (base schema).","required":["type","title","status","detail","instance"],"properties":{"type":{"description":"RFC 7807 base — DO NOT use directly in endpoints.\nIn endpoints reference ApiProblem400/401/403/409/422/429/500.","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"type":"object"}}}}
```

## The ApiProblem404 object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"ApiProblem404":{"description":"Resource specified in the request was not found.","allOf":[{"$ref":"#/components/schemas/ApiProblemBase"},{"properties":{"type":{"description":"404 Not Found","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"type":"object"}]},"ApiProblemBase":{"description":"RFC 7807 Problem Details (base schema).","required":["type","title","status","detail","instance"],"properties":{"type":{"description":"RFC 7807 base — DO NOT use directly in endpoints.\nIn endpoints reference ApiProblem400/401/403/409/422/429/500.","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"type":"object"}}}}
```

## The ApiProblem409 object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"ApiProblem409":{"description":"Conflict with resource state or integrity constraints.","allOf":[{"$ref":"#/components/schemas/ApiProblemBase"},{"properties":{"type":{"description":"409 Conflict","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"type":"object"}]},"ApiProblemBase":{"description":"RFC 7807 Problem Details (base schema).","required":["type","title","status","detail","instance"],"properties":{"type":{"description":"RFC 7807 base — DO NOT use directly in endpoints.\nIn endpoints reference ApiProblem400/401/403/409/422/429/500.","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"type":"object"}}}}
```

## The ApiProblem422 object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"ApiProblem422":{"description":"Input data validation error.","allOf":[{"$ref":"#/components/schemas/ApiProblemBase"},{"properties":{"type":{"description":"422 Unprocessable Entity (validation)","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"},"errors":{"description":"Map: field name → error message(s)","type":"object","additionalProperties":{"$ref":"#/components/schemas/ErrorValue"}}},"type":"object"}]},"ApiProblemBase":{"description":"RFC 7807 Problem Details (base schema).","required":["type","title","status","detail","instance"],"properties":{"type":{"description":"RFC 7807 base — DO NOT use directly in endpoints.\nIn endpoints reference ApiProblem400/401/403/409/422/429/500.","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"type":"object"},"ErrorValue":{"description":"Single error message or list of messages.","oneOf":[{"description":"Error value in error map can be:\n- single string, or\n- array of strings (multiple messages for one field).","type":"string"},{"type":"array","items":{"type":"string"}}]}}}}
```

## The ApiProblem429 object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"ApiProblem429":{"description":"API rate limit exceeded.","allOf":[{"$ref":"#/components/schemas/ApiProblemBase"},{"properties":{"type":{"description":"429 Too Many Requests","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"type":"object"}]},"ApiProblemBase":{"description":"RFC 7807 Problem Details (base schema).","required":["type","title","status","detail","instance"],"properties":{"type":{"description":"RFC 7807 base — DO NOT use directly in endpoints.\nIn endpoints reference ApiProblem400/401/403/409/422/429/500.","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"type":"object"}}}}
```

## The ApiProblem500 object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"ApiProblem500":{"description":"Unexpected server-side error.","allOf":[{"$ref":"#/components/schemas/ApiProblemBase"},{"properties":{"type":{"description":"500 Internal Server Error","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"type":"object"}]},"ApiProblemBase":{"description":"RFC 7807 Problem Details (base schema).","required":["type","title","status","detail","instance"],"properties":{"type":{"description":"RFC 7807 base — DO NOT use directly in endpoints.\nIn endpoints reference ApiProblem400/401/403/409/422/429/500.","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"type":"object"}}}}
```

## The Invoice object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"Invoice":{"description":"Invoice with buyer, seller, receiver data and invoice items","required":["invoiceId","invoiceNo","invoiceFullNo","invoiceType","buyer","seller","receiver","invoiceItems","paymentType","paymentStatus","issueDate","saleDate","paymentDate","currency"],"properties":{"invoiceId":{"type":"integer"},"invoiceNo":{"type":"integer"},"invoiceFullNo":{"type":"string"},"format":{"type":"string"},"extraChar":{"type":"string"},"invoiceStatus":{"description":"Invoice status: DRAFT=Editable draft, ISSUED=Issued invoice (default), PENDING_KSEF=Pending KSeF submission (readonly), SENT_KSEF=Sent to KSeF system (readonly)","type":"string","enum":["DRAFT","ISSUED","PENDING_KSEF","SENT_KSEF"]},"ksefId":{"description":"KSeF (Polish National e-Invoice System) unique identifier. Readonly - set automatically by backend when invoice is sent to KSeF.","type":"string","nullable":true},"invoiceType":{"description":"Invoice type: 0=Standard Invoice, 1=VAT Invoice, 2=Pro Forma Invoice, 3=Advance Invoice, 4=Correction Invoice, 5=VAT Exempt Invoice, 6=Advance Receipt, 7=Correction Receipt, 8=KSeF Advance Invoice, 9=KSeF Settlement Invoice, 10=KSeF Correction Invoice, 11=KSeF Advance Correction Invoice, 12=KSeF Settlement Correction Invoice","type":"integer","enum":[0,1,2,3,4,5,6,7,8,9,10,11,12]},"buyer":{"properties":{"companyName":{"type":"string"},"address":{"type":"string"},"taxId":{"type":"string"},"identifierType":{"description":"Buyer identifier type for KSeF: NIP=Polish tax ID (10-digit), VAT_UE=EU VAT number (requires countryCode), OTHER=Foreign/other identifier (countryCode optional), NONE=No identifier (BrakID)","type":"string","enum":["NIP","VAT_UE","OTHER","NONE"]},"countryCode":{"description":"ISO 3166-1 alpha-2 country code (e.g. PL, DE, CZ). Required when identifierType=VAT_UE, optional for OTHER.","type":"string","nullable":true}},"type":"object"},"seller":{"properties":{"companyName":{"type":"string"},"address":{"type":"string"},"taxId":{"type":"string"},"bankNo":{"type":"string"}},"type":"object"},"receiver":{"properties":{"companyName":{"type":"string"},"address":{"type":"string"},"taxId":{"type":"string"},"identifierType":{"description":"Receiver identifier type for KSeF: NIP=Polish tax ID, VAT_UE=EU VAT number (requires countryCode), OTHER=Foreign/other identifier, NONE=No identifier","type":"string","enum":["NIP","VAT_UE","OTHER","NONE"],"nullable":true},"countryCode":{"description":"ISO 3166-1 alpha-2 country code for receiver.","type":"string","nullable":true},"bankNo":{"type":"string"}},"type":"object"},"invoiceItems":{"type":"array","items":{"$ref":"#/components/schemas/InvoiceItem"}},"paymentType":{"description":"Payment method: 0=None, 1=Cash, 2=Bank Transfer, 3=Credit Card, 4=Virtual Card, 5=Online Payment","type":"integer","enum":[0,1,2,3,4,5]},"paymentStatus":{"description":"Payment status: 0=Unpaid, 1=Paid","type":"integer","enum":[0,1]},"issueDate":{"type":"string","format":"date"},"saleDate":{"type":"string","format":"date"},"town":{"type":"string"},"paymentDate":{"type":"string","format":"date"},"currency":{"type":"string"},"additionalInfo":{"type":"string","nullable":true},"correctionReason":{"description":"Reason for correction. Used only for correction invoice types (6, 10, 11, 12). Sent to KSeF as PrzyczynaKorekty in the FA(3) XML.","type":"string","maxLength":1024,"nullable":true},"personCollect":{"type":"string","nullable":true},"personIssue":{"type":"string","nullable":true},"clientId":{"type":"integer","nullable":true},"reservationId":{"type":"integer","nullable":true},"exemptionBasis":{"description":"Tax exemption legal basis ID or custom text. Only present if invoice has items with 'zw' VAT rate.","type":"string","nullable":true},"exchangeRate":{"description":"Currency exchange rate to PLN. Automatically fetched when invoice currency is not PLN and user is connected to KSeF. Readonly.","type":"number","format":"float","nullable":true},"prepaymentValue":{"description":"For invoiceType=8 (KSeF Advance Invoice): advance payment gross amount (must be > 0, cannot exceed total order value). For invoiceType=9 (KSeF Settlement Invoice): remaining amount to pay after advance payments (must be >= 0). Not used for other invoice types.","type":"number","format":"float","nullable":true},"addDate":{"type":"string","format":"date-time"},"editDate":{"type":"string","format":"date-time"}},"type":"object"},"InvoiceItem":{"description":"Invoice item - single position on invoice","required":["invoiceId","positionId","userId","status","name","grossUnitPrice","quantity","unit","rate","symbol"],"properties":{"invoiceId":{"type":"integer"},"positionId":{"type":"integer"},"userId":{"type":"integer"},"status":{"type":"integer","enum":[0,1]},"name":{"type":"string"},"grossUnitPrice":{"type":"number","format":"float"},"quantity":{"type":"number","format":"float"},"unit":{"type":"string"},"rate":{"type":"string"},"symbol":{"type":"string"}},"type":"object"}}}}
```

## The InvoiceItem object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"InvoiceItem":{"description":"Invoice item - single position on invoice","required":["invoiceId","positionId","userId","status","name","grossUnitPrice","quantity","unit","rate","symbol"],"properties":{"invoiceId":{"type":"integer"},"positionId":{"type":"integer"},"userId":{"type":"integer"},"status":{"type":"integer","enum":[0,1]},"name":{"type":"string"},"grossUnitPrice":{"type":"number","format":"float"},"quantity":{"type":"number","format":"float"},"unit":{"type":"string"},"rate":{"type":"string"},"symbol":{"type":"string"}},"type":"object"}}}}
```

## The InvoiceCreateRequest object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"InvoiceCreateRequest":{"description":"Create invoice request payload","required":["invoiceType","buyer","seller","paymentType","paymentStatus","issueDate","saleDate","paymentDate","currency","invoiceItems"],"properties":{"invoiceType":{"description":"Invoice type: 0=Standard Invoice, 1=VAT Invoice, 2=Pro Forma Invoice, 3=Advance Invoice (blocked when KSeF connected), 4=VAT Exempt Invoice, 5=Advance Receipt, 6=Correction VAT, 7=Correction Receipt, 8=KSeF Advance Invoice (required when KSeF connected; invoiceItems = full order, prepaymentValue = advance payment amount), 9=KSeF Settlement Invoice (requires KSeF connection; settles KSeF advance invoices type 8 with ksefId; prepaymentValue = remaining amount to pay; prepaymentId = array of type 8 invoice IDs with ksefId assigned), 10=KSeF Correction Invoice (requires KSeF connection; corrects VAT invoices via KSeF; correctionId = original invoice ID), 11=KSeF Advance Correction Invoice (requires KSeF connection; corrects KSeF advance invoices type 8; correctionId = type 8 invoice ID), 12=KSeF Settlement Correction Invoice (requires KSeF connection; corrects KSeF settlement invoices type 9; correctionId = type 9 invoice ID)","type":"integer","enum":[0,1,2,3,4,5,6,7,8,9,10,11,12]},"format":{"type":"string"},"extraChar":{"type":"string"},"invoiceStatus":{"description":"Invoice status: DRAFT=Editable draft, ISSUED=Issued invoice (default). Note: PENDING_KSEF and SENT_KSEF can only be set by backend KSeF service.","type":"string","enum":["DRAFT","ISSUED"]},"buyer":{"required":["companyName","address","taxId"],"properties":{"companyName":{"type":"string"},"address":{"type":"string"},"taxId":{"type":"string"},"identifierType":{"description":"Buyer identifier type for KSeF XML. Default: NIP. NIP=Polish 10-digit tax ID, VAT_UE=EU VAT number (countryCode required), OTHER=Foreign/other ID (countryCode optional), NONE=No identifier (BrakID in KSeF)","type":"string","enum":["NIP","VAT_UE","OTHER","NONE"]},"countryCode":{"description":"ISO 3166-1 alpha-2 country code. Required when identifierType=VAT_UE, optional for OTHER.","type":"string","nullable":true}},"type":"object"},"seller":{"required":["companyName","address","taxId"],"properties":{"companyName":{"type":"string"},"address":{"type":"string"},"taxId":{"type":"string"},"bankNo":{"type":"string"}},"type":"object"},"receiver":{"properties":{"companyName":{"type":"string"},"address":{"type":"string"},"taxId":{"type":"string"},"identifierType":{"description":"Receiver identifier type for KSeF XML. NIP=Polish tax ID, VAT_UE=EU VAT number (countryCode required), OTHER=Foreign/other ID, NONE=No identifier","type":"string","enum":["NIP","VAT_UE","OTHER","NONE"],"nullable":true},"countryCode":{"description":"ISO 3166-1 alpha-2 country code for receiver.","type":"string","nullable":true},"bankNo":{"type":"string"}},"type":"object","nullable":true},"invoiceItems":{"type":"array","items":{"$ref":"#/components/schemas/InvoiceItemCreateRequest"},"minItems":1},"paymentType":{"description":"Payment method: 0=None, 1=Cash, 2=Bank Transfer, 3=Credit Card, 4=Virtual Card, 5=Online Payment","type":"integer","enum":[0,1,2,3,4,5]},"paymentStatus":{"description":"Payment status: 0=Unpaid, 1=Paid","type":"integer","enum":[0,1]},"issueDate":{"type":"string","format":"date"},"saleDate":{"type":"string","format":"date"},"town":{"type":"string"},"paymentDate":{"type":"string","format":"date"},"currency":{"type":"string"},"additionalInfo":{"type":"string","nullable":true},"correctionReason":{"description":"Reason for correction. Required only for correction invoice types (6, 10, 11, 12). Sent to KSeF as PrzyczynaKorekty in the FA(3) XML. Ignored for non-correction invoice types.","type":"string","maxLength":1024,"nullable":true},"personCollect":{"type":"string","nullable":true},"personIssue":{"type":"string","nullable":true},"clientId":{"type":"integer","nullable":true},"reservationId":{"type":"integer","nullable":true},"customNumber":{"description":"Custom invoice number, if not provided - auto generated","type":"integer","nullable":true},"prepaymentId":{"type":"array","items":{"type":"integer"},"nullable":true},"correctionId":{"type":"integer","nullable":true},"exemptionBasis":{"description":"Tax exemption legal basis - REQUIRED when invoice contains items with 'zw' (VAT exempt) rate. For Polish invoices only. Can be either: (1) Predefined ID: 'art43_1' (Zwolnienie ze względu na rodzaj prowadzonej działalności - art. 43 ust. 1 ustawy o VAT, KSeF: P_19A), 'art113' (Zwolnienie ze względu na nieprzekroczenie 200 000 PLN obrotu - art. 113 ust. 1 i 9 ustawy o VAT, KSeF: P_19A), 'art82_3' (Zwolnienie na mocy rozporządzenia MF - art. 82 ust. 3 ustawy o VAT, KSeF: P_19A), 'directive' (Zwolnienie art. 132 ust. 1 lub art. 135 ust. 1 Dyrektywy 2006/112/WE, KSeF: P_19B); OR (2) Custom text (minimum 10 characters) - will be mapped to KSeF field P_19A","type":"string","nullable":true},"prepaymentValue":{"description":"REQUIRED for invoiceType=8 (KSeF Advance Invoice): advance payment gross amount, must be > 0 and cannot exceed total gross of invoiceItems. REQUIRED for invoiceType=9 (KSeF Settlement Invoice): remaining amount to pay after advance payments, must be >= 0. For type 8, invoiceItems = full order value, prepaymentValue = advance amount. For type 9, invoiceItems = full order value, prepaymentValue = remaining amount to pay (kwota pozostała do zapłaty).","type":"number","format":"float","nullable":true}},"type":"object"},"InvoiceItemCreateRequest":{"description":"Invoice item create request","required":["name","grossUnitPrice","quantity","unit","rate","symbol"],"properties":{"name":{"type":"string"},"grossUnitPrice":{"type":"number","format":"float"},"quantity":{"type":"number","format":"float"},"unit":{"type":"string"},"rate":{"type":"string"},"symbol":{"type":"string"}},"type":"object"}}}}
```

## The InvoiceItemCreateRequest object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"InvoiceItemCreateRequest":{"description":"Invoice item create request","required":["name","grossUnitPrice","quantity","unit","rate","symbol"],"properties":{"name":{"type":"string"},"grossUnitPrice":{"type":"number","format":"float"},"quantity":{"type":"number","format":"float"},"unit":{"type":"string"},"rate":{"type":"string"},"symbol":{"type":"string"}},"type":"object"}}}}
```

## The InvoiceUpdateRequest object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"InvoiceUpdateRequest":{"description":"Update invoice request payload - all fields optional","properties":{"invoiceType":{"description":"Invoice type: 0=Standard Invoice, 1=VAT Invoice, 2=Pro Forma Invoice, 3=Advance Invoice (blocked when KSeF connected), 4=VAT Exempt Invoice, 5=Advance Receipt, 6=Correction VAT, 7=Correction Receipt, 8=KSeF Advance Invoice, 9=KSeF Settlement Invoice, 10=KSeF Correction Invoice, 11=KSeF Advance Correction Invoice, 12=KSeF Settlement Correction Invoice","type":"integer","enum":[0,1,2,3,4,5,6,7,8,9,10,11,12]},"extraChar":{"type":"string"},"invoiceStatus":{"description":"Invoice status: DRAFT=Editable draft, ISSUED=Issued invoice. Note: Cannot update invoices with PENDING_KSEF or SENT_KSEF status (will return 422 error).","type":"string","enum":["DRAFT","ISSUED"]},"buyer":{"properties":{"companyName":{"type":"string"},"address":{"type":"string"},"taxId":{"type":"string"},"identifierType":{"description":"Buyer identifier type for KSeF XML. NIP=Polish 10-digit tax ID, VAT_UE=EU VAT number (countryCode required), OTHER=Foreign/other ID, NONE=No identifier","type":"string","enum":["NIP","VAT_UE","OTHER","NONE"]},"countryCode":{"description":"ISO 3166-1 alpha-2 country code.","type":"string","nullable":true}},"type":"object","nullable":true},"seller":{"properties":{"companyName":{"type":"string"},"address":{"type":"string"},"taxId":{"type":"string"},"bankNo":{"type":"string"}},"type":"object","nullable":true},"receiver":{"properties":{"companyName":{"type":"string"},"address":{"type":"string"},"taxId":{"type":"string"},"identifierType":{"description":"Receiver identifier type for KSeF XML.","type":"string","enum":["NIP","VAT_UE","OTHER","NONE"],"nullable":true},"countryCode":{"description":"ISO 3166-1 alpha-2 country code for receiver.","type":"string","nullable":true},"bankNo":{"type":"string"}},"type":"object","nullable":true},"invoiceItems":{"type":"array","items":{"$ref":"#/components/schemas/InvoiceItemUpdateRequest"},"nullable":true},"paymentType":{"description":"Payment method: 0=None, 1=Cash, 2=Bank Transfer, 3=Credit Card, 4=Virtual Card, 5=Online Payment","type":"integer","enum":[0,1,2,3,4,5]},"paymentStatus":{"description":"Payment status: 0=Unpaid, 1=Paid","type":"integer","enum":[0,1]},"issueDate":{"type":"string","format":"date"},"saleDate":{"type":"string","format":"date"},"town":{"type":"string"},"paymentDate":{"type":"string","format":"date"},"currency":{"type":"string"},"additionalInfo":{"type":"string","nullable":true},"correctionReason":{"description":"Reason for correction. Used only for correction invoice types (6, 10, 11, 12). Sent to KSeF as PrzyczynaKorekty in the FA(3) XML.","type":"string","maxLength":1024,"nullable":true},"personCollect":{"type":"string","nullable":true},"personIssue":{"type":"string","nullable":true},"clientId":{"type":"integer","nullable":true},"reservationId":{"type":"integer","nullable":true},"prepaymentId":{"type":"array","items":{"type":"integer"},"nullable":true},"exemptionBasis":{"description":"Tax exemption legal basis - REQUIRED when invoice contains items with 'zw' (VAT exempt) rate. For Polish invoices only. Can be either: (1) Predefined ID: 'art43_1' (Zwolnienie ze względu na rodzaj prowadzonej działalności - art. 43 ust. 1 ustawy o VAT, KSeF: P_19A), 'art113' (Zwolnienie ze względu na nieprzekroczenie 200 000 PLN obrotu - art. 113 ust. 1 i 9 ustawy o VAT, KSeF: P_19A), 'art82_3' (Zwolnienie na mocy rozporządzenia MF - art. 82 ust. 3 ustawy o VAT, KSeF: P_19A), 'directive' (Zwolnienie art. 132 ust. 1 lub art. 135 ust. 1 Dyrektywy 2006/112/WE, KSeF: P_19B); OR (2) Custom text (minimum 10 characters) - will be mapped to KSeF field P_19A","type":"string","nullable":true},"prepaymentValue":{"description":"REQUIRED for invoiceType=8 (KSeF Advance Invoice): advance payment gross amount, must be > 0. REQUIRED for invoiceType=9 (KSeF Settlement Invoice): remaining amount to pay (kwota pozostała do zapłaty), must be >= 0.","type":"number","format":"float","nullable":true}},"type":"object"},"InvoiceItemUpdateRequest":{"description":"Invoice item update request","properties":{"positionId":{"description":"If provided - updates existing item, if null - creates new item","type":"integer","nullable":true},"name":{"type":"string"},"grossUnitPrice":{"type":"number","format":"float"},"quantity":{"type":"number","format":"float"},"unit":{"type":"string"},"rate":{"type":"string"},"symbol":{"type":"string"}},"type":"object"}}}}
```

## The InvoiceItemUpdateRequest object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"InvoiceItemUpdateRequest":{"description":"Invoice item update request","properties":{"positionId":{"description":"If provided - updates existing item, if null - creates new item","type":"integer","nullable":true},"name":{"type":"string"},"grossUnitPrice":{"type":"number","format":"float"},"quantity":{"type":"number","format":"float"},"unit":{"type":"string"},"rate":{"type":"string"},"symbol":{"type":"string"}},"type":"object"}}}}
```

## The InvoiceListResponse object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"InvoiceListResponse":{"description":"Paginated list of invoices","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Invoice"}},"meta":{"$ref":"#/components/schemas/MetaWithPagination"}},"type":"object"},"Invoice":{"description":"Invoice with buyer, seller, receiver data and invoice items","required":["invoiceId","invoiceNo","invoiceFullNo","invoiceType","buyer","seller","receiver","invoiceItems","paymentType","paymentStatus","issueDate","saleDate","paymentDate","currency"],"properties":{"invoiceId":{"type":"integer"},"invoiceNo":{"type":"integer"},"invoiceFullNo":{"type":"string"},"format":{"type":"string"},"extraChar":{"type":"string"},"invoiceStatus":{"description":"Invoice status: DRAFT=Editable draft, ISSUED=Issued invoice (default), PENDING_KSEF=Pending KSeF submission (readonly), SENT_KSEF=Sent to KSeF system (readonly)","type":"string","enum":["DRAFT","ISSUED","PENDING_KSEF","SENT_KSEF"]},"ksefId":{"description":"KSeF (Polish National e-Invoice System) unique identifier. Readonly - set automatically by backend when invoice is sent to KSeF.","type":"string","nullable":true},"invoiceType":{"description":"Invoice type: 0=Standard Invoice, 1=VAT Invoice, 2=Pro Forma Invoice, 3=Advance Invoice, 4=Correction Invoice, 5=VAT Exempt Invoice, 6=Advance Receipt, 7=Correction Receipt, 8=KSeF Advance Invoice, 9=KSeF Settlement Invoice, 10=KSeF Correction Invoice, 11=KSeF Advance Correction Invoice, 12=KSeF Settlement Correction Invoice","type":"integer","enum":[0,1,2,3,4,5,6,7,8,9,10,11,12]},"buyer":{"properties":{"companyName":{"type":"string"},"address":{"type":"string"},"taxId":{"type":"string"},"identifierType":{"description":"Buyer identifier type for KSeF: NIP=Polish tax ID (10-digit), VAT_UE=EU VAT number (requires countryCode), OTHER=Foreign/other identifier (countryCode optional), NONE=No identifier (BrakID)","type":"string","enum":["NIP","VAT_UE","OTHER","NONE"]},"countryCode":{"description":"ISO 3166-1 alpha-2 country code (e.g. PL, DE, CZ). Required when identifierType=VAT_UE, optional for OTHER.","type":"string","nullable":true}},"type":"object"},"seller":{"properties":{"companyName":{"type":"string"},"address":{"type":"string"},"taxId":{"type":"string"},"bankNo":{"type":"string"}},"type":"object"},"receiver":{"properties":{"companyName":{"type":"string"},"address":{"type":"string"},"taxId":{"type":"string"},"identifierType":{"description":"Receiver identifier type for KSeF: NIP=Polish tax ID, VAT_UE=EU VAT number (requires countryCode), OTHER=Foreign/other identifier, NONE=No identifier","type":"string","enum":["NIP","VAT_UE","OTHER","NONE"],"nullable":true},"countryCode":{"description":"ISO 3166-1 alpha-2 country code for receiver.","type":"string","nullable":true},"bankNo":{"type":"string"}},"type":"object"},"invoiceItems":{"type":"array","items":{"$ref":"#/components/schemas/InvoiceItem"}},"paymentType":{"description":"Payment method: 0=None, 1=Cash, 2=Bank Transfer, 3=Credit Card, 4=Virtual Card, 5=Online Payment","type":"integer","enum":[0,1,2,3,4,5]},"paymentStatus":{"description":"Payment status: 0=Unpaid, 1=Paid","type":"integer","enum":[0,1]},"issueDate":{"type":"string","format":"date"},"saleDate":{"type":"string","format":"date"},"town":{"type":"string"},"paymentDate":{"type":"string","format":"date"},"currency":{"type":"string"},"additionalInfo":{"type":"string","nullable":true},"correctionReason":{"description":"Reason for correction. Used only for correction invoice types (6, 10, 11, 12). Sent to KSeF as PrzyczynaKorekty in the FA(3) XML.","type":"string","maxLength":1024,"nullable":true},"personCollect":{"type":"string","nullable":true},"personIssue":{"type":"string","nullable":true},"clientId":{"type":"integer","nullable":true},"reservationId":{"type":"integer","nullable":true},"exemptionBasis":{"description":"Tax exemption legal basis ID or custom text. Only present if invoice has items with 'zw' VAT rate.","type":"string","nullable":true},"exchangeRate":{"description":"Currency exchange rate to PLN. Automatically fetched when invoice currency is not PLN and user is connected to KSeF. Readonly.","type":"number","format":"float","nullable":true},"prepaymentValue":{"description":"For invoiceType=8 (KSeF Advance Invoice): advance payment gross amount (must be > 0, cannot exceed total order value). For invoiceType=9 (KSeF Settlement Invoice): remaining amount to pay after advance payments (must be >= 0). Not used for other invoice types.","type":"number","format":"float","nullable":true},"addDate":{"type":"string","format":"date-time"},"editDate":{"type":"string","format":"date-time"}},"type":"object"},"InvoiceItem":{"description":"Invoice item - single position on invoice","required":["invoiceId","positionId","userId","status","name","grossUnitPrice","quantity","unit","rate","symbol"],"properties":{"invoiceId":{"type":"integer"},"positionId":{"type":"integer"},"userId":{"type":"integer"},"status":{"type":"integer","enum":[0,1]},"name":{"type":"string"},"grossUnitPrice":{"type":"number","format":"float"},"quantity":{"type":"number","format":"float"},"unit":{"type":"string"},"rate":{"type":"string"},"symbol":{"type":"string"}},"type":"object"},"MetaWithPagination":{"description":"Pagination parameters with request tracking in list responses.","required":["totalItems","currentPage","totalPages","itemsPerPage","ruid"],"properties":{"totalItems":{"type":"integer","minimum":0},"currentPage":{"type":"integer","minimum":1},"totalPages":{"type":"integer","minimum":0},"itemsPerPage":{"type":"integer","minimum":1},"ruid":{"description":"Request Unique ID","type":"string","format":"uuid"}},"type":"object"}}}}
```

## The InvoiceResponse object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"InvoiceResponse":{"description":"Single invoice response","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/Invoice"},"meta":{"$ref":"#/components/schemas/MetaWithRuid"}},"type":"object"},"Invoice":{"description":"Invoice with buyer, seller, receiver data and invoice items","required":["invoiceId","invoiceNo","invoiceFullNo","invoiceType","buyer","seller","receiver","invoiceItems","paymentType","paymentStatus","issueDate","saleDate","paymentDate","currency"],"properties":{"invoiceId":{"type":"integer"},"invoiceNo":{"type":"integer"},"invoiceFullNo":{"type":"string"},"format":{"type":"string"},"extraChar":{"type":"string"},"invoiceStatus":{"description":"Invoice status: DRAFT=Editable draft, ISSUED=Issued invoice (default), PENDING_KSEF=Pending KSeF submission (readonly), SENT_KSEF=Sent to KSeF system (readonly)","type":"string","enum":["DRAFT","ISSUED","PENDING_KSEF","SENT_KSEF"]},"ksefId":{"description":"KSeF (Polish National e-Invoice System) unique identifier. Readonly - set automatically by backend when invoice is sent to KSeF.","type":"string","nullable":true},"invoiceType":{"description":"Invoice type: 0=Standard Invoice, 1=VAT Invoice, 2=Pro Forma Invoice, 3=Advance Invoice, 4=Correction Invoice, 5=VAT Exempt Invoice, 6=Advance Receipt, 7=Correction Receipt, 8=KSeF Advance Invoice, 9=KSeF Settlement Invoice, 10=KSeF Correction Invoice, 11=KSeF Advance Correction Invoice, 12=KSeF Settlement Correction Invoice","type":"integer","enum":[0,1,2,3,4,5,6,7,8,9,10,11,12]},"buyer":{"properties":{"companyName":{"type":"string"},"address":{"type":"string"},"taxId":{"type":"string"},"identifierType":{"description":"Buyer identifier type for KSeF: NIP=Polish tax ID (10-digit), VAT_UE=EU VAT number (requires countryCode), OTHER=Foreign/other identifier (countryCode optional), NONE=No identifier (BrakID)","type":"string","enum":["NIP","VAT_UE","OTHER","NONE"]},"countryCode":{"description":"ISO 3166-1 alpha-2 country code (e.g. PL, DE, CZ). Required when identifierType=VAT_UE, optional for OTHER.","type":"string","nullable":true}},"type":"object"},"seller":{"properties":{"companyName":{"type":"string"},"address":{"type":"string"},"taxId":{"type":"string"},"bankNo":{"type":"string"}},"type":"object"},"receiver":{"properties":{"companyName":{"type":"string"},"address":{"type":"string"},"taxId":{"type":"string"},"identifierType":{"description":"Receiver identifier type for KSeF: NIP=Polish tax ID, VAT_UE=EU VAT number (requires countryCode), OTHER=Foreign/other identifier, NONE=No identifier","type":"string","enum":["NIP","VAT_UE","OTHER","NONE"],"nullable":true},"countryCode":{"description":"ISO 3166-1 alpha-2 country code for receiver.","type":"string","nullable":true},"bankNo":{"type":"string"}},"type":"object"},"invoiceItems":{"type":"array","items":{"$ref":"#/components/schemas/InvoiceItem"}},"paymentType":{"description":"Payment method: 0=None, 1=Cash, 2=Bank Transfer, 3=Credit Card, 4=Virtual Card, 5=Online Payment","type":"integer","enum":[0,1,2,3,4,5]},"paymentStatus":{"description":"Payment status: 0=Unpaid, 1=Paid","type":"integer","enum":[0,1]},"issueDate":{"type":"string","format":"date"},"saleDate":{"type":"string","format":"date"},"town":{"type":"string"},"paymentDate":{"type":"string","format":"date"},"currency":{"type":"string"},"additionalInfo":{"type":"string","nullable":true},"correctionReason":{"description":"Reason for correction. Used only for correction invoice types (6, 10, 11, 12). Sent to KSeF as PrzyczynaKorekty in the FA(3) XML.","type":"string","maxLength":1024,"nullable":true},"personCollect":{"type":"string","nullable":true},"personIssue":{"type":"string","nullable":true},"clientId":{"type":"integer","nullable":true},"reservationId":{"type":"integer","nullable":true},"exemptionBasis":{"description":"Tax exemption legal basis ID or custom text. Only present if invoice has items with 'zw' VAT rate.","type":"string","nullable":true},"exchangeRate":{"description":"Currency exchange rate to PLN. Automatically fetched when invoice currency is not PLN and user is connected to KSeF. Readonly.","type":"number","format":"float","nullable":true},"prepaymentValue":{"description":"For invoiceType=8 (KSeF Advance Invoice): advance payment gross amount (must be > 0, cannot exceed total order value). For invoiceType=9 (KSeF Settlement Invoice): remaining amount to pay after advance payments (must be >= 0). Not used for other invoice types.","type":"number","format":"float","nullable":true},"addDate":{"type":"string","format":"date-time"},"editDate":{"type":"string","format":"date-time"}},"type":"object"},"InvoiceItem":{"description":"Invoice item - single position on invoice","required":["invoiceId","positionId","userId","status","name","grossUnitPrice","quantity","unit","rate","symbol"],"properties":{"invoiceId":{"type":"integer"},"positionId":{"type":"integer"},"userId":{"type":"integer"},"status":{"type":"integer","enum":[0,1]},"name":{"type":"string"},"grossUnitPrice":{"type":"number","format":"float"},"quantity":{"type":"number","format":"float"},"unit":{"type":"string"},"rate":{"type":"string"},"symbol":{"type":"string"}},"type":"object"},"MetaWithRuid":{"description":"Metadata with request tracking.","required":["ruid"],"properties":{"ruid":{"description":"Request Unique ID","type":"string","format":"uuid"}},"type":"object"}}}}
```

## The InvoiceCreateResponse object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"InvoiceCreateResponse":{"description":"Created invoice response with Location header","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/Invoice"},"meta":{"$ref":"#/components/schemas/MetaWithRuid"}},"type":"object"},"Invoice":{"description":"Invoice with buyer, seller, receiver data and invoice items","required":["invoiceId","invoiceNo","invoiceFullNo","invoiceType","buyer","seller","receiver","invoiceItems","paymentType","paymentStatus","issueDate","saleDate","paymentDate","currency"],"properties":{"invoiceId":{"type":"integer"},"invoiceNo":{"type":"integer"},"invoiceFullNo":{"type":"string"},"format":{"type":"string"},"extraChar":{"type":"string"},"invoiceStatus":{"description":"Invoice status: DRAFT=Editable draft, ISSUED=Issued invoice (default), PENDING_KSEF=Pending KSeF submission (readonly), SENT_KSEF=Sent to KSeF system (readonly)","type":"string","enum":["DRAFT","ISSUED","PENDING_KSEF","SENT_KSEF"]},"ksefId":{"description":"KSeF (Polish National e-Invoice System) unique identifier. Readonly - set automatically by backend when invoice is sent to KSeF.","type":"string","nullable":true},"invoiceType":{"description":"Invoice type: 0=Standard Invoice, 1=VAT Invoice, 2=Pro Forma Invoice, 3=Advance Invoice, 4=Correction Invoice, 5=VAT Exempt Invoice, 6=Advance Receipt, 7=Correction Receipt, 8=KSeF Advance Invoice, 9=KSeF Settlement Invoice, 10=KSeF Correction Invoice, 11=KSeF Advance Correction Invoice, 12=KSeF Settlement Correction Invoice","type":"integer","enum":[0,1,2,3,4,5,6,7,8,9,10,11,12]},"buyer":{"properties":{"companyName":{"type":"string"},"address":{"type":"string"},"taxId":{"type":"string"},"identifierType":{"description":"Buyer identifier type for KSeF: NIP=Polish tax ID (10-digit), VAT_UE=EU VAT number (requires countryCode), OTHER=Foreign/other identifier (countryCode optional), NONE=No identifier (BrakID)","type":"string","enum":["NIP","VAT_UE","OTHER","NONE"]},"countryCode":{"description":"ISO 3166-1 alpha-2 country code (e.g. PL, DE, CZ). Required when identifierType=VAT_UE, optional for OTHER.","type":"string","nullable":true}},"type":"object"},"seller":{"properties":{"companyName":{"type":"string"},"address":{"type":"string"},"taxId":{"type":"string"},"bankNo":{"type":"string"}},"type":"object"},"receiver":{"properties":{"companyName":{"type":"string"},"address":{"type":"string"},"taxId":{"type":"string"},"identifierType":{"description":"Receiver identifier type for KSeF: NIP=Polish tax ID, VAT_UE=EU VAT number (requires countryCode), OTHER=Foreign/other identifier, NONE=No identifier","type":"string","enum":["NIP","VAT_UE","OTHER","NONE"],"nullable":true},"countryCode":{"description":"ISO 3166-1 alpha-2 country code for receiver.","type":"string","nullable":true},"bankNo":{"type":"string"}},"type":"object"},"invoiceItems":{"type":"array","items":{"$ref":"#/components/schemas/InvoiceItem"}},"paymentType":{"description":"Payment method: 0=None, 1=Cash, 2=Bank Transfer, 3=Credit Card, 4=Virtual Card, 5=Online Payment","type":"integer","enum":[0,1,2,3,4,5]},"paymentStatus":{"description":"Payment status: 0=Unpaid, 1=Paid","type":"integer","enum":[0,1]},"issueDate":{"type":"string","format":"date"},"saleDate":{"type":"string","format":"date"},"town":{"type":"string"},"paymentDate":{"type":"string","format":"date"},"currency":{"type":"string"},"additionalInfo":{"type":"string","nullable":true},"correctionReason":{"description":"Reason for correction. Used only for correction invoice types (6, 10, 11, 12). Sent to KSeF as PrzyczynaKorekty in the FA(3) XML.","type":"string","maxLength":1024,"nullable":true},"personCollect":{"type":"string","nullable":true},"personIssue":{"type":"string","nullable":true},"clientId":{"type":"integer","nullable":true},"reservationId":{"type":"integer","nullable":true},"exemptionBasis":{"description":"Tax exemption legal basis ID or custom text. Only present if invoice has items with 'zw' VAT rate.","type":"string","nullable":true},"exchangeRate":{"description":"Currency exchange rate to PLN. Automatically fetched when invoice currency is not PLN and user is connected to KSeF. Readonly.","type":"number","format":"float","nullable":true},"prepaymentValue":{"description":"For invoiceType=8 (KSeF Advance Invoice): advance payment gross amount (must be > 0, cannot exceed total order value). For invoiceType=9 (KSeF Settlement Invoice): remaining amount to pay after advance payments (must be >= 0). Not used for other invoice types.","type":"number","format":"float","nullable":true},"addDate":{"type":"string","format":"date-time"},"editDate":{"type":"string","format":"date-time"}},"type":"object"},"InvoiceItem":{"description":"Invoice item - single position on invoice","required":["invoiceId","positionId","userId","status","name","grossUnitPrice","quantity","unit","rate","symbol"],"properties":{"invoiceId":{"type":"integer"},"positionId":{"type":"integer"},"userId":{"type":"integer"},"status":{"type":"integer","enum":[0,1]},"name":{"type":"string"},"grossUnitPrice":{"type":"number","format":"float"},"quantity":{"type":"number","format":"float"},"unit":{"type":"string"},"rate":{"type":"string"},"symbol":{"type":"string"}},"type":"object"},"MetaWithRuid":{"description":"Metadata with request tracking.","required":["ruid"],"properties":{"ruid":{"description":"Request Unique ID","type":"string","format":"uuid"}},"type":"object"}}}}
```

## The SmtpAccount object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"SmtpAccount":{"description":"SMTP account available for sending e-mails.","required":["smtpId","email","hostName","securityType","isVerified"],"properties":{"smtpId":{"type":"integer"},"email":{"type":"string","format":"email"},"hostName":{"type":"string"},"port":{"type":"integer","nullable":true},"securityType":{"type":"string","enum":["ssl","tls","none"]},"isVerified":{"description":"Only verified accounts can be used for sending.","type":"boolean"}},"type":"object"}}}}
```

## The SmtpAccountListResponse object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"SmtpAccountListResponse":{"required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SmtpAccount"}},"meta":{"$ref":"#/components/schemas/MetaWithRuid"}},"type":"object"},"SmtpAccount":{"description":"SMTP account available for sending e-mails.","required":["smtpId","email","hostName","securityType","isVerified"],"properties":{"smtpId":{"type":"integer"},"email":{"type":"string","format":"email"},"hostName":{"type":"string"},"port":{"type":"integer","nullable":true},"securityType":{"type":"string","enum":["ssl","tls","none"]},"isVerified":{"description":"Only verified accounts can be used for sending.","type":"boolean"}},"type":"object"},"MetaWithRuid":{"description":"Metadata with request tracking.","required":["ruid"],"properties":{"ruid":{"description":"Request Unique ID","type":"string","format":"uuid"}},"type":"object"}}}}
```

## The AttachmentBase64 object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"AttachmentBase64":{"description":"E-mail attachment sent inline as base64. Allowed extensions: pdf, doc, docx, odt, rtf, txt, csv, xls, xlsx, ods, ppt, pptx, odp, jpg, jpeg, png, gif, bmp, tiff, tif, webp, zip, 7z, ics.","required":["fileName","data"],"properties":{"fileName":{"type":"string","maxLength":100},"data":{"description":"Base64-encoded file content. An optional `data:<mime>;base64,` prefix is accepted.","type":"string","format":"byte"}},"type":"object"}}}}
```

## The EmailMessageRequest object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"EmailMessageRequest":{"description":"Send an e-mail related to a reservation. `{tags}` (e.g. `{forename}`, `{arrival}`, `{room_name}`) and `[[dynamic_tags]]` (e.g. `[[online_check_in_link]]`) in `subject` and `message` are replaced with reservation data before sending.","required":["smtpId","recipients","subject","message"],"properties":{"smtpId":{"description":"ID of a verified SMTP account (see GET /smtp-accounts).","type":"integer"},"recipients":{"type":"array","items":{"type":"string","format":"email"},"maxItems":20},"subject":{"type":"string","maxLength":255},"message":{"description":"HTML message body. Only allowlisted tags are kept (e.g. div, p, br, b, a, img, table) and attributes are sanitized: event handlers (on*), `javascript:`/`data:text/html` URLs and dangerous CSS are removed.","type":"string"},"senderName":{"description":"Optional display name shown as the sender (the `From` name) instead of just the e-mail address. Plain text — HTML tags and line breaks are stripped.","type":"string","maxLength":255,"nullable":true},"sendCopyToSender":{"type":"boolean","default":false},"templateName":{"description":"Optional template name stored with the sent message.","type":"string","maxLength":255,"nullable":true},"attachments":{"description":"Attachments as base64 (max 10 files, max 10 MB total after decoding).","type":"array","items":{"$ref":"#/components/schemas/AttachmentBase64"},"maxItems":10}},"type":"object"},"AttachmentBase64":{"description":"E-mail attachment sent inline as base64. Allowed extensions: pdf, doc, docx, odt, rtf, txt, csv, xls, xlsx, ods, ppt, pptx, odp, jpg, jpeg, png, gif, bmp, tiff, tif, webp, zip, 7z, ics.","required":["fileName","data"],"properties":{"fileName":{"type":"string","maxLength":100},"data":{"description":"Base64-encoded file content. An optional `data:<mime>;base64,` prefix is accepted.","type":"string","format":"byte"}},"type":"object"}}}}
```

## The SmsMessageRequest object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"SmsMessageRequest":{"description":"Send an SMS related to a reservation. `{tags}` and `[[dynamic_tags]]` in `message` are replaced with reservation data before sending. Requires SMS API configuration in the account.","required":["phone","message"],"properties":{"phone":{"type":"string","maxLength":20},"message":{"type":"string","maxLength":1000}},"type":"object"}}}}
```

## The MessageSentResponse object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"MessageSentResponse":{"required":["data","meta"],"properties":{"data":{"required":["messageId"],"properties":{"messageId":{"description":"ID of the stored sent message.","type":"integer"}},"type":"object"},"meta":{"$ref":"#/components/schemas/MetaWithRuid"}},"type":"object"},"MetaWithRuid":{"description":"Metadata with request tracking.","required":["ruid"],"properties":{"ruid":{"description":"Request Unique ID","type":"string","format":"uuid"}},"type":"object"}}}}
```

## The OccupancyPrice object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"OccupancyPrice":{"description":"Price for specific number of persons","required":["persons","price"],"properties":{"persons":{"description":"Number of persons","type":"integer"},"price":{"description":"Price for this occupancy level","type":"number","format":"float"}},"type":"object"}}}}
```

## The PriceRestrictions object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"PriceRestrictions":{"description":"Booking restrictions for a specific date","properties":{"minStay":{"description":"Minimum stay requirement in nights","type":"integer","nullable":true},"maxStay":{"description":"Maximum stay allowed in nights","type":"integer","nullable":true},"closed":{"description":"Whether this date is closed for bookings (0=open, 1=closed)","type":"integer"},"availArrival":{"description":"Whether arrival is allowed on this date (0=no, 1=yes)","type":"integer"},"availDeparture":{"description":"Whether departure is allowed on this date (0=no, 1=yes)","type":"integer"},"minAdvanceRes":{"description":"Minimum advance reservation days","type":"integer","nullable":true},"maxAdvanceRes":{"description":"Maximum advance reservation days","type":"integer","nullable":true}},"type":"object"}}}}
```

## The DailyPrice object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"DailyPrice":{"description":"Price information for a specific date","required":["date","basePrice"],"properties":{"date":{"type":"string","format":"date"},"basePrice":{"description":"Base price for the leading occupancy","type":"number","format":"float"},"restrictions":{"oneOf":[{"$ref":"#/components/schemas/PriceRestrictions"}],"nullable":true,"description":"Booking restrictions for this date"},"derivedPrices":{"description":"Prices for different occupancy levels","type":"array","items":{"$ref":"#/components/schemas/OccupancyPrice"},"nullable":true}},"type":"object"},"PriceRestrictions":{"description":"Booking restrictions for a specific date","properties":{"minStay":{"description":"Minimum stay requirement in nights","type":"integer","nullable":true},"maxStay":{"description":"Maximum stay allowed in nights","type":"integer","nullable":true},"closed":{"description":"Whether this date is closed for bookings (0=open, 1=closed)","type":"integer"},"availArrival":{"description":"Whether arrival is allowed on this date (0=no, 1=yes)","type":"integer"},"availDeparture":{"description":"Whether departure is allowed on this date (0=no, 1=yes)","type":"integer"},"minAdvanceRes":{"description":"Minimum advance reservation days","type":"integer","nullable":true},"maxAdvanceRes":{"description":"Maximum advance reservation days","type":"integer","nullable":true}},"type":"object"},"OccupancyPrice":{"description":"Price for specific number of persons","required":["persons","price"],"properties":{"persons":{"description":"Number of persons","type":"integer"},"price":{"description":"Price for this occupancy level","type":"number","format":"float"}},"type":"object"}}}}
```

## The Rate object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"Rate":{"description":"Rate information with cancellation policy","required":["rateId","name"],"properties":{"rateId":{"type":"integer"},"name":{"description":"Rate name","type":"string"},"parentRateId":{"description":"Parent rate ID for derived rates","type":"integer","nullable":true},"percentage":{"description":"Percentage modifier from parent rate","type":"number","format":"float","nullable":true},"cancellationPolicy":{"oneOf":[{"$ref":"#/components/schemas/CancellationPolicy"}],"nullable":true,"description":"Cancellation policy for this rate"}},"type":"object"},"CancellationPolicy":{"description":"Cancellation policy details","required":["cancellationId","type"],"properties":{"cancellationId":{"type":"integer"},"type":{"type":"string","enum":["REFUNDABLE","NONREFUNDABLE"]},"cancellationPenaltyPercentageAfterDeadline":{"description":"Penalty percentage after deadline","type":"integer","nullable":true},"deadlineDays":{"description":"Deadline in days before arrival","type":"integer","nullable":true},"deadlineHours":{"description":"Deadline in hours before arrival","type":"integer","nullable":true},"cancellationPenaltyNightsAfterDeadline":{"description":"Penalty in nights after deadline","type":"integer","nullable":true},"noShow":{"description":"No-show policy","type":"string"},"prepaymentPercentage":{"description":"Required prepayment percentage","type":"integer","nullable":true},"prepaymentFirstNight":{"description":"Whether prepayment covers first night only","type":"boolean"}},"type":"object"}}}}
```

## The PricingEntry object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"PricingEntry":{"description":"Pricing entry for a specific room or room type with rate","properties":{"roomId":{"description":"Room ID (null for room type pricing)","type":"integer","nullable":true},"typeId":{"description":"Room type ID (null for individual room pricing)","type":"integer","nullable":true},"prices":{"description":"Daily prices for the requested date range","type":"array","items":{"$ref":"#/components/schemas/DailyPrice"}},"rate":{"$ref":"#/components/schemas/Rate"}},"type":"object"},"DailyPrice":{"description":"Price information for a specific date","required":["date","basePrice"],"properties":{"date":{"type":"string","format":"date"},"basePrice":{"description":"Base price for the leading occupancy","type":"number","format":"float"},"restrictions":{"oneOf":[{"$ref":"#/components/schemas/PriceRestrictions"}],"nullable":true,"description":"Booking restrictions for this date"},"derivedPrices":{"description":"Prices for different occupancy levels","type":"array","items":{"$ref":"#/components/schemas/OccupancyPrice"},"nullable":true}},"type":"object"},"PriceRestrictions":{"description":"Booking restrictions for a specific date","properties":{"minStay":{"description":"Minimum stay requirement in nights","type":"integer","nullable":true},"maxStay":{"description":"Maximum stay allowed in nights","type":"integer","nullable":true},"closed":{"description":"Whether this date is closed for bookings (0=open, 1=closed)","type":"integer"},"availArrival":{"description":"Whether arrival is allowed on this date (0=no, 1=yes)","type":"integer"},"availDeparture":{"description":"Whether departure is allowed on this date (0=no, 1=yes)","type":"integer"},"minAdvanceRes":{"description":"Minimum advance reservation days","type":"integer","nullable":true},"maxAdvanceRes":{"description":"Maximum advance reservation days","type":"integer","nullable":true}},"type":"object"},"OccupancyPrice":{"description":"Price for specific number of persons","required":["persons","price"],"properties":{"persons":{"description":"Number of persons","type":"integer"},"price":{"description":"Price for this occupancy level","type":"number","format":"float"}},"type":"object"},"Rate":{"description":"Rate information with cancellation policy","required":["rateId","name"],"properties":{"rateId":{"type":"integer"},"name":{"description":"Rate name","type":"string"},"parentRateId":{"description":"Parent rate ID for derived rates","type":"integer","nullable":true},"percentage":{"description":"Percentage modifier from parent rate","type":"number","format":"float","nullable":true},"cancellationPolicy":{"oneOf":[{"$ref":"#/components/schemas/CancellationPolicy"}],"nullable":true,"description":"Cancellation policy for this rate"}},"type":"object"},"CancellationPolicy":{"description":"Cancellation policy details","required":["cancellationId","type"],"properties":{"cancellationId":{"type":"integer"},"type":{"type":"string","enum":["REFUNDABLE","NONREFUNDABLE"]},"cancellationPenaltyPercentageAfterDeadline":{"description":"Penalty percentage after deadline","type":"integer","nullable":true},"deadlineDays":{"description":"Deadline in days before arrival","type":"integer","nullable":true},"deadlineHours":{"description":"Deadline in hours before arrival","type":"integer","nullable":true},"cancellationPenaltyNightsAfterDeadline":{"description":"Penalty in nights after deadline","type":"integer","nullable":true},"noShow":{"description":"No-show policy","type":"string"},"prepaymentPercentage":{"description":"Required prepayment percentage","type":"integer","nullable":true},"prepaymentFirstNight":{"description":"Whether prepayment covers first night only","type":"boolean"}},"type":"object"}}}}
```

## The PricingResponse object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"PricingResponse":{"description":"Pricing response for specified date range, rooms/types, and rates","required":["data","meta"],"properties":{"data":{"description":"Pricing data for all requested rooms/types and rates","type":"array","items":{"$ref":"#/components/schemas/PricingEntry"}},"meta":{"$ref":"#/components/schemas/MetaWithRuid"}},"type":"object"},"PricingEntry":{"description":"Pricing entry for a specific room or room type with rate","properties":{"roomId":{"description":"Room ID (null for room type pricing)","type":"integer","nullable":true},"typeId":{"description":"Room type ID (null for individual room pricing)","type":"integer","nullable":true},"prices":{"description":"Daily prices for the requested date range","type":"array","items":{"$ref":"#/components/schemas/DailyPrice"}},"rate":{"$ref":"#/components/schemas/Rate"}},"type":"object"},"DailyPrice":{"description":"Price information for a specific date","required":["date","basePrice"],"properties":{"date":{"type":"string","format":"date"},"basePrice":{"description":"Base price for the leading occupancy","type":"number","format":"float"},"restrictions":{"oneOf":[{"$ref":"#/components/schemas/PriceRestrictions"}],"nullable":true,"description":"Booking restrictions for this date"},"derivedPrices":{"description":"Prices for different occupancy levels","type":"array","items":{"$ref":"#/components/schemas/OccupancyPrice"},"nullable":true}},"type":"object"},"PriceRestrictions":{"description":"Booking restrictions for a specific date","properties":{"minStay":{"description":"Minimum stay requirement in nights","type":"integer","nullable":true},"maxStay":{"description":"Maximum stay allowed in nights","type":"integer","nullable":true},"closed":{"description":"Whether this date is closed for bookings (0=open, 1=closed)","type":"integer"},"availArrival":{"description":"Whether arrival is allowed on this date (0=no, 1=yes)","type":"integer"},"availDeparture":{"description":"Whether departure is allowed on this date (0=no, 1=yes)","type":"integer"},"minAdvanceRes":{"description":"Minimum advance reservation days","type":"integer","nullable":true},"maxAdvanceRes":{"description":"Maximum advance reservation days","type":"integer","nullable":true}},"type":"object"},"OccupancyPrice":{"description":"Price for specific number of persons","required":["persons","price"],"properties":{"persons":{"description":"Number of persons","type":"integer"},"price":{"description":"Price for this occupancy level","type":"number","format":"float"}},"type":"object"},"Rate":{"description":"Rate information with cancellation policy","required":["rateId","name"],"properties":{"rateId":{"type":"integer"},"name":{"description":"Rate name","type":"string"},"parentRateId":{"description":"Parent rate ID for derived rates","type":"integer","nullable":true},"percentage":{"description":"Percentage modifier from parent rate","type":"number","format":"float","nullable":true},"cancellationPolicy":{"oneOf":[{"$ref":"#/components/schemas/CancellationPolicy"}],"nullable":true,"description":"Cancellation policy for this rate"}},"type":"object"},"CancellationPolicy":{"description":"Cancellation policy details","required":["cancellationId","type"],"properties":{"cancellationId":{"type":"integer"},"type":{"type":"string","enum":["REFUNDABLE","NONREFUNDABLE"]},"cancellationPenaltyPercentageAfterDeadline":{"description":"Penalty percentage after deadline","type":"integer","nullable":true},"deadlineDays":{"description":"Deadline in days before arrival","type":"integer","nullable":true},"deadlineHours":{"description":"Deadline in hours before arrival","type":"integer","nullable":true},"cancellationPenaltyNightsAfterDeadline":{"description":"Penalty in nights after deadline","type":"integer","nullable":true},"noShow":{"description":"No-show policy","type":"string"},"prepaymentPercentage":{"description":"Required prepayment percentage","type":"integer","nullable":true},"prepaymentFirstNight":{"description":"Whether prepayment covers first night only","type":"boolean"}},"type":"object"},"MetaWithRuid":{"description":"Metadata with request tracking.","required":["ruid"],"properties":{"ruid":{"description":"Request Unique ID","type":"string","format":"uuid"}},"type":"object"}}}}
```

## The RateRelation object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"RateRelation":{"description":"Rate relation configuration - either percentage or additional amount","properties":{"percentage":{"description":"Percentage modifier from parent rate","type":"integer","nullable":true},"additional":{"description":"Additional amount to parent rate","type":"number","format":"float","nullable":true}},"type":"object"}}}}
```

## The CancellationPolicy object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"CancellationPolicy":{"description":"Cancellation policy details","required":["cancellationId","type"],"properties":{"cancellationId":{"type":"integer"},"type":{"type":"string","enum":["REFUNDABLE","NONREFUNDABLE"]},"cancellationPenaltyPercentageAfterDeadline":{"description":"Penalty percentage after deadline","type":"integer","nullable":true},"deadlineDays":{"description":"Deadline in days before arrival","type":"integer","nullable":true},"deadlineHours":{"description":"Deadline in hours before arrival","type":"integer","nullable":true},"cancellationPenaltyNightsAfterDeadline":{"description":"Penalty in nights after deadline","type":"integer","nullable":true},"noShow":{"description":"No-show policy","type":"string"},"prepaymentPercentage":{"description":"Required prepayment percentage","type":"integer","nullable":true},"prepaymentFirstNight":{"description":"Whether prepayment covers first night only","type":"boolean"}},"type":"object"}}}}
```

## The RateEntry object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"RateEntry":{"description":"Rate configuration with pricing rules and restrictions","required":["rateId","name","cancellationId","meals"],"properties":{"rateId":{"description":"Unique rate identifier","type":"integer"},"name":{"description":"Rate name","type":"string"},"cancellationId":{"description":"Cancellation policy ID","type":"integer"},"meals":{"description":"Meal plan type: 0=OV, 1=BB, 2=HB, 3=FB, 4=AI, 5=DINNER, 6=BREAKFAST_SUPPER, 7=DINNER_SUPPER, 8=SUPPER","type":"integer"},"parentRateId":{"description":"Parent rate ID for derived rates","type":"integer","nullable":true},"rateRelation":{"oneOf":[{"$ref":"#/components/schemas/RateRelation"}],"nullable":true,"description":"Rate relation configuration (only for derived rates)"},"rooms":{"description":"Room IDs this rate applies to. null=all rooms, []=no rooms, [ids]=specific rooms","type":"array","items":{"type":"integer"},"nullable":true},"types":{"description":"Room type IDs this rate applies to. null=all types, []=no types, [ids]=specific types","type":"array","items":{"type":"integer"},"nullable":true},"cancellationPolicy":{"$ref":"#/components/schemas/CancellationPolicy"}},"type":"object"},"RateRelation":{"description":"Rate relation configuration - either percentage or additional amount","properties":{"percentage":{"description":"Percentage modifier from parent rate","type":"integer","nullable":true},"additional":{"description":"Additional amount to parent rate","type":"number","format":"float","nullable":true}},"type":"object"},"CancellationPolicy":{"description":"Cancellation policy details","required":["cancellationId","type"],"properties":{"cancellationId":{"type":"integer"},"type":{"type":"string","enum":["REFUNDABLE","NONREFUNDABLE"]},"cancellationPenaltyPercentageAfterDeadline":{"description":"Penalty percentage after deadline","type":"integer","nullable":true},"deadlineDays":{"description":"Deadline in days before arrival","type":"integer","nullable":true},"deadlineHours":{"description":"Deadline in hours before arrival","type":"integer","nullable":true},"cancellationPenaltyNightsAfterDeadline":{"description":"Penalty in nights after deadline","type":"integer","nullable":true},"noShow":{"description":"No-show policy","type":"string"},"prepaymentPercentage":{"description":"Required prepayment percentage","type":"integer","nullable":true},"prepaymentFirstNight":{"description":"Whether prepayment covers first night only","type":"boolean"}},"type":"object"}}}}
```

## The RatesResponse object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"RatesResponse":{"description":"Response containing all available rates","required":["data","meta"],"properties":{"data":{"description":"List of all available rates","type":"array","items":{"$ref":"#/components/schemas/RateEntry"}},"meta":{"$ref":"#/components/schemas/MetaWithRuid"}},"type":"object"},"RateEntry":{"description":"Rate configuration with pricing rules and restrictions","required":["rateId","name","cancellationId","meals"],"properties":{"rateId":{"description":"Unique rate identifier","type":"integer"},"name":{"description":"Rate name","type":"string"},"cancellationId":{"description":"Cancellation policy ID","type":"integer"},"meals":{"description":"Meal plan type: 0=OV, 1=BB, 2=HB, 3=FB, 4=AI, 5=DINNER, 6=BREAKFAST_SUPPER, 7=DINNER_SUPPER, 8=SUPPER","type":"integer"},"parentRateId":{"description":"Parent rate ID for derived rates","type":"integer","nullable":true},"rateRelation":{"oneOf":[{"$ref":"#/components/schemas/RateRelation"}],"nullable":true,"description":"Rate relation configuration (only for derived rates)"},"rooms":{"description":"Room IDs this rate applies to. null=all rooms, []=no rooms, [ids]=specific rooms","type":"array","items":{"type":"integer"},"nullable":true},"types":{"description":"Room type IDs this rate applies to. null=all types, []=no types, [ids]=specific types","type":"array","items":{"type":"integer"},"nullable":true},"cancellationPolicy":{"$ref":"#/components/schemas/CancellationPolicy"}},"type":"object"},"RateRelation":{"description":"Rate relation configuration - either percentage or additional amount","properties":{"percentage":{"description":"Percentage modifier from parent rate","type":"integer","nullable":true},"additional":{"description":"Additional amount to parent rate","type":"number","format":"float","nullable":true}},"type":"object"},"CancellationPolicy":{"description":"Cancellation policy details","required":["cancellationId","type"],"properties":{"cancellationId":{"type":"integer"},"type":{"type":"string","enum":["REFUNDABLE","NONREFUNDABLE"]},"cancellationPenaltyPercentageAfterDeadline":{"description":"Penalty percentage after deadline","type":"integer","nullable":true},"deadlineDays":{"description":"Deadline in days before arrival","type":"integer","nullable":true},"deadlineHours":{"description":"Deadline in hours before arrival","type":"integer","nullable":true},"cancellationPenaltyNightsAfterDeadline":{"description":"Penalty in nights after deadline","type":"integer","nullable":true},"noShow":{"description":"No-show policy","type":"string"},"prepaymentPercentage":{"description":"Required prepayment percentage","type":"integer","nullable":true},"prepaymentFirstNight":{"description":"Whether prepayment covers first night only","type":"boolean"}},"type":"object"},"MetaWithRuid":{"description":"Metadata with request tracking.","required":["ruid"],"properties":{"ruid":{"description":"Request Unique ID","type":"string","format":"uuid"}},"type":"object"}}}}
```

## The Reservation object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"Reservation":{"description":"Universal reservation object - can be lock, single reservation or group reservation based on 'type' field","required":["type","reservationId","addDate","editDate"],"properties":{"type":{"type":"string","enum":["LOCK","SINGLE","GROUP"]},"reservationId":{"type":"integer"},"employeeId":{"type":"integer","nullable":true},"sourceId":{"type":"integer"},"additionalInfo":{"type":"string","nullable":true},"addDate":{"type":"string","format":"date-time"},"editDate":{"type":"string","format":"date-time"},"client":{"oneOf":[{"$ref":"#/components/schemas/Client"}],"nullable":true,"description":"Full client object - present for SINGLE/GROUP types, null for LOCK"},"reservationNo":{"type":"integer","nullable":true},"otaReservationId":{"description":"Reservation number from the OTA channel. Booking.com: `{bookingId}-{roomReservationId}` (main number before the dash; the suffix identifies the room reservation when a client books more than one room). Null for direct reservations.","type":"string","nullable":true},"groupId":{"type":"integer","nullable":true},"arrival":{"description":"Required for SINGLE/GROUP types","type":"string","format":"date","nullable":true},"departure":{"description":"Required for SINGLE/GROUP types","type":"string","format":"date","nullable":true},"roomId":{"type":"integer","nullable":true},"checkIn":{"type":"string","pattern":"^[0-2][0-9]:[0-5][0-9]$","nullable":true},"checkOut":{"type":"string","pattern":"^[0-2][0-9]:[0-5][0-9]$","nullable":true},"adults":{"type":"integer","nullable":true},"children":{"type":"integer","nullable":true},"kidsAge":{"type":"array","items":{"type":"integer"},"nullable":true},"registration":{"type":"string","enum":["CHECKED_IN","CHECKED_OUT","NONE"],"nullable":true},"doorCode":{"type":"string","nullable":true},"prepayment":{"type":"number","format":"float","nullable":true},"prepaymentDeadline":{"type":"string","format":"date","nullable":true},"paymentStatus":{"type":"string","enum":["NO_PAYMENT","PREPAYMENT_PAID","PAID_ALL"],"nullable":true},"paymentType":{"type":"string","enum":["NONE","CASH_PAYMENT","BANK_TRANSFER_PAYMENT","CREDIT_CARD_PAYMENT","VIRTUAL_CARD_PAYMENT","ONLINE_PAYMENT"],"nullable":true},"currency":{"type":"string","nullable":true},"meal":{"type":"string","enum":["OV","BB","HB","FB","AI","DINNER","BREAKFAST_SUPPER","DINNER_SUPPER","SUPPER"],"nullable":true},"adultsPortion":{"type":"integer","nullable":true},"childrenPortion":{"type":"integer","nullable":true},"additionalServices":{"type":"array","items":{"properties":{"additionalServiceId":{"type":"integer"},"status":{"type":"integer","enum":[0,1]},"price":{"type":"number","format":"float"},"quantity":{"type":"integer","nullable":true}},"type":"object"},"nullable":true},"color":{"type":"string","nullable":true},"price":{"type":"number","format":"float","nullable":true},"pricePerRoom":{"type":"number","format":"float","nullable":true},"pricePerMeal":{"type":"number","format":"float","nullable":true},"discount":{"type":"number","format":"float","nullable":true},"discountType":{"description":"0 - percentage, 1 - fixed amount","type":"integer","enum":[0,1],"nullable":true},"rateId":{"type":"integer","nullable":true},"groupConfig":{"description":"Optional configuration for GROUP type only. For SINGLE and LOCK this field is ALWAYS null. For GROUP: can be null or array of objects with roomId (integer), adults (integer), children (integer), and optional kidsAge (array of integers). Must include all rooms from roomId array. Total adults and children must match main reservation values.","nullable":true}},"type":"object"},"Client":{"description":"Client information","required":["clientId","name"],"properties":{"clientId":{"type":"integer"},"forename":{"type":"string"},"name":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string","format":"email"},"companyName":{"type":"string","nullable":true},"taxId":{"type":"string","nullable":true},"personalId":{"type":"string","nullable":true},"idCard":{"type":"string","nullable":true},"clientType":{"type":"string","enum":["NONE","REGULAR","UNWANTED"]},"address":{"type":"string","nullable":true},"comments":{"type":"string","nullable":true},"vehicleRegistrationNumber":{"type":"string","nullable":true},"countryId":{"type":"integer","nullable":true},"lang":{"description":"Language preference (ISO 639-1)","type":"string"},"addDate":{"description":"Client creation date with timezone","type":"string","format":"date-time"},"editDate":{"description":"Last modification date with timezone","type":"string","format":"date-time","nullable":true}},"type":"object"}}}}
```

## The Lock object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"Lock":{"description":"Lock object","required":["type","reservationId"],"properties":{"type":{"type":"string","enum":["LOCK","SINGLE","GROUP"]},"reservationId":{"type":"integer"},"from":{"description":"Required for SINGLE/GROUP types","type":"string","format":"date","nullable":true},"to":{"description":"Required for SINGLE/GROUP types","type":"string","format":"date","nullable":true},"roomId":{"type":"integer","nullable":true},"employeeId":{"type":"integer","nullable":true},"sourceId":{"type":"integer"},"additionalInfo":{"type":"string","nullable":true},"addDate":{"type":"string","format":"date-time"},"editDate":{"type":"string","format":"date-time"}},"type":"object"}}}}
```

## The ReservationCreateRequest object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"ReservationCreateRequest":{"description":"Create reservation, group reservation or lock based on type field","required":["type","arrival","departure","roomId"],"properties":{"type":{"description":"Type of reservation to create","type":"string","enum":["SINGLE","GROUP","LOCK"]},"arrival":{"type":"string","format":"date"},"departure":{"type":"string","format":"date"},"roomId":{"type":"integer"},"sourceId":{"description":"Booking source ID (optional)","type":"integer","nullable":true},"adults":{"type":"integer"},"children":{"type":"integer"},"kidsAge":{"type":"array","items":{"type":"integer"}},"client":{"description":"Client object - REQUIRED for SINGLE/GROUP types, null for LOCK. If clientId is provided, existing client will be updated with provided data. If clientId is not provided, new client will be created (name is required for new clients)","properties":{"clientId":{"description":"Optional - if provided, will update existing client","type":"integer","nullable":true},"forename":{"type":"string","nullable":true},"name":{"description":"Required when creating new client","type":"string","nullable":true},"phone":{"type":"string","nullable":true},"email":{"type":"string","format":"email","nullable":true},"companyName":{"type":"string","nullable":true},"taxId":{"type":"string","nullable":true},"personalId":{"type":"string","nullable":true},"idCard":{"type":"string","nullable":true},"clientType":{"type":"string","enum":["NONE","REGULAR","UNWANTED"],"nullable":true},"address":{"type":"string","nullable":true},"comments":{"type":"string","nullable":true},"vehicleRegistrationNumber":{"type":"string","nullable":true},"countryId":{"type":"integer","nullable":true},"lang":{"type":"string","nullable":true}},"type":"object","nullable":true},"checkIn":{"type":"string","pattern":"^[0-2][0-9]:[0-5][0-9]$"},"checkOut":{"type":"string","pattern":"^[0-2][0-9]:[0-5][0-9]$"},"additionalInfo":{"type":"string","nullable":true},"currency":{"type":"string"},"meal":{"type":"string","enum":["OV","BB","HB","FB","AI","DINNER","BREAKFAST_SUPPER","DINNER_SUPPER","SUPPER"]},"doorCode":{"type":"string"},"prepayment":{"type":"number","format":"float"},"prepaymentDeadline":{"type":"string","format":"date","nullable":true},"paymentStatus":{"type":"string","enum":["NO_PAYMENT","PREPAYMENT_PAID","PAID_ALL"]},"paymentType":{"type":"string","enum":["NONE","CASH_PAYMENT","BANK_TRANSFER_PAYMENT","CREDIT_CARD_PAYMENT","VIRTUAL_CARD_PAYMENT","ONLINE_PAYMENT"]},"registration":{"type":"string","enum":["CHECKED_IN","CHECKED_OUT","NONE"],"nullable":true},"adultsPortion":{"type":"integer"},"childrenPortion":{"type":"integer"},"additionalServices":{"type":"array","items":{"properties":{"additionalServiceId":{"type":"integer"},"status":{"type":"integer","enum":[0,1]},"price":{"type":"number","format":"float"},"quantity":{"type":"integer","nullable":true}},"type":"object"},"nullable":true},"color":{"type":"string","nullable":true},"pricePerRoom":{"type":"number","format":"float"},"pricePerMeal":{"type":"number","format":"float"},"discount":{"type":"number","format":"float"},"discountType":{"type":"integer","enum":[0,1]},"rateId":{"type":"integer","nullable":true},"groupConfig":{"description":"Optional: For GROUP type only. Ignored for SINGLE and LOCK. Array of objects with roomId (int), adults (int), children (int), and optional kidsAge (int[]). Must include all roomIds from main roomId array. Total adults/children must match main reservation values.","nullable":true}},"type":"object"}}}}
```

## The ReservationUpdateRequest object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"ReservationUpdateRequest":{"description":"Update reservation, group reservation or lock. All fields are optional - send only fields you want to change. Note: type cannot be changed after creation.","properties":{"arrival":{"type":"string","format":"date"},"departure":{"type":"string","format":"date"},"roomId":{"type":"integer"},"sourceId":{"description":"Booking source ID (optional)","type":"integer","nullable":true},"adults":{"type":"integer"},"children":{"type":"integer"},"kidsAge":{"type":"array","items":{"type":"integer"}},"client":{"description":"Client object - can contain clientId to update existing client data, or full client data to create new client","properties":{"clientId":{"type":"integer","nullable":true},"forename":{"type":"string","nullable":true},"name":{"type":"string","nullable":true},"phone":{"type":"string","nullable":true},"email":{"type":"string","format":"email","nullable":true},"companyName":{"type":"string","nullable":true},"taxId":{"type":"string","nullable":true},"personalId":{"type":"string","nullable":true},"idCard":{"type":"string","nullable":true},"clientType":{"type":"string","enum":["NONE","REGULAR","UNWANTED"],"nullable":true},"address":{"type":"string","nullable":true},"comments":{"type":"string","nullable":true},"vehicleRegistrationNumber":{"type":"string","nullable":true},"countryId":{"type":"integer","nullable":true},"lang":{"type":"string","nullable":true}},"type":"object","nullable":true},"checkIn":{"type":"string","pattern":"^[0-2][0-9]:[0-5][0-9]$"},"checkOut":{"type":"string","pattern":"^[0-2][0-9]:[0-5][0-9]$"},"additionalInfo":{"type":"string","nullable":true},"currency":{"type":"string"},"meal":{"type":"string","enum":["OV","BB","HB","FB","AI","DINNER","BREAKFAST_SUPPER","DINNER_SUPPER","SUPPER"]},"doorCode":{"type":"string"},"prepayment":{"type":"number","format":"float"},"prepaymentDeadline":{"type":"string","format":"date","nullable":true},"paymentStatus":{"type":"string","enum":["NO_PAYMENT","PREPAYMENT_PAID","PAID_ALL"]},"paymentType":{"type":"string","enum":["NONE","CASH_PAYMENT","BANK_TRANSFER_PAYMENT","CREDIT_CARD_PAYMENT","VIRTUAL_CARD_PAYMENT","ONLINE_PAYMENT"]},"registration":{"type":"string","enum":["CHECKED_IN","CHECKED_OUT","NONE"],"nullable":true},"adultsPortion":{"type":"integer"},"childrenPortion":{"type":"integer"},"additionalServices":{"type":"array","items":{"properties":{"additionalServiceId":{"type":"integer"},"status":{"type":"integer","enum":[0,1]},"price":{"type":"number","format":"float"},"quantity":{"type":"integer","nullable":true}},"type":"object"},"nullable":true},"color":{"type":"string","nullable":true},"pricePerRoom":{"type":"number","format":"float"},"pricePerMeal":{"type":"number","format":"float"},"discount":{"type":"number","format":"float"},"discountType":{"type":"integer","enum":[0,1]},"rateId":{"type":"integer","nullable":true},"groupConfig":{"description":"Optional: For GROUP type only. Ignored for SINGLE and LOCK. Array of objects with roomId (int), adults (int), children (int), and optional kidsAge (int[]). Must include all roomIds from main roomId array. Total adults/children must match main reservation values.","nullable":true}},"type":"object"}}}}
```

## The ReservationListResponse object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"ReservationListResponse":{"description":"List of reservations and/or locks","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Reservation"}},"meta":{"$ref":"#/components/schemas/MetaWithPagination"}},"type":"object"},"Reservation":{"description":"Universal reservation object - can be lock, single reservation or group reservation based on 'type' field","required":["type","reservationId","addDate","editDate"],"properties":{"type":{"type":"string","enum":["LOCK","SINGLE","GROUP"]},"reservationId":{"type":"integer"},"employeeId":{"type":"integer","nullable":true},"sourceId":{"type":"integer"},"additionalInfo":{"type":"string","nullable":true},"addDate":{"type":"string","format":"date-time"},"editDate":{"type":"string","format":"date-time"},"client":{"oneOf":[{"$ref":"#/components/schemas/Client"}],"nullable":true,"description":"Full client object - present for SINGLE/GROUP types, null for LOCK"},"reservationNo":{"type":"integer","nullable":true},"otaReservationId":{"description":"Reservation number from the OTA channel. Booking.com: `{bookingId}-{roomReservationId}` (main number before the dash; the suffix identifies the room reservation when a client books more than one room). Null for direct reservations.","type":"string","nullable":true},"groupId":{"type":"integer","nullable":true},"arrival":{"description":"Required for SINGLE/GROUP types","type":"string","format":"date","nullable":true},"departure":{"description":"Required for SINGLE/GROUP types","type":"string","format":"date","nullable":true},"roomId":{"type":"integer","nullable":true},"checkIn":{"type":"string","pattern":"^[0-2][0-9]:[0-5][0-9]$","nullable":true},"checkOut":{"type":"string","pattern":"^[0-2][0-9]:[0-5][0-9]$","nullable":true},"adults":{"type":"integer","nullable":true},"children":{"type":"integer","nullable":true},"kidsAge":{"type":"array","items":{"type":"integer"},"nullable":true},"registration":{"type":"string","enum":["CHECKED_IN","CHECKED_OUT","NONE"],"nullable":true},"doorCode":{"type":"string","nullable":true},"prepayment":{"type":"number","format":"float","nullable":true},"prepaymentDeadline":{"type":"string","format":"date","nullable":true},"paymentStatus":{"type":"string","enum":["NO_PAYMENT","PREPAYMENT_PAID","PAID_ALL"],"nullable":true},"paymentType":{"type":"string","enum":["NONE","CASH_PAYMENT","BANK_TRANSFER_PAYMENT","CREDIT_CARD_PAYMENT","VIRTUAL_CARD_PAYMENT","ONLINE_PAYMENT"],"nullable":true},"currency":{"type":"string","nullable":true},"meal":{"type":"string","enum":["OV","BB","HB","FB","AI","DINNER","BREAKFAST_SUPPER","DINNER_SUPPER","SUPPER"],"nullable":true},"adultsPortion":{"type":"integer","nullable":true},"childrenPortion":{"type":"integer","nullable":true},"additionalServices":{"type":"array","items":{"properties":{"additionalServiceId":{"type":"integer"},"status":{"type":"integer","enum":[0,1]},"price":{"type":"number","format":"float"},"quantity":{"type":"integer","nullable":true}},"type":"object"},"nullable":true},"color":{"type":"string","nullable":true},"price":{"type":"number","format":"float","nullable":true},"pricePerRoom":{"type":"number","format":"float","nullable":true},"pricePerMeal":{"type":"number","format":"float","nullable":true},"discount":{"type":"number","format":"float","nullable":true},"discountType":{"description":"0 - percentage, 1 - fixed amount","type":"integer","enum":[0,1],"nullable":true},"rateId":{"type":"integer","nullable":true},"groupConfig":{"description":"Optional configuration for GROUP type only. For SINGLE and LOCK this field is ALWAYS null. For GROUP: can be null or array of objects with roomId (integer), adults (integer), children (integer), and optional kidsAge (array of integers). Must include all rooms from roomId array. Total adults and children must match main reservation values.","nullable":true}},"type":"object"},"Client":{"description":"Client information","required":["clientId","name"],"properties":{"clientId":{"type":"integer"},"forename":{"type":"string"},"name":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string","format":"email"},"companyName":{"type":"string","nullable":true},"taxId":{"type":"string","nullable":true},"personalId":{"type":"string","nullable":true},"idCard":{"type":"string","nullable":true},"clientType":{"type":"string","enum":["NONE","REGULAR","UNWANTED"]},"address":{"type":"string","nullable":true},"comments":{"type":"string","nullable":true},"vehicleRegistrationNumber":{"type":"string","nullable":true},"countryId":{"type":"integer","nullable":true},"lang":{"description":"Language preference (ISO 639-1)","type":"string"},"addDate":{"description":"Client creation date with timezone","type":"string","format":"date-time"},"editDate":{"description":"Last modification date with timezone","type":"string","format":"date-time","nullable":true}},"type":"object"},"MetaWithPagination":{"description":"Pagination parameters with request tracking in list responses.","required":["totalItems","currentPage","totalPages","itemsPerPage","ruid"],"properties":{"totalItems":{"type":"integer","minimum":0},"currentPage":{"type":"integer","minimum":1},"totalPages":{"type":"integer","minimum":0},"itemsPerPage":{"type":"integer","minimum":1},"ruid":{"description":"Request Unique ID","type":"string","format":"uuid"}},"type":"object"}}}}
```

## The ReservationResponse object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"ReservationResponse":{"description":"Single reservation or lock response with metadata","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/Reservation"},"meta":{"$ref":"#/components/schemas/MetaWithRuid"}},"type":"object"},"Reservation":{"description":"Universal reservation object - can be lock, single reservation or group reservation based on 'type' field","required":["type","reservationId","addDate","editDate"],"properties":{"type":{"type":"string","enum":["LOCK","SINGLE","GROUP"]},"reservationId":{"type":"integer"},"employeeId":{"type":"integer","nullable":true},"sourceId":{"type":"integer"},"additionalInfo":{"type":"string","nullable":true},"addDate":{"type":"string","format":"date-time"},"editDate":{"type":"string","format":"date-time"},"client":{"oneOf":[{"$ref":"#/components/schemas/Client"}],"nullable":true,"description":"Full client object - present for SINGLE/GROUP types, null for LOCK"},"reservationNo":{"type":"integer","nullable":true},"otaReservationId":{"description":"Reservation number from the OTA channel. Booking.com: `{bookingId}-{roomReservationId}` (main number before the dash; the suffix identifies the room reservation when a client books more than one room). Null for direct reservations.","type":"string","nullable":true},"groupId":{"type":"integer","nullable":true},"arrival":{"description":"Required for SINGLE/GROUP types","type":"string","format":"date","nullable":true},"departure":{"description":"Required for SINGLE/GROUP types","type":"string","format":"date","nullable":true},"roomId":{"type":"integer","nullable":true},"checkIn":{"type":"string","pattern":"^[0-2][0-9]:[0-5][0-9]$","nullable":true},"checkOut":{"type":"string","pattern":"^[0-2][0-9]:[0-5][0-9]$","nullable":true},"adults":{"type":"integer","nullable":true},"children":{"type":"integer","nullable":true},"kidsAge":{"type":"array","items":{"type":"integer"},"nullable":true},"registration":{"type":"string","enum":["CHECKED_IN","CHECKED_OUT","NONE"],"nullable":true},"doorCode":{"type":"string","nullable":true},"prepayment":{"type":"number","format":"float","nullable":true},"prepaymentDeadline":{"type":"string","format":"date","nullable":true},"paymentStatus":{"type":"string","enum":["NO_PAYMENT","PREPAYMENT_PAID","PAID_ALL"],"nullable":true},"paymentType":{"type":"string","enum":["NONE","CASH_PAYMENT","BANK_TRANSFER_PAYMENT","CREDIT_CARD_PAYMENT","VIRTUAL_CARD_PAYMENT","ONLINE_PAYMENT"],"nullable":true},"currency":{"type":"string","nullable":true},"meal":{"type":"string","enum":["OV","BB","HB","FB","AI","DINNER","BREAKFAST_SUPPER","DINNER_SUPPER","SUPPER"],"nullable":true},"adultsPortion":{"type":"integer","nullable":true},"childrenPortion":{"type":"integer","nullable":true},"additionalServices":{"type":"array","items":{"properties":{"additionalServiceId":{"type":"integer"},"status":{"type":"integer","enum":[0,1]},"price":{"type":"number","format":"float"},"quantity":{"type":"integer","nullable":true}},"type":"object"},"nullable":true},"color":{"type":"string","nullable":true},"price":{"type":"number","format":"float","nullable":true},"pricePerRoom":{"type":"number","format":"float","nullable":true},"pricePerMeal":{"type":"number","format":"float","nullable":true},"discount":{"type":"number","format":"float","nullable":true},"discountType":{"description":"0 - percentage, 1 - fixed amount","type":"integer","enum":[0,1],"nullable":true},"rateId":{"type":"integer","nullable":true},"groupConfig":{"description":"Optional configuration for GROUP type only. For SINGLE and LOCK this field is ALWAYS null. For GROUP: can be null or array of objects with roomId (integer), adults (integer), children (integer), and optional kidsAge (array of integers). Must include all rooms from roomId array. Total adults and children must match main reservation values.","nullable":true}},"type":"object"},"Client":{"description":"Client information","required":["clientId","name"],"properties":{"clientId":{"type":"integer"},"forename":{"type":"string"},"name":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string","format":"email"},"companyName":{"type":"string","nullable":true},"taxId":{"type":"string","nullable":true},"personalId":{"type":"string","nullable":true},"idCard":{"type":"string","nullable":true},"clientType":{"type":"string","enum":["NONE","REGULAR","UNWANTED"]},"address":{"type":"string","nullable":true},"comments":{"type":"string","nullable":true},"vehicleRegistrationNumber":{"type":"string","nullable":true},"countryId":{"type":"integer","nullable":true},"lang":{"description":"Language preference (ISO 639-1)","type":"string"},"addDate":{"description":"Client creation date with timezone","type":"string","format":"date-time"},"editDate":{"description":"Last modification date with timezone","type":"string","format":"date-time","nullable":true}},"type":"object"},"MetaWithRuid":{"description":"Metadata with request tracking.","required":["ruid"],"properties":{"ruid":{"description":"Request Unique ID","type":"string","format":"uuid"}},"type":"object"}}}}
```

## The ReservationCreateResponse object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"ReservationCreateResponse":{"description":"Created reservation or lock response with metadata","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/Reservation"},"meta":{"$ref":"#/components/schemas/MetaWithRuid"}},"type":"object"},"Reservation":{"description":"Universal reservation object - can be lock, single reservation or group reservation based on 'type' field","required":["type","reservationId","addDate","editDate"],"properties":{"type":{"type":"string","enum":["LOCK","SINGLE","GROUP"]},"reservationId":{"type":"integer"},"employeeId":{"type":"integer","nullable":true},"sourceId":{"type":"integer"},"additionalInfo":{"type":"string","nullable":true},"addDate":{"type":"string","format":"date-time"},"editDate":{"type":"string","format":"date-time"},"client":{"oneOf":[{"$ref":"#/components/schemas/Client"}],"nullable":true,"description":"Full client object - present for SINGLE/GROUP types, null for LOCK"},"reservationNo":{"type":"integer","nullable":true},"otaReservationId":{"description":"Reservation number from the OTA channel. Booking.com: `{bookingId}-{roomReservationId}` (main number before the dash; the suffix identifies the room reservation when a client books more than one room). Null for direct reservations.","type":"string","nullable":true},"groupId":{"type":"integer","nullable":true},"arrival":{"description":"Required for SINGLE/GROUP types","type":"string","format":"date","nullable":true},"departure":{"description":"Required for SINGLE/GROUP types","type":"string","format":"date","nullable":true},"roomId":{"type":"integer","nullable":true},"checkIn":{"type":"string","pattern":"^[0-2][0-9]:[0-5][0-9]$","nullable":true},"checkOut":{"type":"string","pattern":"^[0-2][0-9]:[0-5][0-9]$","nullable":true},"adults":{"type":"integer","nullable":true},"children":{"type":"integer","nullable":true},"kidsAge":{"type":"array","items":{"type":"integer"},"nullable":true},"registration":{"type":"string","enum":["CHECKED_IN","CHECKED_OUT","NONE"],"nullable":true},"doorCode":{"type":"string","nullable":true},"prepayment":{"type":"number","format":"float","nullable":true},"prepaymentDeadline":{"type":"string","format":"date","nullable":true},"paymentStatus":{"type":"string","enum":["NO_PAYMENT","PREPAYMENT_PAID","PAID_ALL"],"nullable":true},"paymentType":{"type":"string","enum":["NONE","CASH_PAYMENT","BANK_TRANSFER_PAYMENT","CREDIT_CARD_PAYMENT","VIRTUAL_CARD_PAYMENT","ONLINE_PAYMENT"],"nullable":true},"currency":{"type":"string","nullable":true},"meal":{"type":"string","enum":["OV","BB","HB","FB","AI","DINNER","BREAKFAST_SUPPER","DINNER_SUPPER","SUPPER"],"nullable":true},"adultsPortion":{"type":"integer","nullable":true},"childrenPortion":{"type":"integer","nullable":true},"additionalServices":{"type":"array","items":{"properties":{"additionalServiceId":{"type":"integer"},"status":{"type":"integer","enum":[0,1]},"price":{"type":"number","format":"float"},"quantity":{"type":"integer","nullable":true}},"type":"object"},"nullable":true},"color":{"type":"string","nullable":true},"price":{"type":"number","format":"float","nullable":true},"pricePerRoom":{"type":"number","format":"float","nullable":true},"pricePerMeal":{"type":"number","format":"float","nullable":true},"discount":{"type":"number","format":"float","nullable":true},"discountType":{"description":"0 - percentage, 1 - fixed amount","type":"integer","enum":[0,1],"nullable":true},"rateId":{"type":"integer","nullable":true},"groupConfig":{"description":"Optional configuration for GROUP type only. For SINGLE and LOCK this field is ALWAYS null. For GROUP: can be null or array of objects with roomId (integer), adults (integer), children (integer), and optional kidsAge (array of integers). Must include all rooms from roomId array. Total adults and children must match main reservation values.","nullable":true}},"type":"object"},"Client":{"description":"Client information","required":["clientId","name"],"properties":{"clientId":{"type":"integer"},"forename":{"type":"string"},"name":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string","format":"email"},"companyName":{"type":"string","nullable":true},"taxId":{"type":"string","nullable":true},"personalId":{"type":"string","nullable":true},"idCard":{"type":"string","nullable":true},"clientType":{"type":"string","enum":["NONE","REGULAR","UNWANTED"]},"address":{"type":"string","nullable":true},"comments":{"type":"string","nullable":true},"vehicleRegistrationNumber":{"type":"string","nullable":true},"countryId":{"type":"integer","nullable":true},"lang":{"description":"Language preference (ISO 639-1)","type":"string"},"addDate":{"description":"Client creation date with timezone","type":"string","format":"date-time"},"editDate":{"description":"Last modification date with timezone","type":"string","format":"date-time","nullable":true}},"type":"object"},"MetaWithRuid":{"description":"Metadata with request tracking.","required":["ruid"],"properties":{"ruid":{"description":"Request Unique ID","type":"string","format":"uuid"}},"type":"object"}}}}
```

## The ReservationRestoreResponse object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"ReservationRestoreResponse":{"description":"Restored reservation or lock response with metadata","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/Reservation"},"meta":{"$ref":"#/components/schemas/MetaWithRuid"}},"type":"object"},"Reservation":{"description":"Universal reservation object - can be lock, single reservation or group reservation based on 'type' field","required":["type","reservationId","addDate","editDate"],"properties":{"type":{"type":"string","enum":["LOCK","SINGLE","GROUP"]},"reservationId":{"type":"integer"},"employeeId":{"type":"integer","nullable":true},"sourceId":{"type":"integer"},"additionalInfo":{"type":"string","nullable":true},"addDate":{"type":"string","format":"date-time"},"editDate":{"type":"string","format":"date-time"},"client":{"oneOf":[{"$ref":"#/components/schemas/Client"}],"nullable":true,"description":"Full client object - present for SINGLE/GROUP types, null for LOCK"},"reservationNo":{"type":"integer","nullable":true},"otaReservationId":{"description":"Reservation number from the OTA channel. Booking.com: `{bookingId}-{roomReservationId}` (main number before the dash; the suffix identifies the room reservation when a client books more than one room). Null for direct reservations.","type":"string","nullable":true},"groupId":{"type":"integer","nullable":true},"arrival":{"description":"Required for SINGLE/GROUP types","type":"string","format":"date","nullable":true},"departure":{"description":"Required for SINGLE/GROUP types","type":"string","format":"date","nullable":true},"roomId":{"type":"integer","nullable":true},"checkIn":{"type":"string","pattern":"^[0-2][0-9]:[0-5][0-9]$","nullable":true},"checkOut":{"type":"string","pattern":"^[0-2][0-9]:[0-5][0-9]$","nullable":true},"adults":{"type":"integer","nullable":true},"children":{"type":"integer","nullable":true},"kidsAge":{"type":"array","items":{"type":"integer"},"nullable":true},"registration":{"type":"string","enum":["CHECKED_IN","CHECKED_OUT","NONE"],"nullable":true},"doorCode":{"type":"string","nullable":true},"prepayment":{"type":"number","format":"float","nullable":true},"prepaymentDeadline":{"type":"string","format":"date","nullable":true},"paymentStatus":{"type":"string","enum":["NO_PAYMENT","PREPAYMENT_PAID","PAID_ALL"],"nullable":true},"paymentType":{"type":"string","enum":["NONE","CASH_PAYMENT","BANK_TRANSFER_PAYMENT","CREDIT_CARD_PAYMENT","VIRTUAL_CARD_PAYMENT","ONLINE_PAYMENT"],"nullable":true},"currency":{"type":"string","nullable":true},"meal":{"type":"string","enum":["OV","BB","HB","FB","AI","DINNER","BREAKFAST_SUPPER","DINNER_SUPPER","SUPPER"],"nullable":true},"adultsPortion":{"type":"integer","nullable":true},"childrenPortion":{"type":"integer","nullable":true},"additionalServices":{"type":"array","items":{"properties":{"additionalServiceId":{"type":"integer"},"status":{"type":"integer","enum":[0,1]},"price":{"type":"number","format":"float"},"quantity":{"type":"integer","nullable":true}},"type":"object"},"nullable":true},"color":{"type":"string","nullable":true},"price":{"type":"number","format":"float","nullable":true},"pricePerRoom":{"type":"number","format":"float","nullable":true},"pricePerMeal":{"type":"number","format":"float","nullable":true},"discount":{"type":"number","format":"float","nullable":true},"discountType":{"description":"0 - percentage, 1 - fixed amount","type":"integer","enum":[0,1],"nullable":true},"rateId":{"type":"integer","nullable":true},"groupConfig":{"description":"Optional configuration for GROUP type only. For SINGLE and LOCK this field is ALWAYS null. For GROUP: can be null or array of objects with roomId (integer), adults (integer), children (integer), and optional kidsAge (array of integers). Must include all rooms from roomId array. Total adults and children must match main reservation values.","nullable":true}},"type":"object"},"Client":{"description":"Client information","required":["clientId","name"],"properties":{"clientId":{"type":"integer"},"forename":{"type":"string"},"name":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string","format":"email"},"companyName":{"type":"string","nullable":true},"taxId":{"type":"string","nullable":true},"personalId":{"type":"string","nullable":true},"idCard":{"type":"string","nullable":true},"clientType":{"type":"string","enum":["NONE","REGULAR","UNWANTED"]},"address":{"type":"string","nullable":true},"comments":{"type":"string","nullable":true},"vehicleRegistrationNumber":{"type":"string","nullable":true},"countryId":{"type":"integer","nullable":true},"lang":{"description":"Language preference (ISO 639-1)","type":"string"},"addDate":{"description":"Client creation date with timezone","type":"string","format":"date-time"},"editDate":{"description":"Last modification date with timezone","type":"string","format":"date-time","nullable":true}},"type":"object"},"MetaWithRuid":{"description":"Metadata with request tracking.","required":["ruid"],"properties":{"ruid":{"description":"Request Unique ID","type":"string","format":"uuid"}},"type":"object"}}}}
```

## The Room object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"Room":{"description":"Public room representation","required":["roomId","name","persons","maxAdults","maxChildren","roomType","roomTypeId","singleBed","doubleBed","extraBed","service","shareInOffer"],"properties":{"roomId":{"type":"integer"},"name":{"type":"string"},"persons":{"description":"Base number of persons","type":"integer"},"maxAdults":{"type":"integer"},"maxChildren":{"type":"integer"},"roomType":{"description":"Enum (internal)","type":"string"},"roomTypeId":{"type":"integer","nullable":true},"singleBed":{"type":"integer"},"doubleBed":{"type":"integer"},"extraBed":{"type":"integer"},"service":{"description":"Service status enum","type":"string","enum":["CLEAN","DIRTY","WHILE_CLEANING"]},"serviceInfo":{"type":"string","nullable":true},"info":{"type":"string","nullable":true},"color":{"type":"string","nullable":true},"square":{"type":"string"},"squareType":{"type":"string"},"description":{"description":"Localized description map. Key 'default' is required. Other keys = ISO language codes.","type":"object","additionalProperties":{"type":"string"}},"equipment":{"type":"array","items":{"type":"string","enum":["AIR_CONDITIONING","KITCHENETTE","TELEVISION","BATHROOM","POOL","BALCONY","WASHING_MACHINE","KITCHEN_UTENSILS","BABY_CRIB","BLANKET","SCREEN","UMBRELLA","LOUNGER","CLOTHES_HANGER","DRYER","TOWELS","FLOOR_COVERING","FIREPLACE","HEATING","IRON","SAFE","DESK","BIDET","TOOTHBRUSH","SHAMPOO","HAIR_CONDITIONER","SOAP","RADIO","TABLE","WINE_GLASSES","CORKSCREW","WATER","GRILL","DISHWASHER","MINIBAR","REFRIGERATOR","COFFEE_MACHINE"]}},"shareInOffer":{"type":"integer","enum":[0,1]},"locationId":{"type":"integer","nullable":true}},"type":"object"}}}}
```

## The RoomCreateRequest object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"RoomCreateRequest":{"description":"Create room payload","required":["name","persons","maxAdults","maxChildren","singleBed","doubleBed"],"properties":{"name":{"type":"string"},"persons":{"type":"integer"},"maxAdults":{"type":"integer"},"maxChildren":{"type":"integer"},"roomTypeId":{"type":"integer","nullable":true},"roomType":{"type":"string","nullable":true},"singleBed":{"type":"integer"},"doubleBed":{"type":"integer"},"extraBed":{"type":"integer"},"service":{"type":"string"},"serviceInfo":{"type":"string","nullable":true},"info":{"type":"string","nullable":true},"color":{"type":"string","nullable":true},"square":{"type":"string"},"squareType":{"type":"string"},"description":{"oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"equipment":{"type":"array","items":{"type":"string"}},"shareInOffer":{"type":"integer","enum":[0,1]},"locationId":{"type":"integer","nullable":true}},"type":"object"}}}}
```

## The RoomUpdateRequest object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"RoomUpdateRequest":{"description":"Update room payload (patch style - send only fields you change)","properties":{"service":{"type":"string"},"serviceInfo":{"type":"string","nullable":true},"description":{"oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"equipment":{"type":"array","items":{"type":"string"}},"shareInOffer":{"type":"integer","enum":[0,1]},"locationId":{"type":"integer","nullable":true}},"type":"object"}}}}
```

## The RoomListResponse object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"RoomListResponse":{"description":"Paginated list of rooms","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Room"}},"meta":{"$ref":"#/components/schemas/MetaWithPagination"}},"type":"object"},"Room":{"description":"Public room representation","required":["roomId","name","persons","maxAdults","maxChildren","roomType","roomTypeId","singleBed","doubleBed","extraBed","service","shareInOffer"],"properties":{"roomId":{"type":"integer"},"name":{"type":"string"},"persons":{"description":"Base number of persons","type":"integer"},"maxAdults":{"type":"integer"},"maxChildren":{"type":"integer"},"roomType":{"description":"Enum (internal)","type":"string"},"roomTypeId":{"type":"integer","nullable":true},"singleBed":{"type":"integer"},"doubleBed":{"type":"integer"},"extraBed":{"type":"integer"},"service":{"description":"Service status enum","type":"string","enum":["CLEAN","DIRTY","WHILE_CLEANING"]},"serviceInfo":{"type":"string","nullable":true},"info":{"type":"string","nullable":true},"color":{"type":"string","nullable":true},"square":{"type":"string"},"squareType":{"type":"string"},"description":{"description":"Localized description map. Key 'default' is required. Other keys = ISO language codes.","type":"object","additionalProperties":{"type":"string"}},"equipment":{"type":"array","items":{"type":"string","enum":["AIR_CONDITIONING","KITCHENETTE","TELEVISION","BATHROOM","POOL","BALCONY","WASHING_MACHINE","KITCHEN_UTENSILS","BABY_CRIB","BLANKET","SCREEN","UMBRELLA","LOUNGER","CLOTHES_HANGER","DRYER","TOWELS","FLOOR_COVERING","FIREPLACE","HEATING","IRON","SAFE","DESK","BIDET","TOOTHBRUSH","SHAMPOO","HAIR_CONDITIONER","SOAP","RADIO","TABLE","WINE_GLASSES","CORKSCREW","WATER","GRILL","DISHWASHER","MINIBAR","REFRIGERATOR","COFFEE_MACHINE"]}},"shareInOffer":{"type":"integer","enum":[0,1]},"locationId":{"type":"integer","nullable":true}},"type":"object"},"MetaWithPagination":{"description":"Pagination parameters with request tracking in list responses.","required":["totalItems","currentPage","totalPages","itemsPerPage","ruid"],"properties":{"totalItems":{"type":"integer","minimum":0},"currentPage":{"type":"integer","minimum":1},"totalPages":{"type":"integer","minimum":0},"itemsPerPage":{"type":"integer","minimum":1},"ruid":{"description":"Request Unique ID","type":"string","format":"uuid"}},"type":"object"}}}}
```

## The RoomResponse object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"RoomResponse":{"description":"Single room response","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/Room"},"meta":{"$ref":"#/components/schemas/MetaWithRuid"}},"type":"object"},"Room":{"description":"Public room representation","required":["roomId","name","persons","maxAdults","maxChildren","roomType","roomTypeId","singleBed","doubleBed","extraBed","service","shareInOffer"],"properties":{"roomId":{"type":"integer"},"name":{"type":"string"},"persons":{"description":"Base number of persons","type":"integer"},"maxAdults":{"type":"integer"},"maxChildren":{"type":"integer"},"roomType":{"description":"Enum (internal)","type":"string"},"roomTypeId":{"type":"integer","nullable":true},"singleBed":{"type":"integer"},"doubleBed":{"type":"integer"},"extraBed":{"type":"integer"},"service":{"description":"Service status enum","type":"string","enum":["CLEAN","DIRTY","WHILE_CLEANING"]},"serviceInfo":{"type":"string","nullable":true},"info":{"type":"string","nullable":true},"color":{"type":"string","nullable":true},"square":{"type":"string"},"squareType":{"type":"string"},"description":{"description":"Localized description map. Key 'default' is required. Other keys = ISO language codes.","type":"object","additionalProperties":{"type":"string"}},"equipment":{"type":"array","items":{"type":"string","enum":["AIR_CONDITIONING","KITCHENETTE","TELEVISION","BATHROOM","POOL","BALCONY","WASHING_MACHINE","KITCHEN_UTENSILS","BABY_CRIB","BLANKET","SCREEN","UMBRELLA","LOUNGER","CLOTHES_HANGER","DRYER","TOWELS","FLOOR_COVERING","FIREPLACE","HEATING","IRON","SAFE","DESK","BIDET","TOOTHBRUSH","SHAMPOO","HAIR_CONDITIONER","SOAP","RADIO","TABLE","WINE_GLASSES","CORKSCREW","WATER","GRILL","DISHWASHER","MINIBAR","REFRIGERATOR","COFFEE_MACHINE"]}},"shareInOffer":{"type":"integer","enum":[0,1]},"locationId":{"type":"integer","nullable":true}},"type":"object"},"MetaWithRuid":{"description":"Metadata with request tracking.","required":["ruid"],"properties":{"ruid":{"description":"Request Unique ID","type":"string","format":"uuid"}},"type":"object"}}}}
```

## The RoomCreateResponse object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"RoomCreateResponse":{"description":"Created room response","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/Room"},"meta":{"$ref":"#/components/schemas/MetaWithRuid"}},"type":"object"},"Room":{"description":"Public room representation","required":["roomId","name","persons","maxAdults","maxChildren","roomType","roomTypeId","singleBed","doubleBed","extraBed","service","shareInOffer"],"properties":{"roomId":{"type":"integer"},"name":{"type":"string"},"persons":{"description":"Base number of persons","type":"integer"},"maxAdults":{"type":"integer"},"maxChildren":{"type":"integer"},"roomType":{"description":"Enum (internal)","type":"string"},"roomTypeId":{"type":"integer","nullable":true},"singleBed":{"type":"integer"},"doubleBed":{"type":"integer"},"extraBed":{"type":"integer"},"service":{"description":"Service status enum","type":"string","enum":["CLEAN","DIRTY","WHILE_CLEANING"]},"serviceInfo":{"type":"string","nullable":true},"info":{"type":"string","nullable":true},"color":{"type":"string","nullable":true},"square":{"type":"string"},"squareType":{"type":"string"},"description":{"description":"Localized description map. Key 'default' is required. Other keys = ISO language codes.","type":"object","additionalProperties":{"type":"string"}},"equipment":{"type":"array","items":{"type":"string","enum":["AIR_CONDITIONING","KITCHENETTE","TELEVISION","BATHROOM","POOL","BALCONY","WASHING_MACHINE","KITCHEN_UTENSILS","BABY_CRIB","BLANKET","SCREEN","UMBRELLA","LOUNGER","CLOTHES_HANGER","DRYER","TOWELS","FLOOR_COVERING","FIREPLACE","HEATING","IRON","SAFE","DESK","BIDET","TOOTHBRUSH","SHAMPOO","HAIR_CONDITIONER","SOAP","RADIO","TABLE","WINE_GLASSES","CORKSCREW","WATER","GRILL","DISHWASHER","MINIBAR","REFRIGERATOR","COFFEE_MACHINE"]}},"shareInOffer":{"type":"integer","enum":[0,1]},"locationId":{"type":"integer","nullable":true}},"type":"object"},"MetaWithRuid":{"description":"Metadata with request tracking.","required":["ruid"],"properties":{"ruid":{"description":"Request Unique ID","type":"string","format":"uuid"}},"type":"object"}}}}
```

## The RoomType object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"RoomType":{"description":"Room type configuration with specifications and amenities","required":["roomTypeId","type","description","singleBed","doubleBed","extraBed","square","maxAdults","maxChildren","maxPeople","equipment"],"properties":{"roomTypeId":{"description":"Unique room type identifier","type":"integer"},"type":{"description":"Room type category","type":"string","enum":["TWIN_ROOM","QUAD_ROOM","HOLIDAY_HOME","SINGLE_ROOM","DOUBLE_ROOM","SUITE","APARTMENT"]},"description":{"description":"Localized description map. Key 'default' is required. Other keys = ISO language codes.","type":"object","additionalProperties":{"type":"string"}},"singleBed":{"description":"Number of single beds","type":"integer"},"doubleBed":{"description":"Number of double beds","type":"integer"},"extraBed":{"description":"Number of extra beds available","type":"integer"},"square":{"description":"Room area in square meters","type":"integer"},"maxAdults":{"description":"Maximum number of adults","type":"integer"},"maxChildren":{"description":"Maximum number of children","type":"integer"},"maxPeople":{"description":"Maximum total number of people","type":"integer"},"equipment":{"description":"List of equipment/amenities available in this room type","type":"array","items":{"type":"string","enum":["AIR_CONDITIONING","KITCHENETTE","TELEVISION","BATHROOM","POOL","BALCONY","WASHING_MACHINE","KITCHEN_UTENSILS","BABY_CRIB","BLANKET","SCREEN","UMBRELLA","LOUNGER","CLOTHES_HANGER","DRYER","TOWELS","FLOOR_COVERING","FIREPLACE","HEATING","IRON","SAFE","DESK","BIDET","TOOTHBRUSH","SHAMPOO","HAIR_CONDITIONER","SOAP","RADIO","TABLE","WINE_GLASSES","CORKSCREW","WATER","GRILL","DISHWASHER","MINIBAR","REFRIGERATOR","COFFEE_MACHINE"]}}},"type":"object"}}}}
```

## The RoomTypesResponse object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"RoomTypesResponse":{"description":"Response containing all room types","required":["data","meta"],"properties":{"data":{"description":"List of all available room types","type":"array","items":{"$ref":"#/components/schemas/RoomType"}},"meta":{"$ref":"#/components/schemas/MetaWithRuid"}},"type":"object"},"RoomType":{"description":"Room type configuration with specifications and amenities","required":["roomTypeId","type","description","singleBed","doubleBed","extraBed","square","maxAdults","maxChildren","maxPeople","equipment"],"properties":{"roomTypeId":{"description":"Unique room type identifier","type":"integer"},"type":{"description":"Room type category","type":"string","enum":["TWIN_ROOM","QUAD_ROOM","HOLIDAY_HOME","SINGLE_ROOM","DOUBLE_ROOM","SUITE","APARTMENT"]},"description":{"description":"Localized description map. Key 'default' is required. Other keys = ISO language codes.","type":"object","additionalProperties":{"type":"string"}},"singleBed":{"description":"Number of single beds","type":"integer"},"doubleBed":{"description":"Number of double beds","type":"integer"},"extraBed":{"description":"Number of extra beds available","type":"integer"},"square":{"description":"Room area in square meters","type":"integer"},"maxAdults":{"description":"Maximum number of adults","type":"integer"},"maxChildren":{"description":"Maximum number of children","type":"integer"},"maxPeople":{"description":"Maximum total number of people","type":"integer"},"equipment":{"description":"List of equipment/amenities available in this room type","type":"array","items":{"type":"string","enum":["AIR_CONDITIONING","KITCHENETTE","TELEVISION","BATHROOM","POOL","BALCONY","WASHING_MACHINE","KITCHEN_UTENSILS","BABY_CRIB","BLANKET","SCREEN","UMBRELLA","LOUNGER","CLOTHES_HANGER","DRYER","TOWELS","FLOOR_COVERING","FIREPLACE","HEATING","IRON","SAFE","DESK","BIDET","TOOTHBRUSH","SHAMPOO","HAIR_CONDITIONER","SOAP","RADIO","TABLE","WINE_GLASSES","CORKSCREW","WATER","GRILL","DISHWASHER","MINIBAR","REFRIGERATOR","COFFEE_MACHINE"]}}},"type":"object"},"MetaWithRuid":{"description":"Metadata with request tracking.","required":["ruid"],"properties":{"ruid":{"description":"Request Unique ID","type":"string","format":"uuid"}},"type":"object"}}}}
```

## The Source object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"Source":{"description":"Booking source information","required":["sourceId","name","isCustom"],"properties":{"sourceId":{"description":"Unique identifier for the source","type":"integer"},"name":{"description":"Name of the booking source","type":"string"},"isCustom":{"description":"Whether this is a custom source created by the user","type":"boolean"}},"type":"object"}}}}
```

## The SourcesResponse object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"SourcesResponse":{"description":"Response containing all booking sources","required":["data","meta"],"properties":{"data":{"description":"List of all available booking sources","type":"array","items":{"$ref":"#/components/schemas/Source"}},"meta":{"$ref":"#/components/schemas/MetaWithRuid"}},"type":"object"},"Source":{"description":"Booking source information","required":["sourceId","name","isCustom"],"properties":{"sourceId":{"description":"Unique identifier for the source","type":"integer"},"name":{"description":"Name of the booking source","type":"string"},"isCustom":{"description":"Whether this is a custom source created by the user","type":"boolean"}},"type":"object"},"MetaWithRuid":{"description":"Metadata with request tracking.","required":["ruid"],"properties":{"ruid":{"description":"Request Unique ID","type":"string","format":"uuid"}},"type":"object"}}}}
```

## The Template object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"Template":{"description":"Message template. `subject` and `message` may contain `{tags}` and `[[dynamic_tags]]` that are replaced with reservation data when sending via POST /reservations/{id}/messages/email|sms.","required":["templateId","templateName","subject","message","lang","lastEdit"],"properties":{"templateId":{"type":"integer"},"templateName":{"type":"string"},"subject":{"type":"string"},"message":{"description":"HTML body of the template.","type":"string"},"lang":{"description":"Language code (ISO 639-1)","type":"string"},"lastEdit":{"type":"string","format":"date-time"}},"type":"object"}}}}
```

## The TemplateListResponse object

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"components":{"schemas":{"TemplateListResponse":{"required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Template"}},"meta":{"$ref":"#/components/schemas/MetaWithPagination"}},"type":"object"},"Template":{"description":"Message template. `subject` and `message` may contain `{tags}` and `[[dynamic_tags]]` that are replaced with reservation data when sending via POST /reservations/{id}/messages/email|sms.","required":["templateId","templateName","subject","message","lang","lastEdit"],"properties":{"templateId":{"type":"integer"},"templateName":{"type":"string"},"subject":{"type":"string"},"message":{"description":"HTML body of the template.","type":"string"},"lang":{"description":"Language code (ISO 639-1)","type":"string"},"lastEdit":{"type":"string","format":"date-time"}},"type":"object"},"MetaWithPagination":{"description":"Pagination parameters with request tracking in list responses.","required":["totalItems","currentPage","totalPages","itemsPerPage","ruid"],"properties":{"totalItems":{"type":"integer","minimum":0},"currentPage":{"type":"integer","minimum":1},"totalPages":{"type":"integer","minimum":0},"itemsPerPage":{"type":"integer","minimum":1},"ruid":{"description":"Request Unique ID","type":"string","format":"uuid"}},"type":"object"}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://mobile-calendar.gitbook.io/v1/rest-api/models.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
