{
  "openapi": "3.1.1",
  "info": {
    "title": "tripla ATLAS API",
    "description": "The global distribution platform that powers tripla Link.",
    "version": "v1"
  },
  "servers": [
    {
      "url": "https://api.atlas.tripla.jp/"
    }
  ],
  "paths": {
    "/version": {
      "get": {
        "tags": [
          "VersionEndpoint"
        ],
        "summary": "Get service version",
        "description": "Returns deployment details for the running ATLAS Web API instance, including the environment name, app version, and container image ID.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VersionResponse"
                }
              }
            }
          }
        },
        "security": [ ]
      }
    },
    "/hello-world-fifo": {
      "get": {
        "tags": [
          "HelloWorldFifoEndpoint"
        ],
        "summary": "Enqueue hello-world FIFO message",
        "description": "Sends one message via HelloWorldFifoProducer for testing. Optional query group sets MessageGroupId (default: hello).",
        "parameters": [
          {
            "name": "group",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HelloWorldFifoResponse"
                }
              }
            }
          }
        },
        "security": [ ]
      }
    },
    "/full-restriction-pms/shadow-ari-response/{propertyId}/{txId}": {
      "post": {
        "tags": [
          "Full-Restriction PMS"
        ],
        "summary": "Receive legacy full-restriction PMS ARI response for shadow comparison",
        "description": "Receives the legacy PHP-generated SOAP XML response for a full-restriction PMS transaction and compares it against the response ATLAS stored for the same property and transaction id.\n\nCalled by the PHP shim (`AtlasClient::forwardPmsAriResponse()`) when shadowing is enabled. The route `{txId}` must match the `x-request-id` (`tx_{ULID}`) forwarded on the original ARI request.\n\nRequires the `x-api-key` header (enforced by `ApiKeyEndpointFilter`). The request body is legacy SOAP XML (`application/xml` or `text/xml`). Returns `202 Accepted` with an empty body.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "txId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/FullRestrictionPmsAriResponseXml"
              },
              "example": "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n    <soap:Body>\n        <OTA_HotelAvailNotifRS Version=\"1.0\" TimeStamp=\"2026-05-13T13:08:05+07:00\" EchoToken=\"avail-tok-1\" xmlns=\"http://www.opentravel.org/OTA/2003/05\">\n            <Success>True</Success>\n        </OTA_HotelAvailNotifRS>\n    </soap:Body>\n</soap:Envelope>"
            },
            "text/xml": {
              "schema": {
                "$ref": "#/components/schemas/FullRestrictionPmsAriResponseXml"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Accepted"
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/api-key/hash": {
      "post": {
        "tags": [
          "API Keys"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/HashApiKeyRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/api-key/verify": {
      "post": {
        "tags": [
          "API Keys"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VerifyApiKeyRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/connectivity/dynamodb": {
      "get": {
        "tags": [
          "Connectivity"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/connectivity/s3": {
      "get": {
        "tags": [
          "Connectivity"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/connectivity/bookandlink-sql": {
      "get": {
        "tags": [
          "Connectivity"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/connectivity/temporal": {
      "get": {
        "tags": [
          "Connectivity"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/connectivity/sentry": {
      "get": {
        "tags": [
          "Connectivity"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/connectivity/slack": {
      "get": {
        "tags": [
          "Connectivity"
        ],
        "summary": "Test Slack alert connectivity",
        "description": "Sends a test message through Slack incoming webhooks.\nOptional query parameter <c>messageType</c> defaults to <c>mrkdwn</c>. Allowed values: <c>plain_text</c>, <c>mrkdwn</c>, <c>info</c>, <c>warning</c>, <c>success</c>, <c>error</c>, <c>critical</c>.\nThe <c>critical</c> type includes <c>@channel</c> and an artificial exception with the current stack trace.",
        "parameters": [
          {
            "name": "messageType",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "mrkdwn"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SlackAlertConnectivityProbeResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/feature-flags/{propertyId}": {
      "get": {
        "tags": [
          "Feature Flags"
        ],
        "summary": "Get property feature flags",
        "description": "Returns the property-scoped feature flags for a hotel. Boolean flags default to `false` when no configuration exists, and metadata timestamps are only present after configuration has been created.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HotelFeatureFlags"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      },
      "post": {
        "tags": [
          "Feature Flags"
        ],
        "summary": "Set property feature flag",
        "description": "Sets one supported property-scoped feature flag for a hotel. The request body must include the feature flag key and the desired boolean state.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetHotelFeatureFlagRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SetHotelFeatureFlagResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/feature-flags/{propertyId}/ota/{otaId}": {
      "get": {
        "tags": [
          "Feature Flags"
        ],
        "summary": "Get property OTA feature flags",
        "description": "Returns the OTA-scoped feature flags for a hotel and OTA pair. Boolean flags default to `false` when no configuration exists, and metadata timestamps are only present after configuration has been created.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "otaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HotelOtaFeatureFlags"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      },
      "post": {
        "tags": [
          "Feature Flags"
        ],
        "summary": "Set property OTA feature flag",
        "description": "Sets one supported OTA-scoped feature flag for a hotel and OTA pair. The request body must include the feature flag key and the desired boolean state.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "otaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetHotelOtaFeatureFlagRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SetHotelOtaFeatureFlagResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/vhp/vhp.php": {
      "post": {
        "tags": [
          "VHP PMS"
        ],
        "summary": "Receive VHP ARI XML",
        "description": "Receives VHP PMS Availability, Rates, and Inventory (ARI) SOAP XML. The request body must contain either an `OTA_HotelRateAmountNotifRQ` rate update or an `OTA_HotelAvailNotifRQ` availability / restriction update.\n\nThis endpoint authenticates the hotel using the WS-Security username and password from the SOAP header, resolves the hotel code to a property, validates that inventory updates are enabled, and rejects duplicate `EchoToken` values with an error response.\n\nFor valid and authenticated requests, ATLAS stores a redacted copy of the request and generated response XML and returns a VHP-compatible SOAP XML response with `200 OK`.",
        "requestBody": {
          "content": {
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/VhpAvailabilityRatesInventoryRequestXml"
              },
              "example": "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n    <soap:Header>\n        <wsse:Security soap:mustUnderstand=\"1\" xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\">\n            <wsse:UsernameToken>\n                <wsse:Username>vhp-demo</wsse:Username>\n                <wsse:Password Type=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText\">example-password</wsse:Password>\n            </wsse:UsernameToken>\n        </wsse:Security>\n    </soap:Header>\n    <soap:Body>\n        <OTA_HotelAvailNotifRQ EchoToken=\"00000000-0000-4000-8000-000000000001\" TimeStamp=\"2026-05-13T06:08:05+00:00\" Version=\"1.0\" xmlns=\"http://www.opentravel.org/OTA/2003/05\">\n            <AvailStatusMessages HotelCode=\"DEMO-HOTEL\">\n                <AvailStatusMessage BookingLimit=\"48\">\n                    <StatusApplicationControl End=\"2026-06-04\" InvTypeCode=\"SPR\" RatePlanCode=\"DYNA-RB\" Start=\"2026-06-04\"></StatusApplicationControl>\n                </AvailStatusMessage>\n                <AvailStatusMessage BookingLimit=\"48\">\n                    <StatusApplicationControl End=\"2026-06-04\" InvTypeCode=\"SPR\" RatePlanCode=\"DYNA-RO\" Start=\"2026-06-04\"></StatusApplicationControl>\n                </AvailStatusMessage>\n            </AvailStatusMessages>\n        </OTA_HotelAvailNotifRQ>\n    </soap:Body>\n</soap:Envelope>"
            },
            "text/xml": {
              "schema": {
                "$ref": "#/components/schemas/VhpAvailabilityRatesInventoryRequestXml"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/xml": {
                "schema": {
                  "$ref": "#/components/schemas/VhpAvailabilityRatesInventoryResponseXml"
                },
                "example": "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n    <soap:Body>\n        <OTA_HotelAvailNotifRS Version=\"1.0\" TimeStamp=\"2026-05-13T13:08:05+07:00\" EchoToken=\"00000000-0000-4000-8000-000000000001\" xmlns=\"http://www.opentravel.org/OTA/2003/05\">\n            <Success>True</Success>\n        </OTA_HotelAvailNotifRS>\n    </soap:Body>\n</soap:Envelope>"
              }
            }
          }
        },
        "security": [ ]
      }
    },
    "/expertresa/expertresa.php": {
      "post": {
        "tags": [
          "ExpertResa PMS"
        ],
        "summary": "Receive ExpertResa ARI XML",
        "description": "Receives ExpertResa PMS Availability, Rates, and Inventory (ARI) SOAP XML. The request body must contain either an `OTA_HotelAvailNotifRQ` availability / restriction update or an `OTA_HotelRateAmountNotifRQ` rate update.\n\nThis endpoint authenticates the hotel using the WS-Security username and password from the SOAP header, resolves the `HotelCode` to a property, validates that inventory updates are enabled, and rejects duplicate `EchoToken` values.\n\nResponses replicate the legacy PHP envelopes (`<Success>True</Success>` or `<Error>…</Error>`). Returns `200 OK` when `saveAriRequests` is enabled, otherwise `202 Accepted`.",
        "requestBody": {
          "content": {
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/FullRestrictionPmsAriRequestXml"
              },
              "example": "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n    <soap:Header>\n        <wsse:Security xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\">\n            <wsse:UsernameToken>\n                <wsse:Username>api_user</wsse:Username>\n                <wsse:Password Type=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText\">example-password</wsse:Password>\n            </wsse:UsernameToken>\n        </wsse:Security>\n    </soap:Header>\n    <soap:Body>\n        <OTA_HotelAvailNotifRQ xmlns=\"http://www.opentravel.org/OTA/2003/05\" EchoToken=\"avail-tok-1\" Version=\"1.0\">\n            <AvailStatusMessages HotelCode=\"HOTEL1\">\n                <AvailStatusMessage BookingLimit=\"5\">\n                    <StatusApplicationControl Start=\"2027-02-01\" End=\"2027-02-03\" RatePlanCode=\"RACK\" InvTypeCode=\"DBL\"/>\n                    <RestrictionStatus Status=\"Close\" Restriction=\"Arrival\"/>\n                    <RestrictionStatus Status=\"Close\" Restriction=\"Departure\"/>\n                </AvailStatusMessage>\n            </AvailStatusMessages>\n        </OTA_HotelAvailNotifRQ>\n    </soap:Body>\n</soap:Envelope>"
            },
            "text/xml": {
              "schema": {
                "$ref": "#/components/schemas/FullRestrictionPmsAriRequestXml"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/FullRestrictionPmsAriResponseXml"
                }
              }
            }
          },
          "202": {
            "description": "Accepted",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/FullRestrictionPmsAriResponseXml"
                }
              }
            }
          }
        },
        "security": [ ]
      }
    },
    "/guirez_pms/guirez_pms.php": {
      "post": {
        "tags": [
          "Guirez PMS"
        ],
        "summary": "Receive Guirez PMS ARI XML",
        "description": "Receives Guirez PMS Availability, Rates, and Inventory (ARI) SOAP XML. The request body must contain either an `OTA_HotelAvailNotifRQ` availability / restriction update or an `OTA_HotelRateAmountNotifRQ` rate update.\n\nThis endpoint authenticates the hotel using the WS-Security username and password from the SOAP header, resolves the `HotelCode` to a property, validates that inventory updates are enabled, and rejects duplicate `EchoToken` values. A payload without an `EchoToken` attribute is rejected with `Invalid request.`.\n\nResponses replicate the legacy PHP envelopes (`<Success>True</Success>` or `<Error>…</Error>`). Returns `200 OK` when `saveAriRequests` is enabled, otherwise `202 Accepted`.",
        "requestBody": {
          "content": {
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/FullRestrictionPmsAriRequestXml"
              },
              "example": "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n    <soap:Header>\n        <wsse:Security xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\">\n            <wsse:UsernameToken>\n                <wsse:Username>api_user</wsse:Username>\n                <wsse:Password Type=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText\">example-password</wsse:Password>\n            </wsse:UsernameToken>\n        </wsse:Security>\n    </soap:Header>\n    <soap:Body>\n        <OTA_HotelAvailNotifRQ xmlns=\"http://www.opentravel.org/OTA/2003/05\" EchoToken=\"avail-tok-1\" Version=\"1.0\">\n            <AvailStatusMessages HotelCode=\"HOTEL1\">\n                <AvailStatusMessage BookingLimit=\"5\">\n                    <StatusApplicationControl Start=\"2027-02-01\" End=\"2027-02-03\" RatePlanCode=\"RACK\" InvTypeCode=\"DBL\"/>\n                    <RestrictionStatus Status=\"Close\" Restriction=\"Arrival\"/>\n                    <RestrictionStatus Status=\"Close\" Restriction=\"Departure\"/>\n                </AvailStatusMessage>\n            </AvailStatusMessages>\n        </OTA_HotelAvailNotifRQ>\n    </soap:Body>\n</soap:Envelope>"
            },
            "text/xml": {
              "schema": {
                "$ref": "#/components/schemas/FullRestrictionPmsAriRequestXml"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/FullRestrictionPmsAriResponseXml"
                }
              }
            }
          },
          "202": {
            "description": "Accepted",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/FullRestrictionPmsAriResponseXml"
                }
              }
            }
          }
        },
        "security": [ ]
      }
    },
    "/hotelmu/hotelmu.php": {
      "post": {
        "tags": [
          "HotelMu PMS"
        ],
        "summary": "Receive HotelMu ARI XML",
        "description": "Receives HotelMu PMS Availability, Rates, and Inventory (ARI) SOAP XML. The request body must contain either an `OTA_HotelAvailNotifRQ` availability / restriction update or an `OTA_HotelRateAmountNotifRQ` rate update.\n\nThis endpoint authenticates the hotel using the WS-Security username and password from the SOAP header, resolves the `HotelCode` to a property, validates that inventory updates are enabled, and rejects duplicate `EchoToken` values.\n\nResponses replicate the legacy PHP envelopes (`<Success>True</Success>` or `<Error>…</Error>`). Returns `200 OK` when `saveAriRequests` is enabled, otherwise `202 Accepted`.",
        "requestBody": {
          "content": {
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/FullRestrictionPmsAriRequestXml"
              },
              "example": "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n    <soap:Header>\n        <wsse:Security xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\">\n            <wsse:UsernameToken>\n                <wsse:Username>api_user</wsse:Username>\n                <wsse:Password Type=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText\">example-password</wsse:Password>\n            </wsse:UsernameToken>\n        </wsse:Security>\n    </soap:Header>\n    <soap:Body>\n        <OTA_HotelAvailNotifRQ xmlns=\"http://www.opentravel.org/OTA/2003/05\" EchoToken=\"avail-tok-1\" Version=\"1.0\">\n            <AvailStatusMessages HotelCode=\"HOTEL1\">\n                <AvailStatusMessage BookingLimit=\"5\">\n                    <StatusApplicationControl Start=\"2027-02-01\" End=\"2027-02-03\" RatePlanCode=\"RACK\" InvTypeCode=\"DBL\"/>\n                    <RestrictionStatus Status=\"Close\" Restriction=\"Arrival\"/>\n                    <RestrictionStatus Status=\"Close\" Restriction=\"Departure\"/>\n                </AvailStatusMessage>\n            </AvailStatusMessages>\n        </OTA_HotelAvailNotifRQ>\n    </soap:Body>\n</soap:Envelope>"
            },
            "text/xml": {
              "schema": {
                "$ref": "#/components/schemas/FullRestrictionPmsAriRequestXml"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/FullRestrictionPmsAriResponseXml"
                }
              }
            }
          },
          "202": {
            "description": "Accepted",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/FullRestrictionPmsAriResponseXml"
                }
              }
            }
          }
        },
        "security": [ ]
      }
    },
    "/ids/ids.php": {
      "post": {
        "tags": [
          "IDS PMS"
        ],
        "summary": "Receive ids ARI XML",
        "description": "Receives ids PMS Availability, Rates, and Inventory (ARI) SOAP XML. The request body must contain either an `OTA_HotelAvailNotifRQ` availability / restriction update or an `OTA_HotelRateAmountNotifRQ` rate update.\n\nThis endpoint authenticates the hotel using the WS-Security username and password from the SOAP header, resolves the `HotelCode` to a property, validates that inventory updates are enabled, and rejects duplicate `EchoToken` values.\n\nResponses replicate the legacy PHP envelopes (`<Success>True</Success>` or `<Error>…</Error>`). Returns `200 OK` when `saveAriRequests` is enabled, otherwise `202 Accepted`.",
        "requestBody": {
          "content": {
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/FullRestrictionPmsAriRequestXml"
              },
              "example": "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n    <soap:Header>\n        <wsse:Security xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\">\n            <wsse:UsernameToken>\n                <wsse:Username>api_user</wsse:Username>\n                <wsse:Password Type=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText\">example-password</wsse:Password>\n            </wsse:UsernameToken>\n        </wsse:Security>\n    </soap:Header>\n    <soap:Body>\n        <OTA_HotelAvailNotifRQ xmlns=\"http://www.opentravel.org/OTA/2003/05\" EchoToken=\"avail-tok-1\" Version=\"1.0\">\n            <AvailStatusMessages HotelCode=\"HOTEL1\">\n                <AvailStatusMessage BookingLimit=\"5\">\n                    <StatusApplicationControl Start=\"2027-02-01\" End=\"2027-02-03\" RatePlanCode=\"RACK\" InvTypeCode=\"DBL\"/>\n                    <RestrictionStatus Status=\"Close\" Restriction=\"Arrival\"/>\n                    <RestrictionStatus Status=\"Close\" Restriction=\"Departure\"/>\n                </AvailStatusMessage>\n            </AvailStatusMessages>\n        </OTA_HotelAvailNotifRQ>\n    </soap:Body>\n</soap:Envelope>"
            },
            "text/xml": {
              "schema": {
                "$ref": "#/components/schemas/FullRestrictionPmsAriRequestXml"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/FullRestrictionPmsAriResponseXml"
                }
              }
            }
          },
          "202": {
            "description": "Accepted",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/FullRestrictionPmsAriResponseXml"
                }
              }
            }
          }
        },
        "security": [ ]
      }
    },
    "/kai/kai.php": {
      "post": {
        "tags": [
          "KAI PMS"
        ],
        "summary": "Receive kai ARI XML",
        "description": "Receives kai PMS Availability, Rates, and Inventory (ARI) SOAP XML. The request body must contain either an `OTA_HotelAvailNotifRQ` availability / restriction update or an `OTA_HotelRateAmountNotifRQ` rate update.\n\nThis endpoint authenticates the hotel using the WS-Security username and password from the SOAP header, resolves the `HotelCode` to a property, validates that inventory updates are enabled, and rejects duplicate `EchoToken` values.\n\nResponses replicate the legacy PHP envelopes (`<Success>True</Success>` or `<Error>…</Error>`). Returns `200 OK` when `saveAriRequests` is enabled, otherwise `202 Accepted`.",
        "requestBody": {
          "content": {
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/FullRestrictionPmsAriRequestXml"
              },
              "example": "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n    <soap:Header>\n        <wsse:Security xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\">\n            <wsse:UsernameToken>\n                <wsse:Username>api_user</wsse:Username>\n                <wsse:Password Type=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText\">example-password</wsse:Password>\n            </wsse:UsernameToken>\n        </wsse:Security>\n    </soap:Header>\n    <soap:Body>\n        <OTA_HotelAvailNotifRQ xmlns=\"http://www.opentravel.org/OTA/2003/05\" EchoToken=\"avail-tok-1\" Version=\"1.0\">\n            <AvailStatusMessages HotelCode=\"HOTEL1\">\n                <AvailStatusMessage BookingLimit=\"5\">\n                    <StatusApplicationControl Start=\"2027-02-01\" End=\"2027-02-03\" RatePlanCode=\"RACK\" InvTypeCode=\"DBL\"/>\n                    <RestrictionStatus Status=\"Close\" Restriction=\"Arrival\"/>\n                    <RestrictionStatus Status=\"Close\" Restriction=\"Departure\"/>\n                </AvailStatusMessage>\n            </AvailStatusMessages>\n        </OTA_HotelAvailNotifRQ>\n    </soap:Body>\n</soap:Envelope>"
            },
            "text/xml": {
              "schema": {
                "$ref": "#/components/schemas/FullRestrictionPmsAriRequestXml"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/FullRestrictionPmsAriResponseXml"
                }
              }
            }
          },
          "202": {
            "description": "Accepted",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/FullRestrictionPmsAriResponseXml"
                }
              }
            }
          }
        },
        "security": [ ]
      }
    },
    "/newport/newport.php": {
      "post": {
        "tags": [
          "Newport PMS"
        ],
        "summary": "Receive newport ARI XML",
        "description": "Receives newport PMS Availability, Rates, and Inventory (ARI) SOAP XML. The request body must contain either an `OTA_HotelAvailNotifRQ` availability / restriction update or an `OTA_HotelRateAmountNotifRQ` rate update.\n\nThis endpoint authenticates the hotel using the WS-Security username and password from the SOAP header, resolves the `HotelCode` to a property, validates that inventory updates are enabled, and rejects duplicate `EchoToken` values.\n\nResponses replicate the legacy PHP envelopes (`<Success>True</Success>` or `<Error>…</Error>`). Returns `200 OK` when `saveAriRequests` is enabled, otherwise `202 Accepted`.",
        "requestBody": {
          "content": {
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/FullRestrictionPmsAriRequestXml"
              },
              "example": "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n    <soap:Header>\n        <wsse:Security xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\">\n            <wsse:UsernameToken>\n                <wsse:Username>api_user</wsse:Username>\n                <wsse:Password Type=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText\">example-password</wsse:Password>\n            </wsse:UsernameToken>\n        </wsse:Security>\n    </soap:Header>\n    <soap:Body>\n        <OTA_HotelAvailNotifRQ xmlns=\"http://www.opentravel.org/OTA/2003/05\" EchoToken=\"avail-tok-1\" Version=\"1.0\">\n            <AvailStatusMessages HotelCode=\"HOTEL1\">\n                <AvailStatusMessage BookingLimit=\"5\">\n                    <StatusApplicationControl Start=\"2027-02-01\" End=\"2027-02-03\" RatePlanCode=\"RACK\" InvTypeCode=\"DBL\"/>\n                    <RestrictionStatus Status=\"Close\" Restriction=\"Arrival\"/>\n                    <RestrictionStatus Status=\"Close\" Restriction=\"Departure\"/>\n                </AvailStatusMessage>\n            </AvailStatusMessages>\n        </OTA_HotelAvailNotifRQ>\n    </soap:Body>\n</soap:Envelope>"
            },
            "text/xml": {
              "schema": {
                "$ref": "#/components/schemas/FullRestrictionPmsAriRequestXml"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/FullRestrictionPmsAriResponseXml"
                }
              }
            }
          },
          "202": {
            "description": "Accepted",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/FullRestrictionPmsAriResponseXml"
                }
              }
            }
          }
        },
        "security": [ ]
      }
    },
    "/roomme/roomme.php": {
      "post": {
        "tags": [
          "Roomme PMS"
        ],
        "summary": "Receive roomme ARI XML",
        "description": "Receives roomme PMS Availability, Rates, and Inventory (ARI) SOAP XML. The request body must contain either an `OTA_HotelAvailNotifRQ` availability / restriction update or an `OTA_HotelRateAmountNotifRQ` rate update.\n\nThis endpoint authenticates the hotel using the WS-Security username and password from the SOAP header, resolves the `HotelCode` to a property, validates that inventory updates are enabled, and rejects duplicate `EchoToken` values.\n\nResponses replicate the legacy PHP envelopes (`<Success>True</Success>` or `<Error>…</Error>`). Returns `200 OK` when `saveAriRequests` is enabled, otherwise `202 Accepted`.",
        "requestBody": {
          "content": {
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/FullRestrictionPmsAriRequestXml"
              },
              "example": "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n    <soap:Header>\n        <wsse:Security xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\">\n            <wsse:UsernameToken>\n                <wsse:Username>api_user</wsse:Username>\n                <wsse:Password Type=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText\">example-password</wsse:Password>\n            </wsse:UsernameToken>\n        </wsse:Security>\n    </soap:Header>\n    <soap:Body>\n        <OTA_HotelAvailNotifRQ xmlns=\"http://www.opentravel.org/OTA/2003/05\" EchoToken=\"avail-tok-1\" Version=\"1.0\">\n            <AvailStatusMessages HotelCode=\"HOTEL1\">\n                <AvailStatusMessage BookingLimit=\"5\">\n                    <StatusApplicationControl Start=\"2027-02-01\" End=\"2027-02-03\" RatePlanCode=\"RACK\" InvTypeCode=\"DBL\"/>\n                    <RestrictionStatus Status=\"Close\" Restriction=\"Arrival\"/>\n                    <RestrictionStatus Status=\"Close\" Restriction=\"Departure\"/>\n                </AvailStatusMessage>\n            </AvailStatusMessages>\n        </OTA_HotelAvailNotifRQ>\n    </soap:Body>\n</soap:Envelope>"
            },
            "text/xml": {
              "schema": {
                "$ref": "#/components/schemas/FullRestrictionPmsAriRequestXml"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/FullRestrictionPmsAriResponseXml"
                }
              }
            }
          },
          "202": {
            "description": "Accepted",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/FullRestrictionPmsAriResponseXml"
                }
              }
            }
          }
        },
        "security": [ ]
      }
    },
    "/skyhotel/skyhotel.php": {
      "post": {
        "tags": [
          "Skyhotel PMS"
        ],
        "summary": "Receive skyhotel ARI XML",
        "description": "Receives skyhotel PMS Availability, Rates, and Inventory (ARI) SOAP XML. The request body must contain either an `OTA_HotelAvailNotifRQ` availability / restriction update or an `OTA_HotelRateAmountNotifRQ` rate update.\n\nThis endpoint authenticates the hotel using the WS-Security username and password from the SOAP header, resolves the `HotelCode` to a property, validates that inventory updates are enabled, and rejects duplicate `EchoToken` values.\n\nResponses replicate the legacy PHP envelopes (`<Success>True</Success>` or `<Error>…</Error>`). Returns `200 OK` when `saveAriRequests` is enabled, otherwise `202 Accepted`.",
        "requestBody": {
          "content": {
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/FullRestrictionPmsAriRequestXml"
              },
              "example": "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n    <soap:Header>\n        <wsse:Security xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\">\n            <wsse:UsernameToken>\n                <wsse:Username>api_user</wsse:Username>\n                <wsse:Password Type=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText\">example-password</wsse:Password>\n            </wsse:UsernameToken>\n        </wsse:Security>\n    </soap:Header>\n    <soap:Body>\n        <OTA_HotelAvailNotifRQ xmlns=\"http://www.opentravel.org/OTA/2003/05\" EchoToken=\"avail-tok-1\" Version=\"1.0\">\n            <AvailStatusMessages HotelCode=\"HOTEL1\">\n                <AvailStatusMessage BookingLimit=\"5\">\n                    <StatusApplicationControl Start=\"2027-02-01\" End=\"2027-02-03\" RatePlanCode=\"RACK\" InvTypeCode=\"DBL\"/>\n                    <RestrictionStatus Status=\"Close\" Restriction=\"Arrival\"/>\n                    <RestrictionStatus Status=\"Close\" Restriction=\"Departure\"/>\n                </AvailStatusMessage>\n            </AvailStatusMessages>\n        </OTA_HotelAvailNotifRQ>\n    </soap:Body>\n</soap:Envelope>"
            },
            "text/xml": {
              "schema": {
                "$ref": "#/components/schemas/FullRestrictionPmsAriRequestXml"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/FullRestrictionPmsAriResponseXml"
                }
              }
            }
          },
          "202": {
            "description": "Accepted",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/FullRestrictionPmsAriResponseXml"
                }
              }
            }
          }
        },
        "security": [ ]
      }
    },
    "/ultron/ultron.php": {
      "post": {
        "tags": [
          "Ultron PMS"
        ],
        "summary": "Receive ultron ARI XML",
        "description": "Receives ultron PMS Availability, Rates, and Inventory (ARI) SOAP XML. The request body must contain either an `OTA_HotelAvailNotifRQ` availability / restriction update or an `OTA_HotelRateAmountNotifRQ` rate update.\n\nThis endpoint authenticates the hotel using the WS-Security username and password from the SOAP header, resolves the `HotelCode` to a property, validates that inventory updates are enabled, and rejects duplicate `EchoToken` values.\n\nResponses replicate the legacy PHP envelopes (`<Success>True</Success>` or `<Error>…</Error>`). Returns `200 OK` when `saveAriRequests` is enabled, otherwise `202 Accepted`.",
        "requestBody": {
          "content": {
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/FullRestrictionPmsAriRequestXml"
              },
              "example": "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n    <soap:Header>\n        <wsse:Security xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\">\n            <wsse:UsernameToken>\n                <wsse:Username>api_user</wsse:Username>\n                <wsse:Password Type=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText\">example-password</wsse:Password>\n            </wsse:UsernameToken>\n        </wsse:Security>\n    </soap:Header>\n    <soap:Body>\n        <OTA_HotelAvailNotifRQ xmlns=\"http://www.opentravel.org/OTA/2003/05\" EchoToken=\"avail-tok-1\" Version=\"1.0\">\n            <AvailStatusMessages HotelCode=\"HOTEL1\">\n                <AvailStatusMessage BookingLimit=\"5\">\n                    <StatusApplicationControl Start=\"2027-02-01\" End=\"2027-02-03\" RatePlanCode=\"RACK\" InvTypeCode=\"DBL\"/>\n                    <RestrictionStatus Status=\"Close\" Restriction=\"Arrival\"/>\n                    <RestrictionStatus Status=\"Close\" Restriction=\"Departure\"/>\n                </AvailStatusMessage>\n            </AvailStatusMessages>\n        </OTA_HotelAvailNotifRQ>\n    </soap:Body>\n</soap:Envelope>"
            },
            "text/xml": {
              "schema": {
                "$ref": "#/components/schemas/FullRestrictionPmsAriRequestXml"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/FullRestrictionPmsAriResponseXml"
                }
              }
            }
          },
          "202": {
            "description": "Accepted",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/FullRestrictionPmsAriResponseXml"
                }
              }
            }
          }
        },
        "security": [ ]
      }
    },
    "/urbaneroon/urbaneroon.php": {
      "post": {
        "tags": [
          "Urbaneroon PMS"
        ],
        "summary": "Receive urbaneroon ARI XML",
        "description": "Receives urbaneroon PMS Availability, Rates, and Inventory (ARI) SOAP XML. The request body must contain either an `OTA_HotelAvailNotifRQ` availability / restriction update or an `OTA_HotelRateAmountNotifRQ` rate update.\n\nThis endpoint authenticates the hotel using the WS-Security username and password from the SOAP header, resolves the `HotelCode` to a property, validates that inventory updates are enabled, and rejects duplicate `EchoToken` values.\n\nResponses replicate the legacy PHP envelopes (`<Success>True</Success>` or `<Error>…</Error>`). Returns `200 OK` when `saveAriRequests` is enabled, otherwise `202 Accepted`.",
        "requestBody": {
          "content": {
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/FullRestrictionPmsAriRequestXml"
              },
              "example": "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n    <soap:Header>\n        <wsse:Security xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\">\n            <wsse:UsernameToken>\n                <wsse:Username>api_user</wsse:Username>\n                <wsse:Password Type=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText\">example-password</wsse:Password>\n            </wsse:UsernameToken>\n        </wsse:Security>\n    </soap:Header>\n    <soap:Body>\n        <OTA_HotelAvailNotifRQ xmlns=\"http://www.opentravel.org/OTA/2003/05\" EchoToken=\"avail-tok-1\" Version=\"1.0\">\n            <AvailStatusMessages HotelCode=\"HOTEL1\">\n                <AvailStatusMessage BookingLimit=\"5\">\n                    <StatusApplicationControl Start=\"2027-02-01\" End=\"2027-02-03\" RatePlanCode=\"RACK\" InvTypeCode=\"DBL\"/>\n                    <RestrictionStatus Status=\"Close\" Restriction=\"Arrival\"/>\n                    <RestrictionStatus Status=\"Close\" Restriction=\"Departure\"/>\n                </AvailStatusMessage>\n            </AvailStatusMessages>\n        </OTA_HotelAvailNotifRQ>\n    </soap:Body>\n</soap:Envelope>"
            },
            "text/xml": {
              "schema": {
                "$ref": "#/components/schemas/FullRestrictionPmsAriRequestXml"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/FullRestrictionPmsAriResponseXml"
                }
              }
            }
          },
          "202": {
            "description": "Accepted",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/FullRestrictionPmsAriResponseXml"
                }
              }
            }
          }
        },
        "security": [ ]
      }
    },
    "/zuzu/zuzu.php": {
      "post": {
        "tags": [
          "Zuzu PMS"
        ],
        "summary": "Receive zuzu ARI XML",
        "description": "Receives zuzu PMS Availability, Rates, and Inventory (ARI) SOAP XML. The request body must contain either an `OTA_HotelAvailNotifRQ` availability / restriction update or an `OTA_HotelRateAmountNotifRQ` rate update.\n\nThis endpoint authenticates the hotel using the WS-Security username and password from the SOAP header, resolves the `HotelCode` to a property, validates that inventory updates are enabled, and rejects duplicate `EchoToken` values.\n\nResponses replicate the legacy PHP envelopes (`<Success>True</Success>` or `<Error>…</Error>`). Returns `200 OK` when `saveAriRequests` is enabled, otherwise `202 Accepted`.",
        "requestBody": {
          "content": {
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/FullRestrictionPmsAriRequestXml"
              },
              "example": "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n    <soap:Header>\n        <wsse:Security xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\">\n            <wsse:UsernameToken>\n                <wsse:Username>api_user</wsse:Username>\n                <wsse:Password Type=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText\">example-password</wsse:Password>\n            </wsse:UsernameToken>\n        </wsse:Security>\n    </soap:Header>\n    <soap:Body>\n        <OTA_HotelAvailNotifRQ xmlns=\"http://www.opentravel.org/OTA/2003/05\" EchoToken=\"avail-tok-1\" Version=\"1.0\">\n            <AvailStatusMessages HotelCode=\"HOTEL1\">\n                <AvailStatusMessage BookingLimit=\"5\">\n                    <StatusApplicationControl Start=\"2027-02-01\" End=\"2027-02-03\" RatePlanCode=\"RACK\" InvTypeCode=\"DBL\"/>\n                    <RestrictionStatus Status=\"Close\" Restriction=\"Arrival\"/>\n                    <RestrictionStatus Status=\"Close\" Restriction=\"Departure\"/>\n                </AvailStatusMessage>\n            </AvailStatusMessages>\n        </OTA_HotelAvailNotifRQ>\n    </soap:Body>\n</soap:Envelope>"
            },
            "text/xml": {
              "schema": {
                "$ref": "#/components/schemas/FullRestrictionPmsAriRequestXml"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/FullRestrictionPmsAriResponseXml"
                }
              }
            }
          },
          "202": {
            "description": "Accepted",
            "content": {
              "text/html": {
                "schema": {
                  "$ref": "#/components/schemas/FullRestrictionPmsAriResponseXml"
                }
              }
            }
          }
        },
        "security": [ ]
      }
    },
    "/siteminder/ari": {
      "post": {
        "tags": [
          "SiteMinder PMS"
        ],
        "summary": "Receive SiteMinder ARI XML",
        "description": "Receives SiteMinder Availability, Rates, and Restrictions SOAP XML. The request body must contain either an `OTA_HotelAvailNotifRQ` availability / restriction update or an `OTA_HotelRateAmountNotifRQ` rate update.\n\nThis endpoint authenticates the caller using the WS-Security username and password from the SOAP header, resolves the hotel code to a property, and rejects duplicate `EchoToken` values.\n\nFor valid and authenticated requests, ATLAS stores a redacted copy of the request and generated response XML and returns a SiteMinder-compatible SOAP XML response with `200 OK`.",
        "requestBody": {
          "content": {
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/SiteMinderSoapEnvelopeXml"
              },
              "example": "<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\">\n    <SOAP-ENV:Header>\n        <wsse:Security SOAP-ENV:mustUnderstand=\"1\" xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\">\n            <wsse:UsernameToken>\n                <wsse:Username>USERNAME</wsse:Username>\n                <wsse:Password Type=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText\">PASSWORD</wsse:Password>\n            </wsse:UsernameToken>\n        </wsse:Security>\n    </SOAP-ENV:Header>\n    <SOAP-ENV:Body>\n        <OTA_HotelAvailNotifRQ EchoToken=\"00000000-0000-4000-8000-000000000001\" TimeStamp=\"2026-05-13T06:08:05+00:00\" Version=\"1.0\" xmlns=\"http://www.opentravel.org/OTA/2003/05\">\n            <AvailStatusMessages HotelCode=\"DEMO-HOTEL\">\n                <AvailStatusMessage BookingLimit=\"10\">\n                    <StatusApplicationControl End=\"2026-06-04\" InvTypeCode=\"SGL\" RatePlanCode=\"BAR\" Start=\"2026-06-04\"/>\n                    <RestrictionStatus Status=\"Open\"/>\n                </AvailStatusMessage>\n            </AvailStatusMessages>\n        </OTA_HotelAvailNotifRQ>\n    </SOAP-ENV:Body>\n</SOAP-ENV:Envelope>"
            },
            "text/xml": {
              "schema": {
                "$ref": "#/components/schemas/SiteMinderSoapEnvelopeXml"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/xml": {
                "schema": {
                  "$ref": "#/components/schemas/SiteMinderAriResponseXml"
                },
                "example": "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n    <soap:Header />\n    <soap:Body>\n        <OTA_HotelAvailNotifRS Version=\"1.0\" TimeStamp=\"2026-05-13T06:08:05+00:00\" EchoToken=\"00000000-0000-4000-8000-000000000001\" xmlns=\"http://www.opentravel.org/OTA/2003/05\">\n            <Success />\n        </OTA_HotelAvailNotifRS>\n    </soap:Body>\n</soap:Envelope>"
              }
            }
          }
        },
        "security": [ ]
      }
    },
    "/api/metrics/{propertyId}": {
      "get": {
        "tags": [
          "Metrics"
        ],
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "from",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "to",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/tx/{propertyId}": {
      "get": {
        "tags": [
          "TX"
        ],
        "summary": "List transaction rows",
        "description": "Returns one page of transaction metadata rows for a property. Each response contains at most 100 items. It may return fewer than 100 items and still include a cursor; that simply means the client should call this API again with that cursor to get the next page. This endpoint is designed for paginated clients such as TanStack React Query's useInfiniteQuery. Optional UTC instant filters (`from`, `to`) or a transaction id prefix (`query`) narrow the results.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "from",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "to",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "Cursor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Descending",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "Query",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TxRowsPage"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/tx/{propertyId}/{txId}": {
      "get": {
        "tags": [
          "TX"
        ],
        "summary": "Get transaction row",
        "description": "Returns metadata for a single transaction row, including routing details and links to request or response artifacts stored outside DynamoDB.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "txId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TxRow"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/tx-artifacts/{propertyId}/{txId}/{fileName}": {
      "get": {
        "tags": [
          "TX Artifacts"
        ],
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "txId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "fileName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/tx-artifacts/{propertyId}/{txId}/ota/{otaId}/{fileName}": {
      "get": {
        "tags": [
          "TX Artifacts"
        ],
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "txId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "otaId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "fileName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/changelogs/{propertyId}/{roomId}/rate-plan/{ratePlanId}/{stayDate}": {
      "get": {
        "tags": [
          "Changelogs"
        ],
        "summary": "List rate plan changelog for one room rate plan and stay date",
        "description": "Returns paginated commercial-field mutations (rates, stop sell, length-of-stay rules) for the given room, rate plan, and stay date. Default order is oldest-first; set descending=true for newest-first. Use cursor from the prior response for the next page.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "roomId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ratePlanId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "stayDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "Cursor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Descending",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RatePlanChangelogsPage"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/changelogs/{propertyId}/{roomId}/all-rate-plans/{stayDate}": {
      "get": {
        "tags": [
          "Changelogs"
        ],
        "summary": "List rate plan changelogs for a room and stay date",
        "description": "Returns paginated commercial-field mutations for all rate plans on the given room and stay date. Default order is oldest-first; set descending=true for newest-first. Use cursor from the prior response for the next page.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "roomId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "stayDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "Cursor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Descending",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RatePlanChangelogsPage"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/changelogs/{propertyId}/{roomId}/inventory/{stayDate}": {
      "get": {
        "tags": [
          "Changelogs"
        ],
        "summary": "List room inventory changelog for a room and stay date",
        "description": "Returns paginated availability and net allotment mutations for the given room and stay date. Default order is oldest-first; set descending=true for newest-first. Use cursor from the prior response for the next page.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "roomId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "stayDate",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "Cursor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Descending",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RoomInventoryChangelogsPage"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/integrations": {
      "get": {
        "tags": [
          "Integrations"
        ],
        "summary": "List integrations",
        "description": "Returns OTA/PMS channels from external_sites. Omit query parameters for the full catalog, or pass id or name for equality filtering on ota_id or ota_name.",
        "parameters": [
          {
            "name": "Id",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32"
            }
          },
          {
            "name": "Name",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IntegrationsListResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/properties": {
      "get": {
        "tags": [
          "Properties"
        ],
        "summary": "List properties",
        "description": "Returns one page of properties with property id, name, and status. By default only operable properties are included (status active and not suspended); pass active=false for inactive or suspended. Each response contains at most 100 items. Use the cursor from the prior response for the next page.",
        "parameters": [
          {
            "name": "Cursor",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32"
            }
          },
          {
            "name": "Descending",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "Active",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PropertiesPage"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/properties/create-property": {
      "post": {
        "tags": [
          "Properties"
        ],
        "summary": "Create external property mapping",
        "description": "Upserts a property to DynamoDB.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateExternalPropertyMappingRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateExternalPropertyMappingResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/properties/sync-property-mapping": {
      "post": {
        "tags": [
          "Properties"
        ],
        "summary": "Sync property mapping",
        "description": "Syncs the Pelican and Tripla properties mapping.",
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/properties/by-ota/{otaName}": {
      "get": {
        "tags": [
          "Properties"
        ],
        "summary": "List properties by OTA name",
        "description": "Returns all properties mapped to the given OTA name.",
        "parameters": [
          {
            "name": "otaName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PropertiesByOtaResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request"
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/properties/by-ota/{otaName}/{otaHotelCode}": {
      "get": {
        "tags": [
          "Properties"
        ],
        "summary": "Get property by OTA hotel code",
        "description": "Resolves the property id and name for a specific OTA name and OTA hotel code.",
        "parameters": [
          {
            "name": "otaName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "otaHotelCode",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyListItem"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "400": {
            "description": "Bad Request"
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/properties/{propertyId}/rooms/{roomId}": {
      "get": {
        "tags": [
          "Properties"
        ],
        "summary": "Get property room",
        "description": "Returns room metadata (name, cut-off nights) and active rate plans (id, name, parent, validity dates, sales status) for a room on the property.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "roomId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyRoomDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/properties/{propertyId}/rooms": {
      "get": {
        "tags": [
          "Properties"
        ],
        "summary": "List property room types",
        "description": "Returns active room types for the property from legacy Rooms (deleted_at IS NULL), ordered by room_order then id.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyRoomsResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/properties/{propertyId}/unmapped-ari": {
      "get": {
        "tags": [
          "Properties"
        ],
        "summary": "List unmapped PMS ARI room/rate pairs",
        "description": "Returns external room type and rate plan ids from PMS ARI updates that could not be mapped to internal inventory for this property. Each item includes lastSentAt and count from DynamoDB.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyUnmappedAriResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/properties/{propertyId}": {
      "get": {
        "tags": [
          "Properties"
        ],
        "summary": "Get property",
        "description": "Returns the property id, name, and integrated OTA/PMS channels for a single property.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyDetailsResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/properties/{propertyId}/yearly-monthly-deals": {
      "get": {
        "tags": [
          "Properties"
        ],
        "summary": "List daily deals",
        "description": "Returns daily availability, rates, and restrictions for room rate plans on this property. Optional filters: id, roomId, ratePlanId, and stay date (exact date or dateStart-dateEnd range). Each response contains at most 100 items, ordered by deal id. When cursor is null, there are no further pages; otherwise pass it with the same filters for the next page.",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "id",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32"
            }
          },
          {
            "name": "roomId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32"
            }
          },
          {
            "name": "ratePlanId",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32"
            }
          },
          {
            "name": "date",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "dateStart",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "dateEnd",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListYearlyMonthlyDealsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      },
      "put": {
        "tags": [
          "Properties"
        ],
        "summary": "Upsert daily deals",
        "description": "Creates or updates daily availability, rates, and restrictions for room rate plans on this property. Request body: JSON array of deal rows (roomId, ratePlanId, date, and optional ARI fields).",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/UpsertYearlyMonthlyDealItemRequest"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UpsertYearlyMonthlyDealsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/sqs-ledger": {
      "get": {
        "tags": [
          "SQS Ledger"
        ],
        "summary": "List SQS message ledger entries",
        "description": "Returns one page of ledger entries for a queue and message group (tenant), newest MessageDeduplicationId first. Pass QueueName, MessageGroupId, and optional Cursor from the prior response.",
        "parameters": [
          {
            "name": "QueueName",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "MessageGroupId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Cursor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SqsMessageLedgerPage"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/sqs-ledger/failures": {
      "get": {
        "tags": [
          "SQS Ledger"
        ],
        "summary": "List failed SQS message ledger entries",
        "description": "Returns one page of failed ledger entries (status failure or terminated) for a queue (all tenants), newest MessageDeduplicationId first. Pass QueueName and optional Cursor from the prior response.",
        "parameters": [
          {
            "name": "QueueName",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Cursor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SqsMessageLedgerPage"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/dashboard-login-emails": {
      "post": {
        "tags": [
          "ATLAS Dashboard Login Emails"
        ],
        "summary": "Add ATLAS dashboard login email",
        "description": "Adds an email address to the allowlist for ATLAS dashboard sign-in.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DashboardLoginEmailRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      },
      "delete": {
        "tags": [
          "ATLAS Dashboard Login Emails"
        ],
        "summary": "Remove ATLAS dashboard login email",
        "description": "Removes an email from the ATLAS dashboard allowlist. Idempotent when the email is already absent. Pass the email as a query parameter.",
        "parameters": [
          {
            "name": "Email",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      },
      "get": {
        "tags": [
          "ATLAS Dashboard Login Emails"
        ],
        "summary": "List ATLAS dashboard login emails",
        "description": "Returns all emails allowlisted for ATLAS dashboard sign-in.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListDashboardLoginEmailsResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/dashboard-login-emails/check": {
      "post": {
        "tags": [
          "ATLAS Dashboard Login Emails"
        ],
        "summary": "Check ATLAS dashboard login email",
        "description": "Returns whether the email is allowlisted for ATLAS dashboard sign-in. When allowed, updates lastLoginAt.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DashboardLoginEmailRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CheckDashboardLoginEmailResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpValidationProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/tripla-link/logs": {
      "post": {
        "tags": [
          "tripla Link"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TriplaLinkLogRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "security": [
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/api/glovia/rate-plan": {
      "post": {
        "tags": [
          "Glovia PMS"
        ],
        "summary": "Get Glovia rate plans",
        "description": "Receives a Glovia `inputPlanGet` XML request, authenticates the caller using the `attestationInformation` credentials in the XML payload, validates the `hcod` hotel code, and returns Glovia `returnPlanGet` XML with the mapped rate plans for that hotel. Validation, authentication, authorization, and upstream data failures are returned as XML Problem Details responses.",
        "requestBody": {
          "content": {
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/GloviaGetPlanRequestXml"
              },
              "example": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<inputPlanGet>\n    <attestationInformation>\n        <loginID>glovia-demo</loginID>\n        <loginPassword>example-password</loginPassword>\n    </attestationInformation>\n    <inputPlanGetParam>\n        <hcod>123</hcod>\n    </inputPlanGetParam>\n</inputPlanGet>"
            },
            "text/xml": {
              "schema": {
                "$ref": "#/components/schemas/GloviaGetPlanRequestXml"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/xml": {
                "schema": {
                  "$ref": "#/components/schemas/GloviaGetPlanResponseXml"
                },
                "example": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<returnPlanGet>\n    <processingResult>true</processingResult>\n    <errorMessage />\n    <returnPlanGetList>\n        <returnPlan>\n            <hcod>123</hcod>\n            <campaignCode>1</campaignCode>\n            <campaignName>Autumn Taste Plan</campaignName>\n            <settingStartDay>2016/08/01</settingStartDay>\n            <settingEndDay>2016/11/30</settingEndDay>\n            <saleStatus>0</saleStatus>\n        </returnPlan>\n        <returnPlan>\n            <hcod>123</hcod>\n            <campaignCode>2</campaignCode>\n            <campaignName>Early Bird Special</campaignName>\n            <settingStartDay>2017/01/01</settingStartDay>\n            <settingEndDay>2017/12/31</settingEndDay>\n            <saleStatus>1</saleStatus>\n        </returnPlan>\n    </returnPlanGetList>\n</returnPlanGet>"
              }
            }
          }
        },
        "security": [ ]
      }
    },
    "/api/glovia/update-price": {
      "post": {
        "tags": [
          "Glovia PMS"
        ],
        "summary": "Update Glovia prices",
        "description": "Receives a Glovia `inputPriceUpdate` XML request, authenticates via `attestationInformation`, validates hotel/plan/room/date/price fields, and returns Glovia `returnPriceUpdate` XML. On success, `processingResult` is true and the price update is accepted for processing. Validation, authentication, authorization, and relation-check failures are returned as XML Problem Details.",
        "requestBody": {
          "content": {
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/GloviaPriceUpdateRequestXml"
              },
              "example": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<inputPriceUpdate>\n    <attestationInformation>\n        <loginID>glovia-demo</loginID>\n        <loginPassword>example-password</loginPassword>\n    </attestationInformation>\n    <inputPriceUpdateParam>\n        <hcod>123</hcod>\n        <planCode>456</planCode>\n        <roomTypeCode>789</roomTypeCode>\n        <startDate>2022/05/23</startDate>\n        <endDate>2022/11/18</endDate>\n        <price1>14500</price1>\n        <price2>14500</price2>\n        <price3>14500</price3>\n        <price4>14500</price4>\n        <price5>14500</price5>\n        <price6>14500</price6>\n        <price7>14500</price7>\n        <price8>14500</price8>\n        <price9>14500</price9>\n        <price10>14500</price10>\n    </inputPriceUpdateParam>\n</inputPriceUpdate>"
            },
            "text/xml": {
              "schema": {
                "$ref": "#/components/schemas/GloviaPriceUpdateRequestXml"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/xml": {
                "schema": {
                  "$ref": "#/components/schemas/GloviaPriceUpdateResponseXml"
                },
                "example": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<returnPriceUpdate>\n    <hcod>123</hcod>\n    <campaignCode>456</campaignCode>\n    <roomType>789</roomType>\n    <settingStartDay>2022/05/23</settingStartDay>\n    <settingEndDay>2022/11/18</settingEndDay>\n    <processingResult>true</processingResult>\n    <errorMessage></errorMessage>\n</returnPriceUpdate>"
              }
            }
          }
        },
        "security": [ ]
      }
    },
    "/api/glovia/stop-sales": {
      "post": {
        "tags": [
          "Glovia PMS"
        ],
        "summary": "Update Glovia stop sales",
        "description": "Receives a Glovia `inputSellStopUpdate` XML request, authenticates via `attestationInformation`, validates hotel/plan/room/date/sales-condition fields, and returns Glovia `returnSellStopUpdate` XML. On success, `processingResult` is true and the stop-sales update is accepted for processing. Validation, authentication, authorization, and relation-check failures are returned as XML Problem Details.",
        "requestBody": {
          "content": {
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/GloviaSellStopUpdateRequestXml"
              },
              "example": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<inputSellStopUpdate>\n    <attestationInformation>\n        <loginID>glovia-demo</loginID>\n        <loginPassword>example-password</loginPassword>\n    </attestationInformation>\n    <inputSellStopUpdateParam>\n        <hcod>123</hcod>\n        <planCode>456</planCode>\n        <roomTypeCode>789</roomTypeCode>\n        <startDate>2022/05/23</startDate>\n        <endDate>2022/11/18</endDate>\n        <salesCondition>1</salesCondition>\n    </inputSellStopUpdateParam>\n</inputSellStopUpdate>"
            },
            "text/xml": {
              "schema": {
                "$ref": "#/components/schemas/GloviaSellStopUpdateRequestXml"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/xml": {
                "schema": {
                  "$ref": "#/components/schemas/GloviaSellStopUpdateResponseXml"
                },
                "example": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<returnSellStopUpdate>\n    <hcod>123</hcod>\n    <campaignCode>456</campaignCode>\n    <roomType>789</roomType>\n    <settingStartDay>2022/05/23</settingStartDay>\n    <settingEndDay>2022/11/18</settingEndDay>\n    <processingResult>true</processingResult>\n    <errorMessage></errorMessage>\n</returnSellStopUpdate>"
              }
            }
          }
        },
        "security": [ ]
      }
    },
    "/api/glovia/reservation": {
      "post": {
        "tags": [
          "Glovia PMS"
        ],
        "summary": "Get Glovia reservations",
        "description": "Receives a Glovia `inputReservationGet` XML request, authenticates via `attestationInformation`, validates hotel and `execCount` fields, and returns Glovia `returnReservationGet` XML with pending reservation updates. Validation, authentication, authorization, and upstream data failures are returned as XML Problem Details.",
        "requestBody": {
          "content": {
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/GloviaGetReservationRequestXml"
              },
              "example": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<inputReservationGet>\n    <attestationInformation>\n        <loginID>glovia-demo</loginID>\n        <loginPassword>example-password</loginPassword>\n    </attestationInformation>\n    <inputReservationGetParam>\n        <execCount>100</execCount>\n        <hcod>123</hcod>\n    </inputReservationGetParam>\n</inputReservationGet>"
            },
            "text/xml": {
              "schema": {
                "$ref": "#/components/schemas/GloviaGetReservationRequestXml"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/xml": {
                "schema": {
                  "$ref": "#/components/schemas/GloviaGetReservationResponseXml"
                },
                "example": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<returnReservationGet>\n    <processingResult>0</processingResult>\n    <errorMessage />\n    <reservationGetList>\n        <reservation>\n            <rsv>123456</rsv>\n            <seq>1</seq>\n            <updatedDate>2025/03/10 10:05:10</updatedDate>\n            <lastUpdatedDate>2025/03/10 10:05:10</lastUpdatedDate>\n            <arrivalDay>2025/03/15</arrivalDay>\n            <departureDay>2025/03/16</departureDay>\n            <arrivalDate>2025/03/15 15:00:00</arrivalDate>\n            <departureDate>2025/03/16 10:00:00</departureDate>\n            <customerID>12345</customerID>\n            <customerMail>taro.yoyaku@example.com</customerMail>\n            <sts>1</sts>\n            <hcod>123</hcod>\n            <nights>1</nights>\n            <memo1>Transfer requested from airport</memo1>\n            <memo2>Allergies: Peanuts</memo2>\n            <memo3 />\n            <memo4 />\n            <memo5 />\n            <memo6 />\n            <memo7 />\n            <memo8 />\n            <memo9 />\n            <memo10 />\n            <nameKanji>予約 太郎</nameKanji>\n            <nameKana>ヨヤク タロウ</nameKana>\n            <companyKana>カブシキガイシャホテル</companyKana>\n            <paymentMethod>1</paymentMethod>\n            <donations>600</donations>\n            <price>15500</price>\n            <agentCode />\n            <agentName />\n            <planCode>P0001</planCode>\n            <planName>Standard Stay Plan</planName>\n            <flagSmartphone>1</flagSmartphone>\n            <couponName>SummerCoupon</couponName>\n            <couponDefrayer>2</couponDefrayer>\n            <couponDiscount>2000</couponDiscount>\n            <couponConditionsMemo>3 nights or more</couponConditionsMemo>\n            <rewardCouponName />\n            <campaignName>Spring Campaign</campaignName>\n            <campaignDiscount>200</campaignDiscount>\n            <campaignConditionsMemo>Member Only</campaignConditionsMemo>\n            <mailNewsletterMemberDiscount>200</mailNewsletterMemberDiscount>\n            <point>500</point>\n            <reserveDetails>\n                <roomDetail>\n                    <accommodationDay>2025/03/15</accommodationDay>\n                    <occupancy>2</occupancy>\n                    <roomTypeCode>S</roomTypeCode>\n                    <taxCategory>1</taxCategory>\n                    <mealCode>00001</mealCode>\n                    <roomSerialNumber>0</roomSerialNumber>\n                    <maleOccupancy>1</maleOccupancy>\n                    <femaleOccupancy>0</femaleOccupancy>\n                    <childAOccupancy>1</childAOccupancy>\n                    <childBOccupancy>0</childBOccupancy>\n                    <childCOccupancy>0</childCOccupancy>\n                    <childDOccupancy>0</childDOccupancy>\n                    <childEOccupancy>0</childEOccupancy>\n                    <childFOccupancy>0</childFOccupancy>\n                    <childGOccupancy>0</childGOccupancy>\n                    <childHOccupancy>0</childHOccupancy>\n                    <childIOccupancy>0</childIOccupancy>\n                    <childJOccupancy>0</childJOccupancy>\n                    <adultPrice>8000</adultPrice>\n                    <childAPrice>7500</childAPrice>\n                    <childBPrice>0</childBPrice>\n                    <childCPrice>0</childCPrice>\n                    <childDPrice>0</childDPrice>\n                    <childEPrice>0</childEPrice>\n                    <childFPrice>0</childFPrice>\n                    <childGPrice>0</childGPrice>\n                    <childHPrice>0</childHPrice>\n                    <childIPrice>0</childIPrice>\n                    <childJPrice>0</childJPrice>\n                    <allPrice>15500</allPrice>\n                    <representativeNameKanji>宿泊者 太郎</representativeNameKanji>\n                    <representativeNameKana>シュクハクシャ タロウ</representativeNameKana>\n                    <tel>090-1234-5678</tel>\n                    <postalCodeFirst>812</postalCodeFirst>\n                    <postalCodeSecond>0872</postalCodeSecond>\n                    <addressFirst>福岡県</addressFirst>\n                    <addressSecond>福岡市博多区春町</addressSecond>\n                    <addressThird>5丁目3-2</addressThird>\n                </roomDetail>\n            </reserveDetails>\n        </reservation>\n        <reservation>\n            <rsv>987654</rsv>\n            <seq>2</seq>\n            <updatedDate>2025/04/01 09:00:00</updatedDate>\n            <lastUpdatedDate>2025/04/01 09:00:00</lastUpdatedDate>\n            <arrivalDay>2025/05/20</arrivalDay>\n            <departureDay>2025/05/22</departureDay>\n            <arrivalDate>2025/05/20 18:00:00</arrivalDate>\n            <departureDate>2025/05/22 11:00:00</departureDate>\n            <customerID>54321</customerID>\n            <customerMail>hanako.suzuki@example.com</customerMail>\n            <sts>2</sts>\n            <hcod>123</hcod>\n            <nights>2</nights>\n            <memo1>Late check-in expected</memo1>\n            <memo2 />\n            <memo3 />\n            <memo4 />\n            <memo5 />\n            <memo6 />\n            <memo7 />\n            <memo8 />\n            <memo9 />\n            <memo10 />\n            <nameKanji>鈴木 花子</nameKanji>\n            <nameKana>スズキ ハナコ</nameKana>\n            <companyKana />\n            <paymentMethod>1</paymentMethod>\n            <donations>0</donations>\n            <price>20000</price>\n            <agentCode>AGT001</agentCode>\n            <agentName>JTB Travel</agentName>\n            <planCode>P0002</planCode>\n            <planName>Business Single</planName>\n            <flagSmartphone>1</flagSmartphone>\n            <couponName />\n            <couponDefrayer>0</couponDefrayer>\n            <couponDiscount>0</couponDiscount>\n            <couponConditionsMemo />\n            <rewardCouponName />\n            <campaignName />\n            <campaignDiscount>0</campaignDiscount>\n            <campaignConditionsMemo />\n            <mailNewsletterMemberDiscount>0</mailNewsletterMemberDiscount>\n            <point>0</point>\n            <reserveDetails>\n                <roomDetail>\n                    <accommodationDay>2025/05/20</accommodationDay>\n                    <occupancy>1</occupancy>\n                    <roomTypeCode>SNG</roomTypeCode>\n                    <taxCategory>1</taxCategory>\n                    <mealCode>00002</mealCode>\n                    <roomSerialNumber>0</roomSerialNumber>\n                    <maleOccupancy>0</maleOccupancy>\n                    <femaleOccupancy>1</femaleOccupancy>\n                    <childAOccupancy>0</childAOccupancy>\n                    <childBOccupancy>0</childBOccupancy>\n                    <childCOccupancy>0</childCOccupancy>\n                    <childDOccupancy>0</childDOccupancy>\n                    <childEOccupancy>0</childEOccupancy>\n                    <childFOccupancy>0</childFOccupancy>\n                    <childGOccupancy>0</childGOccupancy>\n                    <childHOccupancy>0</childHOccupancy>\n                    <childIOccupancy>0</childIOccupancy>\n                    <childJOccupancy>0</childJOccupancy>\n                    <adultPrice>10000</adultPrice>\n                    <childAPrice>0</childAPrice>\n                    <childBPrice>0</childBPrice>\n                    <childCPrice>0</childCPrice>\n                    <childDPrice>0</childDPrice>\n                    <childEPrice>0</childEPrice>\n                    <childFPrice>0</childFPrice>\n                    <childGPrice>0</childGPrice>\n                    <childHPrice>0</childHPrice>\n                    <childIPrice>0</childIPrice>\n                    <childJPrice>0</childJPrice>\n                    <allPrice>10000</allPrice>\n                    <representativeNameKanji>鈴木 花子</representativeNameKanji>\n                    <representativeNameKana>スズキ ハナコ</representativeNameKana>\n                    <tel>080-9876-5432</tel>\n                    <postalCodeFirst>100</postalCodeFirst>\n                    <postalCodeSecond>0001</postalCodeSecond>\n                    <addressFirst>東京都</addressFirst>\n                    <addressSecond>千代田区千代田</addressSecond>\n                    <addressThird>1-1</addressThird>\n                </roomDetail>\n                <roomDetail>\n                    <accommodationDay>2025/05/21</accommodationDay>\n                    <occupancy>1</occupancy>\n                    <roomTypeCode>SNG</roomTypeCode>\n                    <taxCategory>1</taxCategory>\n                    <mealCode>00002</mealCode>\n                    <roomSerialNumber>1</roomSerialNumber>\n                    <maleOccupancy>0</maleOccupancy>\n                    <femaleOccupancy>1</femaleOccupancy>\n                    <childAOccupancy>0</childAOccupancy>\n                    <childBOccupancy>0</childBOccupancy>\n                    <childCOccupancy>0</childCOccupancy>\n                    <childDOccupancy>0</childDOccupancy>\n                    <childEOccupancy>0</childEOccupancy>\n                    <childFOccupancy>0</childFOccupancy>\n                    <childGOccupancy>0</childGOccupancy>\n                    <childHOccupancy>0</childHOccupancy>\n                    <childIOccupancy>0</childIOccupancy>\n                    <childJOccupancy>0</childJOccupancy>\n                    <adultPrice>10000</adultPrice>\n                    <childAPrice>0</childAPrice>\n                    <childBPrice>0</childBPrice>\n                    <childCPrice>0</childCPrice>\n                    <childDPrice>0</childDPrice>\n                    <childEPrice>0</childEPrice>\n                    <childFPrice>0</childFPrice>\n                    <childGPrice>0</childGPrice>\n                    <childHPrice>0</childHPrice>\n                    <childIPrice>0</childIPrice>\n                    <childJPrice>0</childJPrice>\n                    <allPrice>10000</allPrice>\n                    <representativeNameKanji>鈴木 花子</representativeNameKanji>\n                    <representativeNameKana>スズキ ハナコ</representativeNameKana>\n                    <tel>080-9876-5432</tel>\n                    <postalCodeFirst>100</postalCodeFirst>\n                    <postalCodeSecond>0001</postalCodeSecond>\n                    <addressFirst>東京都</addressFirst>\n                    <addressSecond>千代田区千代田</addressSecond>\n                    <addressThird>1-1</addressThird>\n                </roomDetail>\n            </reserveDetails>\n        </reservation>\n    </reservationGetList>\n</returnReservationGet>"
              }
            }
          }
        },
        "security": [ ]
      }
    },
    "/api/glovia/confirm-reservation": {
      "post": {
        "tags": [
          "Glovia PMS"
        ],
        "summary": "Confirm Glovia reservation update",
        "description": "Receives a Glovia `inputReservationUpdate` XML callback from the PMS, authenticates via `attestationInformation`, validates reservation fields, and returns Glovia `returnReservationUpdate` XML. This endpoint has no `hcod` field; authentication does not perform hotel authorization.",
        "requestBody": {
          "content": {
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/GloviaReservationUpdateRequestXml"
              },
              "example": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<inputReservationUpdate>\n    <attestationInformation>\n        <loginID>glovia-demo</loginID>\n        <loginPassword>example-password</loginPassword>\n    </attestationInformation>\n    <inputReservationUpdateParam>\n        <rsv>123456</rsv>\n        <changeSerialNumber>1</changeSerialNumber>\n        <processingResult>true</processingResult>\n        <errorMessage></errorMessage>\n    </inputReservationUpdateParam>\n</inputReservationUpdate>"
            },
            "text/xml": {
              "schema": {
                "$ref": "#/components/schemas/GloviaReservationUpdateRequestXml"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/xml": {
                "schema": {
                  "$ref": "#/components/schemas/GloviaReservationUpdateResponseXml"
                },
                "example": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<returnReservationUpdate>\n    <processingResult>true</processingResult>\n    <errorMessage />\n</returnReservationUpdate>"
              }
            }
          }
        },
        "security": [ ]
      }
    },
    "/api/glovia/reservation-arrival-time": {
      "post": {
        "tags": [
          "Glovia PMS"
        ],
        "summary": "Get Glovia arrival times",
        "description": "Receives a Glovia `inputArrivalTimeGet` XML request, authenticates via `attestationInformation`, validates hotel and `execCount` fields, and returns Glovia `returnArrivalTimeGet` XML with pending reservation arrival-time updates. Validation, authentication, authorization, and upstream data failures are returned as XML Problem Details.",
        "requestBody": {
          "content": {
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/GloviaGetArrivalTimeRequestXml"
              },
              "example": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<inputArrivalTimeGet>\n    <attestationInformation>\n        <loginID>glovia-demo</loginID>\n        <loginPassword>example-password</loginPassword>\n    </attestationInformation>\n    <inputArrivalTimeGetParam>\n        <execCount>100</execCount>\n        <hcod>123</hcod>\n    </inputArrivalTimeGetParam>\n</inputArrivalTimeGet>"
            },
            "text/xml": {
              "schema": {
                "$ref": "#/components/schemas/GloviaGetArrivalTimeRequestXml"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/xml": {
                "schema": {
                  "$ref": "#/components/schemas/GloviaGetArrivalTimeResponseXml"
                },
                "example": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<returnArrivalTimeGet>\n    <processingResult>true</processingResult>\n    <errorMessage />\n    <returnArrivaltimeGetList>\n        <returnArrivalTime>\n            <rsv>12345</rsv>\n            <updateNumber>2</updateNumber>\n            <hcod>123</hcod>\n            <arrivalDate>2026/03/10 12:00:00</arrivalDate>\n        </returnArrivalTime>\n        <returnArrivalTime>\n            <rsv>12346</rsv>\n            <updateNumber>3</updateNumber>\n            <hcod>123</hcod>\n            <arrivalDate>2026/03/10 14:30:00</arrivalDate>\n        </returnArrivalTime>\n    </returnArrivaltimeGetList>\n</returnArrivalTimeGet>"
              }
            }
          }
        },
        "security": [ ]
      }
    },
    "/api/glovia/confirm-reservation-arrival-time": {
      "post": {
        "tags": [
          "Glovia PMS"
        ],
        "summary": "Confirm Glovia arrival-time update",
        "description": "Receives a Glovia `inputArrivalTimeUpdate` XML callback from the PMS, authenticates via `attestationInformation`, validates reservation fields, and returns Glovia `returnArrivalTimeUpdate` XML. This endpoint has no `hcod` field; authentication does not perform hotel authorization.",
        "requestBody": {
          "content": {
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/GloviaArrivalTimeUpdateRequestXml"
              },
              "example": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<inputArrivalTimeUpdate>\n    <attestationInformation>\n        <loginID>glovia-demo</loginID>\n        <loginPassword>example-password</loginPassword>\n    </attestationInformation>\n    <inputArrivalTimeUpdateParam>\n        <rsv>123457</rsv>\n        <changeSerialNumber>3</changeSerialNumber>\n        <processingResult>true</processingResult>\n        <errorMessage></errorMessage>\n    </inputArrivalTimeUpdateParam>\n</inputArrivalTimeUpdate>"
            },
            "text/xml": {
              "schema": {
                "$ref": "#/components/schemas/GloviaArrivalTimeUpdateRequestXml"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/xml": {
                "schema": {
                  "$ref": "#/components/schemas/GloviaArrivalTimeUpdateResponseXml"
                },
                "example": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<returnArrivalTimeUpdate>\n    <processingResult>true</processingResult>\n    <errorMessage />\n</returnArrivalTimeUpdate>"
              }
            }
          }
        },
        "security": [ ]
      }
    },
    "/api/glovia/update-inventory": {
      "post": {
        "tags": [
          "Glovia PMS"
        ],
        "summary": "Update Glovia room inventory",
        "description": "Receives a Glovia `inputRoomInventoryUpdate` XML request, authenticates via `attestationInformation`, validates hotel/room/date/count fields, and returns Glovia `returnRoomInventoryUpdate` XML. On success, `processingResult` is true and the inventory update is accepted for processing. Validation, authentication, authorization, and relation-check failures are returned as XML Problem Details.",
        "requestBody": {
          "content": {
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/GloviaRoomInventoryUpdateRequestXml"
              },
              "example": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<inputRoomInventoryUpdate>\n    <attestationInformation>\n        <loginID>glovia-demo</loginID>\n        <loginPassword>example-password</loginPassword>\n    </attestationInformation>\n    <inputRoomInventoryUpdateParam>\n        <hcod>123</hcod>\n        <roomTypeCode>789</roomTypeCode>\n        <targetDate>2022/05/23</targetDate>\n        <roomCount>7</roomCount>\n    </inputRoomInventoryUpdateParam>\n</inputRoomInventoryUpdate>"
            },
            "text/xml": {
              "schema": {
                "$ref": "#/components/schemas/GloviaRoomInventoryUpdateRequestXml"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/xml": {
                "schema": {
                  "$ref": "#/components/schemas/GloviaRoomInventoryUpdateResponseXml"
                },
                "example": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<returnRoomInventoryUpdate>\n    <hcod>123</hcod>\n    <roomTypeCode>789</roomTypeCode>\n    <processingResult>true</processingResult>\n    <errorMessage />\n</returnRoomInventoryUpdate>"
              }
            }
          }
        },
        "security": [ ]
      }
    },
    "/api/glovia/inventory": {
      "post": {
        "tags": [
          "Glovia PMS"
        ],
        "summary": "Get Glovia room inventory",
        "description": "Receives a Glovia `inputRoomInventoryGet` XML request, authenticates via `attestationInformation`, validates hotel/room/date-range fields, and returns Glovia `returnRoomInventoryGet` XML with per-day reserved and remaining room counts. Validation, authentication, authorization, and upstream data failures are returned as XML Problem Details.",
        "requestBody": {
          "content": {
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/GloviaGetInventoryRequestXml"
              },
              "example": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<inputRoomInventoryGet>\n    <attestationInformation>\n        <loginID>glovia-demo</loginID>\n        <loginPassword>example-password</loginPassword>\n    </attestationInformation>\n    <inputRoomInventoryGetParam>\n        <hcod>123</hcod>\n        <roomTypeCode>789</roomTypeCode>\n        <startDate>2022/05/23</startDate>\n        <endDate>2022/05/25</endDate>\n    </inputRoomInventoryGetParam>\n</inputRoomInventoryGet>"
            },
            "text/xml": {
              "schema": {
                "$ref": "#/components/schemas/GloviaGetInventoryRequestXml"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/xml": {
                "schema": {
                  "$ref": "#/components/schemas/GloviaGetInventoryResponseXml"
                },
                "example": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<returnRoomInventoryGet>\n    <processingResult>true</processingResult>\n    <errorMessage />\n    <roomInventoryDetail>\n        <hcod>123</hcod>\n        <roomType>789</roomType>\n        <date>2022/05/23</date>\n        <reservedRooms>2</reservedRooms>\n        <remainingRooms>8</remainingRooms>\n    </roomInventoryDetail>\n    <roomInventoryDetail>\n        <hcod>123</hcod>\n        <roomType>789</roomType>\n        <date>2022/05/24</date>\n        <reservedRooms>3</reservedRooms>\n        <remainingRooms>7</remainingRooms>\n    </roomInventoryDetail>\n    <roomInventoryDetail>\n        <hcod>123</hcod>\n        <roomType>789</roomType>\n        <date>2022/05/25</date>\n        <reservedRooms>1</reservedRooms>\n        <remainingRooms>9</remainingRooms>\n    </roomInventoryDetail>\n</returnRoomInventoryGet>"
              }
            }
          }
        },
        "security": [ ]
      }
    }
  },
  "components": {
    "schemas": {
      "CheckDashboardLoginEmailResponse": {
        "required": [
          "allowed",
          "lastLoginAt"
        ],
        "type": "object",
        "properties": {
          "allowed": {
            "type": "boolean"
          },
          "lastLoginAt": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          }
        }
      },
      "CreateExternalPropertyMappingRequest": {
        "type": "object",
        "properties": {
          "hotelIntegrations": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "$ref": "#/components/schemas/HotelIntegration"
            }
          }
        }
      },
      "CreateExternalPropertyMappingResponse": {
        "type": "object",
        "properties": {
          "propertyId": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "DashboardLoginEmail": {
        "required": [
          "email",
          "createdAt",
          "lastLoginAt"
        ],
        "type": "object",
        "properties": {
          "email": {
            "type": "string"
          },
          "createdAt": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "lastLoginAt": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          }
        }
      },
      "DashboardLoginEmailRequest": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string"
          }
        }
      },
      "FullRestrictionPmsAriNotifResponseXml": {
        "type": "object",
        "properties": {
          "version": {
            "type": "string",
            "description": "The OTA specification version (e.g. `\"1.0\"`)."
          },
          "timeStamp": {
            "type": "string",
            "description": "The response timestamp."
          },
          "echoToken": {
            "type": "string",
            "description": "The echoed request token."
          },
          "success": {
            "type": [
              "null",
              "string"
            ],
            "description": "The `&lt;Success&gt;` element value when the update succeeded."
          }
        },
        "description": "Shared OTA notification response shape for this vendor family."
      },
      "FullRestrictionPmsAriRequestType": {
        "type": "integer",
        "description": "Which OTA notification the request body carries."
      },
      "FullRestrictionPmsAriRequestXml": {
        "type": "object",
        "properties": {
          "echoToken": {
            "type": "string",
            "description": "First `EchoToken` attribute in document order; empty when absent."
          },
          "hasEchoToken": {
            "type": "boolean",
            "description": "Whether an `EchoToken` attribute exists at all. guirez_pms distinguishes a missing\nattribute (\"Invalid request.\") from a blank one (fake success)."
          },
          "username": {
            "type": "string",
            "description": "WS-Security `wsse:Username` element value; empty when absent."
          },
          "password": {
            "type": "string",
            "description": "WS-Security `wsse:Password` element value. Only passwords whose `Type` attribute\nmentions `PasswordText` count, matching the legacy regex."
          },
          "hotelCode": {
            "type": "string",
            "description": "First `HotelCode` attribute in document order; empty when absent."
          },
          "requestType": {
            "description": "The detected notification type.",
            "$ref": "#/components/schemas/FullRestrictionPmsAriRequestType"
          },
          "availStatusMessages": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FullRestrictionPmsAvailStatusMessageXml"
            },
            "description": "`AvailStatusMessage` entries when FullRestrictionPmsAriRequestType FullRestrictionPmsAriRequestXml.RequestType is FullRestrictionPmsAriRequestType.AvailNotif."
          },
          "rateAmountMessages": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FullRestrictionPmsRateAmountMessageXml"
            },
            "description": "`RateAmountMessage` entries when FullRestrictionPmsAriRequestType FullRestrictionPmsAriRequestXml.RequestType is FullRestrictionPmsAriRequestType.RateAmountNotif."
          }
        },
        "description": "Parsed representation of a legacy full-restriction PMS OTA SOAP ARI request, shared by the family of\nbehaviorally identical vendors (expertresa, hotelmu, ids, kai, newport, roomme, skyhotel,\nultron, urbaneroon, zuzu, guirez_pms)."
      },
      "FullRestrictionPmsAriResponseBodyXml": {
        "type": "object",
        "properties": {
          "availNotifResponse": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The `&lt;OTA_HotelAvailNotifRS&gt;` element.",
                "$ref": "#/components/schemas/FullRestrictionPmsAriNotifResponseXml"
              }
            ]
          },
          "rateAmountNotifResponse": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The `&lt;OTA_HotelRateAmountNotifRS&gt;` element.",
                "$ref": "#/components/schemas/FullRestrictionPmsAriNotifResponseXml"
              }
            ]
          },
          "error": {
            "type": [
              "null",
              "string"
            ],
            "description": "Unprefixed `&lt;Error&gt;` element directly under `soap:Body`."
          }
        },
        "description": "Body type for full-restriction PMS ARI responses."
      },
      "FullRestrictionPmsAriResponseXml": {
        "type": "object",
        "properties": {
          "body": {
            "description": "The `&lt;soap:Body&gt;` element.",
            "$ref": "#/components/schemas/FullRestrictionPmsAriResponseBodyXml"
          }
        },
        "description": "SOAP response envelope for OpenAPI documentation of full-restriction PMS ARI endpoints."
      },
      "FullRestrictionPmsAvailStatusMessageXml": {
        "type": "object",
        "properties": {
          "ratePlanCode": {
            "type": "string",
            "description": "First `RatePlanCode` attribute in the fragment; empty when absent."
          },
          "invTypeCode": {
            "type": "string",
            "description": "First `InvTypeCode` attribute in the fragment; empty when absent."
          },
          "startDate": {
            "type": [
              "null",
              "string"
            ],
            "description": "First `Start` attribute in the fragment; null when absent or unparseable.",
            "format": "date"
          },
          "endDate": {
            "type": [
              "null",
              "string"
            ],
            "description": "First `End` attribute in the fragment; null when absent or unparseable.",
            "format": "date"
          },
          "bookingLimit": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "description": "First `BookingLimit` attribute in the fragment; null when absent or unparseable.",
            "format": "int32"
          },
          "restrictionStatuses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FullRestrictionPmsRestrictionStatusXml"
            },
            "description": "Paired `RestrictionStatus` elements (`Restriction` + `Status` attributes).\nThis vendor family never parsed `SetMinLOS`, so no minimum-stay field exists here."
          }
        },
        "description": "One `AvailStatusMessage` fragment."
      },
      "FullRestrictionPmsRateAmountMessageXml": {
        "type": "object",
        "properties": {
          "ratePlanCode": {
            "type": "string",
            "description": "First `RatePlanCode` attribute in the fragment; empty when absent."
          },
          "invTypeCode": {
            "type": "string",
            "description": "First `InvTypeCode` attribute in the fragment; empty when absent."
          },
          "rates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FullRestrictionPmsRateXml"
            },
            "description": "`Rate` entries inside the fragment's `Rates` element."
          }
        },
        "description": "One `RateAmountMessage` fragment."
      },
      "FullRestrictionPmsRateXml": {
        "type": "object",
        "properties": {
          "startDate": {
            "type": [
              "null",
              "string"
            ],
            "description": "First `Start` attribute in the fragment; null when absent or unparseable.",
            "format": "date"
          },
          "endDate": {
            "type": [
              "null",
              "string"
            ],
            "description": "First `End` attribute in the fragment; null when absent or unparseable.",
            "format": "date"
          },
          "amountAfterTax": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "description": "First `AmountAfterTax` attribute in the fragment; null when absent or unparseable.",
            "format": "double"
          }
        },
        "description": "One `Rate` fragment. These vendors carry the date range on the rate itself."
      },
      "FullRestrictionPmsRestrictionStatusXml": {
        "type": "object",
        "properties": {
          "restriction": {
            "type": "string",
            "description": "`Restriction` attribute value, trimmed; empty when absent."
          },
          "hasRestriction": {
            "type": "boolean",
            "description": "Whether the `Restriction` attribute exists. The legacy loop treats a missing\nattribute (with a status) as stop-sell but ignores a present-but-empty one."
          },
          "status": {
            "type": "string",
            "description": "`Status` attribute value, trimmed; empty when absent."
          }
        },
        "description": "One `RestrictionStatus` element."
      },
      "GloviaArrivalTimeUpdateParamXml": {
        "type": "object",
        "properties": {
          "reservationNumber": {
            "type": "string",
            "description": "`&lt;rsv&gt;`"
          },
          "changeSequence": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;changeSerialNumber&gt;`",
            "format": "int32"
          },
          "processingResult": {
            "type": "boolean",
            "description": "`&lt;processingResult&gt;`"
          },
          "errorMessage": {
            "type": "string",
            "description": "`&lt;errorMessage&gt;`"
          }
        },
        "description": "Glovia `inputArrivalTimeUpdateParam` payload."
      },
      "GloviaArrivalTimeUpdateRequestXml": {
        "type": "object",
        "properties": {
          "attestationInformation": {
            "description": "`&lt;attestationInformation&gt;`",
            "$ref": "#/components/schemas/GloviaAttestationInformationXml"
          },
          "arrivalTimeUpdateParam": {
            "description": "`&lt;inputArrivalTimeUpdateParam&gt;`",
            "$ref": "#/components/schemas/GloviaArrivalTimeUpdateParamXml"
          }
        },
        "description": "Glovia `inputArrivalTimeUpdate` confirm-arrival-time request envelope."
      },
      "GloviaArrivalTimeUpdateResponseXml": {
        "type": "object",
        "properties": {
          "processingResult": {
            "type": "boolean",
            "description": "`&lt;processingResult&gt;`"
          },
          "errorMessage": {
            "type": "string",
            "description": "`&lt;errorMessage&gt;`"
          }
        },
        "description": "Glovia `returnArrivalTimeUpdate` confirm-arrival-time response envelope."
      },
      "GloviaArrivalTimeXml": {
        "type": "object",
        "properties": {
          "reservationNumber": {
            "type": "string",
            "description": "`&lt;rsv&gt;`"
          },
          "updateNumber": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;updateNumber&gt;`",
            "format": "int32"
          },
          "hotelCode": {
            "type": "string",
            "description": "`&lt;hcod&gt;`"
          },
          "arrivalTime": {
            "type": "string",
            "description": "`&lt;arrivalDate&gt;`",
            "format": "date-time"
          }
        },
        "description": "One `&lt;returnArrivalTime&gt;` entry."
      },
      "GloviaAttestationInformationXml": {
        "type": "object",
        "properties": {
          "loginId": {
            "type": "string",
            "description": "`&lt;loginID&gt;`"
          },
          "loginPassword": {
            "type": "string",
            "description": "`&lt;loginPassword&gt;`"
          }
        },
        "description": "Shared attestation element containing login credentials,\nused within all Glovia PMS XML request envelopes."
      },
      "GloviaCouponPayer": {
        "type": "integer",
        "description": "0: Unused, 1: CHJ, 2: Hotel."
      },
      "GloviaGetArrivalTimeParamXml": {
        "type": "object",
        "properties": {
          "execCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;execCount&gt;`",
            "format": "int32"
          },
          "hotelCode": {
            "type": "string",
            "description": "`&lt;hcod&gt;`"
          }
        },
        "description": "Glovia `inputArrivalTimeGetParam` payload."
      },
      "GloviaGetArrivalTimeRequestXml": {
        "type": "object",
        "properties": {
          "attestationInformation": {
            "description": "`&lt;attestationInformation&gt;`",
            "$ref": "#/components/schemas/GloviaAttestationInformationXml"
          },
          "getArrivalTimeParam": {
            "description": "`&lt;inputArrivalTimeGetParam&gt;`",
            "$ref": "#/components/schemas/GloviaGetArrivalTimeParamXml"
          }
        },
        "description": "Glovia `inputArrivalTimeGet` arrival-time pull request envelope."
      },
      "GloviaGetArrivalTimeResponseXml": {
        "type": "object",
        "properties": {
          "processingResult": {
            "type": "boolean",
            "description": "`&lt;processingResult&gt;`"
          },
          "errorMessage": {
            "type": "string",
            "description": "`&lt;errorMessage&gt;`"
          },
          "arrivalTimes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GloviaArrivalTimeXml"
            },
            "description": "`&lt;returnArrivaltimeGetList&gt;` / `&lt;returnArrivalTime&gt;`"
          }
        },
        "description": "Glovia `returnArrivalTimeGet` arrival-time pull response envelope."
      },
      "GloviaGetInventoryParamXml": {
        "type": "object",
        "properties": {
          "hotelCode": {
            "type": "string",
            "description": "`&lt;hcod&gt;`"
          },
          "roomTypeCode": {
            "type": "string",
            "description": "`&lt;roomTypeCode&gt;`"
          },
          "startDateString": {
            "type": "string",
            "description": "`&lt;startDate&gt;`"
          },
          "startDate": {
            "type": "string",
            "description": "Parsed string GloviaGetInventoryParamXml.StartDateString.",
            "format": "date"
          },
          "endDateString": {
            "type": "string",
            "description": "`&lt;endDate&gt;`"
          },
          "endDate": {
            "type": "string",
            "description": "Parsed string GloviaGetInventoryParamXml.EndDateString.",
            "format": "date"
          }
        },
        "description": "Glovia `inputRoomInventoryGetParam` payload."
      },
      "GloviaGetInventoryRequestXml": {
        "type": "object",
        "properties": {
          "attestationInformation": {
            "description": "`&lt;attestationInformation&gt;`",
            "$ref": "#/components/schemas/GloviaAttestationInformationXml"
          },
          "getInventoryParam": {
            "description": "`&lt;inputRoomInventoryGetParam&gt;`",
            "$ref": "#/components/schemas/GloviaGetInventoryParamXml"
          }
        },
        "description": "Glovia `inputRoomInventoryGet` inventory-get request envelope."
      },
      "GloviaGetInventoryResponseXml": {
        "type": "object",
        "properties": {
          "processingResult": {
            "type": "boolean",
            "description": "`&lt;processingResult&gt;`"
          },
          "errorMessage": {
            "type": "string",
            "description": "`&lt;errorMessage&gt;`"
          },
          "inventories": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GloviaInventoryXml"
            },
            "description": "`&lt;roomInventoryDetail&gt;`"
          }
        },
        "description": "Glovia `returnRoomInventoryGet` inventory-get response envelope."
      },
      "GloviaGetPlanParamXml": {
        "type": "object",
        "properties": {
          "hotelCode": {
            "type": "string",
            "description": "`&lt;hcod&gt;`"
          }
        },
        "description": "Glovia `inputPlanGetParam` payload."
      },
      "GloviaGetPlanRequestXml": {
        "type": "object",
        "properties": {
          "attestationInformation": {
            "description": "`&lt;attestationInformation&gt;`",
            "$ref": "#/components/schemas/GloviaAttestationInformationXml"
          },
          "getPlanParam": {
            "description": "`&lt;inputPlanGetParam&gt;`",
            "$ref": "#/components/schemas/GloviaGetPlanParamXml"
          }
        },
        "description": "Glovia `inputPlanGet` rate-plan request envelope."
      },
      "GloviaGetPlanResponseXml": {
        "type": "object",
        "properties": {
          "processingResult": {
            "type": "boolean",
            "description": "`&lt;processingResult&gt;`"
          },
          "errorMessage": {
            "type": "string",
            "description": "`&lt;errorMessage&gt;`"
          },
          "plans": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GloviaPlanXml"
            },
            "description": "`&lt;returnPlanGetList&gt;` / `&lt;returnPlan&gt;`"
          }
        },
        "description": "Glovia `returnPlanGet` rate-plan response envelope."
      },
      "GloviaGetReservationParamXml": {
        "type": "object",
        "properties": {
          "execCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;execCount&gt;`",
            "format": "int32"
          },
          "hotelCode": {
            "type": "string",
            "description": "`&lt;hcod&gt;`"
          }
        },
        "description": "Glovia `inputReservationGetParam` payload."
      },
      "GloviaGetReservationRequestXml": {
        "type": "object",
        "properties": {
          "attestationInformation": {
            "description": "`&lt;attestationInformation&gt;`",
            "$ref": "#/components/schemas/GloviaAttestationInformationXml"
          },
          "getReservationParam": {
            "description": "`&lt;inputReservationGetParam&gt;`",
            "$ref": "#/components/schemas/GloviaGetReservationParamXml"
          }
        },
        "description": "Glovia `inputReservationGet` reservation pull request envelope."
      },
      "GloviaGetReservationResponseXml": {
        "type": "object",
        "properties": {
          "processingResult": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;processingResult&gt;`",
            "format": "int32"
          },
          "errorMessage": {
            "type": "string",
            "description": "`&lt;errorMessage&gt;`"
          },
          "reservations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GloviaReservationXml"
            },
            "description": "`&lt;reservationGetList&gt;` / `&lt;reservation&gt;`"
          }
        },
        "description": "Glovia `returnReservationGet` reservation pull response envelope."
      },
      "GloviaInventoryXml": {
        "type": "object",
        "properties": {
          "hotelCode": {
            "type": "string",
            "description": "`&lt;hcod&gt;`"
          },
          "roomType": {
            "type": "string",
            "description": "`&lt;roomType&gt;`"
          },
          "date": {
            "type": "string",
            "description": "`&lt;date&gt;`",
            "format": "date"
          },
          "reservedRooms": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;reservedRooms&gt;`",
            "format": "int32"
          },
          "remainingRooms": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;remainingRooms&gt;`",
            "format": "int32"
          }
        },
        "description": "One `&lt;roomInventoryDetail&gt;` entry."
      },
      "GloviaPlanXml": {
        "type": "object",
        "properties": {
          "hotelCode": {
            "type": "string",
            "description": "`&lt;hcod&gt;`"
          },
          "planCode": {
            "type": "string",
            "description": "`&lt;campaignCode&gt;`"
          },
          "planName": {
            "type": "string",
            "description": "`&lt;campaignName&gt;`"
          },
          "startDate": {
            "type": "string",
            "description": "`&lt;settingStartDay&gt;`",
            "format": "date"
          },
          "endDate": {
            "type": "string",
            "description": "`&lt;settingEndDay&gt;`",
            "format": "date"
          },
          "salesCondition": {
            "description": "`&lt;saleStatus&gt;`",
            "$ref": "#/components/schemas/GloviaSalesCondition"
          }
        },
        "description": "One `&lt;returnPlan&gt;` entry."
      },
      "GloviaPriceUpdateParamXml": {
        "type": "object",
        "properties": {
          "hotelCode": {
            "type": "string",
            "description": "`&lt;hcod&gt;`"
          },
          "planCode": {
            "type": "string",
            "description": "`&lt;planCode&gt;`"
          },
          "roomTypeCode": {
            "type": "string",
            "description": "`&lt;roomTypeCode&gt;`"
          },
          "startDate": {
            "type": "string",
            "description": "`&lt;startDate&gt;`",
            "format": "date"
          },
          "endDate": {
            "type": "string",
            "description": "`&lt;endDate&gt;`",
            "format": "date"
          },
          "price1": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "description": "`&lt;price1&gt;`",
            "format": "double"
          },
          "price2": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "description": "`&lt;price2&gt;`",
            "format": "double"
          },
          "price3": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "description": "`&lt;price3&gt;`",
            "format": "double"
          },
          "price4": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "description": "`&lt;price4&gt;`",
            "format": "double"
          },
          "price5": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "description": "`&lt;price5&gt;`",
            "format": "double"
          },
          "price6": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "description": "`&lt;price6&gt;`",
            "format": "double"
          },
          "price7": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "description": "`&lt;price7&gt;`",
            "format": "double"
          },
          "price8": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "description": "`&lt;price8&gt;`",
            "format": "double"
          },
          "price9": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "description": "`&lt;price9&gt;`",
            "format": "double"
          },
          "price10": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "description": "`&lt;price10&gt;`",
            "format": "double"
          }
        },
        "description": "Glovia `inputPriceUpdateParam` payload."
      },
      "GloviaPriceUpdateRequestXml": {
        "type": "object",
        "properties": {
          "attestationInformation": {
            "description": "`&lt;attestationInformation&gt;`",
            "$ref": "#/components/schemas/GloviaAttestationInformationXml"
          },
          "priceUpdateParam": {
            "description": "`&lt;inputPriceUpdateParam&gt;`",
            "$ref": "#/components/schemas/GloviaPriceUpdateParamXml"
          }
        },
        "description": "Glovia `inputPriceUpdate` price-update request envelope."
      },
      "GloviaPriceUpdateResponseXml": {
        "type": "object",
        "properties": {
          "hotelCode": {
            "type": "string",
            "description": "`&lt;hcod&gt;`"
          },
          "campaignCode": {
            "type": "string",
            "description": "`&lt;campaignCode&gt;`"
          },
          "roomType": {
            "type": "string",
            "description": "`&lt;roomType&gt;`"
          },
          "startDate": {
            "type": "string",
            "description": "`&lt;settingStartDay&gt;`",
            "format": "date"
          },
          "endDate": {
            "type": "string",
            "description": "`&lt;settingEndDay&gt;`",
            "format": "date"
          },
          "processingResult": {
            "type": "boolean",
            "description": "`&lt;processingResult&gt;`"
          },
          "errorMessage": {
            "type": "string",
            "description": "`&lt;errorMessage&gt;`"
          }
        },
        "description": "Glovia `returnPriceUpdate` price-update response envelope."
      },
      "GloviaReservationRoomXml": {
        "type": "object",
        "properties": {
          "stayDate": {
            "type": "string",
            "description": "`&lt;accommodationDay&gt;`",
            "format": "date"
          },
          "guestCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;occupancy&gt;`",
            "format": "int32"
          },
          "roomTypeCode": {
            "type": "string",
            "description": "`&lt;roomTypeCode&gt;`"
          },
          "taxCategory": {
            "description": "`&lt;taxCategory&gt;`",
            "$ref": "#/components/schemas/GloviaTaxCategory"
          },
          "mealCode": {
            "type": "string",
            "description": "`&lt;mealCode&gt;`"
          },
          "roomSequence": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;roomSerialNumber&gt;`",
            "format": "int32"
          },
          "maleCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;maleOccupancy&gt;`",
            "format": "int32"
          },
          "femaleCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;femaleOccupancy&gt;`",
            "format": "int32"
          },
          "childCountA": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;childAOccupancy&gt;`",
            "format": "int32"
          },
          "childCountB": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;childBOccupancy&gt;`",
            "format": "int32"
          },
          "childCountC": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;childCOccupancy&gt;`",
            "format": "int32"
          },
          "childCountD": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;childDOccupancy&gt;`",
            "format": "int32"
          },
          "childCountE": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;childEOccupancy&gt;`",
            "format": "int32"
          },
          "childCountF": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;childFOccupancy&gt;`",
            "format": "int32"
          },
          "childCountG": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;childGOccupancy&gt;`",
            "format": "int32"
          },
          "childCountH": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;childHOccupancy&gt;`",
            "format": "int32"
          },
          "childCountI": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;childIOccupancy&gt;`",
            "format": "int32"
          },
          "childCountJ": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;childJOccupancy&gt;`",
            "format": "int32"
          },
          "adultPrice": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;adultPrice&gt;`",
            "format": "int32"
          },
          "childPriceA": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;childAPrice&gt;`",
            "format": "int32"
          },
          "childPriceB": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;childBPrice&gt;`",
            "format": "int32"
          },
          "childPriceC": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;childCPrice&gt;`",
            "format": "int32"
          },
          "childPriceD": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;childDPrice&gt;`",
            "format": "int32"
          },
          "childPriceE": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;childEPrice&gt;`",
            "format": "int32"
          },
          "childPriceF": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;childFPrice&gt;`",
            "format": "int32"
          },
          "childPriceG": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;childGPrice&gt;`",
            "format": "int32"
          },
          "childPriceH": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;childHPrice&gt;`",
            "format": "int32"
          },
          "childPriceI": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;childIPrice&gt;`",
            "format": "int32"
          },
          "childPriceJ": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;childJPrice&gt;`",
            "format": "int32"
          },
          "totalRoomPrice": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "description": "`&lt;allPrice&gt;`",
            "format": "double"
          },
          "representativeName": {
            "type": "string",
            "description": "`&lt;representativeNameKanji&gt;`"
          },
          "representativeNameKana": {
            "type": "string",
            "description": "`&lt;representativeNameKana&gt;`"
          },
          "representativePhone": {
            "type": "string",
            "description": "`&lt;tel&gt;`"
          },
          "representativeZipTop": {
            "type": "string",
            "description": "`&lt;postalCodeFirst&gt;`"
          },
          "representativeZipBottom": {
            "type": "string",
            "description": "`&lt;postalCodeSecond&gt;`"
          },
          "representativeAddress1": {
            "type": "string",
            "description": "`&lt;addressFirst&gt;`"
          },
          "representativeAddress2": {
            "type": "string",
            "description": "`&lt;addressSecond&gt;`"
          },
          "representativeAddress3": {
            "type": "string",
            "description": "`&lt;addressThird&gt;`"
          }
        },
        "description": "One `&lt;roomDetail&gt;` entry under `&lt;reserveDetails&gt;`."
      },
      "GloviaReservationStatus": {
        "type": "integer",
        "description": "1: New, 2: Modified, 3: Cancelled."
      },
      "GloviaReservationUpdateParamXml": {
        "type": "object",
        "properties": {
          "reservationNumber": {
            "type": "string",
            "description": "`&lt;rsv&gt;`"
          },
          "changeSequence": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;changeSerialNumber&gt;`",
            "format": "int32"
          },
          "processingResult": {
            "type": "boolean",
            "description": "`&lt;processingResult&gt;`"
          },
          "errorMessage": {
            "type": "string",
            "description": "`&lt;errorMessage&gt;`"
          }
        },
        "description": "Glovia `inputReservationUpdateParam` payload."
      },
      "GloviaReservationUpdateRequestXml": {
        "type": "object",
        "properties": {
          "attestationInformation": {
            "description": "`&lt;attestationInformation&gt;`",
            "$ref": "#/components/schemas/GloviaAttestationInformationXml"
          },
          "reservationUpdateParam": {
            "description": "`&lt;inputReservationUpdateParam&gt;`",
            "$ref": "#/components/schemas/GloviaReservationUpdateParamXml"
          }
        },
        "description": "Glovia `inputReservationUpdate` confirm-reservation request envelope."
      },
      "GloviaReservationUpdateResponseXml": {
        "type": "object",
        "properties": {
          "processingResult": {
            "type": "boolean",
            "description": "`&lt;processingResult&gt;`"
          },
          "errorMessage": {
            "type": "string",
            "description": "`&lt;errorMessage&gt;`"
          }
        },
        "description": "Glovia `returnReservationUpdate` confirm-reservation response envelope."
      },
      "GloviaReservationXml": {
        "type": "object",
        "properties": {
          "reservationNumber": {
            "type": "string",
            "description": "`&lt;rsv&gt;`"
          },
          "changeSequence": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;seq&gt;`",
            "format": "int32"
          },
          "updatedDate": {
            "type": "string",
            "description": "`&lt;updatedDate&gt;`",
            "format": "date-time"
          },
          "lastUpdatedDate": {
            "type": "string",
            "description": "`&lt;lastUpdatedDate&gt;`",
            "format": "date-time"
          },
          "arrivalDay": {
            "type": "string",
            "description": "`&lt;arrivalDay&gt;`",
            "format": "date"
          },
          "departureDay": {
            "type": "string",
            "description": "`&lt;departureDay&gt;`",
            "format": "date"
          },
          "arrivalDate": {
            "type": "string",
            "description": "`&lt;arrivalDate&gt;`",
            "format": "date-time"
          },
          "departureDate": {
            "type": "string",
            "description": "`&lt;departureDate&gt;`",
            "format": "date-time"
          },
          "siteCustomerId": {
            "type": "string",
            "description": "`&lt;customerID&gt;`"
          },
          "guestEmail": {
            "type": "string",
            "description": "`&lt;customerMail&gt;`"
          },
          "reservationStatus": {
            "description": "`&lt;sts&gt;`",
            "$ref": "#/components/schemas/GloviaReservationStatus"
          },
          "hotelCode": {
            "type": "string",
            "description": "`&lt;hcod&gt;`"
          },
          "nights": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;nights&gt;`",
            "format": "int32"
          },
          "memo1": {
            "type": "string",
            "description": "`&lt;memo1&gt;` … `&lt;memo10&gt;`"
          },
          "memo2": {
            "type": "string",
            "description": "`&lt;memo2&gt;`"
          },
          "memo3": {
            "type": "string",
            "description": "`&lt;memo3&gt;`"
          },
          "memo4": {
            "type": "string",
            "description": "`&lt;memo4&gt;`"
          },
          "memo5": {
            "type": "string",
            "description": "`&lt;memo5&gt;`"
          },
          "memo6": {
            "type": "string",
            "description": "`&lt;memo6&gt;`"
          },
          "memo7": {
            "type": "string",
            "description": "`&lt;memo7&gt;`"
          },
          "memo8": {
            "type": "string",
            "description": "`&lt;memo8&gt;`"
          },
          "memo9": {
            "type": "string",
            "description": "`&lt;memo9&gt;`"
          },
          "memo10": {
            "type": "string",
            "description": "`&lt;memo10&gt;`"
          },
          "guestName": {
            "type": "string",
            "description": "`&lt;nameKanji&gt;`"
          },
          "guestNameKana": {
            "type": "string",
            "description": "`&lt;nameKana&gt;`"
          },
          "guestCompanyNameKana": {
            "type": "string",
            "description": "`&lt;companyKana&gt;`"
          },
          "paymentMethod": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;paymentMethod&gt;` — 0: cash, others: card/credit.",
            "format": "int32"
          },
          "donationAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;donations&gt;`",
            "format": "int32"
          },
          "paymentAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;price&gt;`",
            "format": "int32"
          },
          "agentCode": {
            "type": "string",
            "description": "`&lt;agentCode&gt;`"
          },
          "agentName": {
            "type": "string",
            "description": "`&lt;agentName&gt;`"
          },
          "planCode": {
            "type": "string",
            "description": "`&lt;planCode&gt;`"
          },
          "planName": {
            "type": "string",
            "description": "`&lt;planName&gt;`"
          },
          "mobilePhoneFlag": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;flagSmartphone&gt;`",
            "format": "int32"
          },
          "couponName": {
            "type": "string",
            "description": "`&lt;couponName&gt;`"
          },
          "couponPayer": {
            "description": "`&lt;couponDefrayer&gt;`",
            "$ref": "#/components/schemas/GloviaCouponPayer"
          },
          "couponAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "description": "`&lt;couponDiscount&gt;`",
            "format": "double"
          },
          "couponConditionMemo": {
            "type": "string",
            "description": "`&lt;couponConditionsMemo&gt;`"
          },
          "rewardCouponName": {
            "type": "string",
            "description": "`&lt;rewardCouponName&gt;`"
          },
          "campaignName": {
            "type": "string",
            "description": "`&lt;campaignName&gt;`"
          },
          "campaignAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;campaignDiscount&gt;`",
            "format": "int32"
          },
          "campaignConditionMemo": {
            "type": "string",
            "description": "`&lt;campaignConditionsMemo&gt;`"
          },
          "newsletterDiscountAmount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;mailNewsletterMemberDiscount&gt;`",
            "format": "int32"
          },
          "pointsUsed": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "description": "`&lt;point&gt;`",
            "format": "double"
          },
          "rooms": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GloviaReservationRoomXml"
            },
            "description": "`&lt;reserveDetails&gt;` / `&lt;roomDetail&gt;`"
          }
        },
        "description": "One `&lt;reservation&gt;` entry."
      },
      "GloviaRoomInventoryUpdateParamXml": {
        "type": "object",
        "properties": {
          "hotelCode": {
            "type": "string",
            "description": "`&lt;hcod&gt;`"
          },
          "roomTypeCode": {
            "type": "string",
            "description": "`&lt;roomTypeCode&gt;`"
          },
          "targetDateString": {
            "type": "string",
            "description": "`&lt;targetDate&gt;`"
          },
          "targetDate": {
            "type": "string",
            "description": "Parsed string GloviaRoomInventoryUpdateParamXml.TargetDateString.",
            "format": "date"
          },
          "roomCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;roomCount&gt;`",
            "format": "int32"
          }
        },
        "description": "Glovia `inputRoomInventoryUpdateParam` payload."
      },
      "GloviaRoomInventoryUpdateRequestXml": {
        "type": "object",
        "properties": {
          "attestationInformation": {
            "description": "`&lt;attestationInformation&gt;`",
            "$ref": "#/components/schemas/GloviaAttestationInformationXml"
          },
          "roomInventoryUpdateParam": {
            "description": "`&lt;inputRoomInventoryUpdateParam&gt;`",
            "$ref": "#/components/schemas/GloviaRoomInventoryUpdateParamXml"
          }
        },
        "description": "Glovia `inputRoomInventoryUpdate` inventory-update request envelope."
      },
      "GloviaRoomInventoryUpdateResponseXml": {
        "type": "object",
        "properties": {
          "hotelCode": {
            "type": "string",
            "description": "`&lt;hcod&gt;`"
          },
          "roomTypeCode": {
            "type": "string",
            "description": "`&lt;roomTypeCode&gt;`"
          },
          "processingResult": {
            "type": "boolean",
            "description": "`&lt;processingResult&gt;`"
          },
          "errorMessage": {
            "type": "string",
            "description": "`&lt;errorMessage&gt;`"
          }
        },
        "description": "Glovia `returnRoomInventoryUpdate` inventory-update response envelope."
      },
      "GloviaSalesCondition": {
        "type": "integer",
        "description": "0: Selling (Open), 1: Stop Sales (Closed)."
      },
      "GloviaSellStopUpdateParamXml": {
        "type": "object",
        "properties": {
          "hotelCode": {
            "type": "string",
            "description": "`&lt;hcod&gt;`"
          },
          "planCode": {
            "type": "string",
            "description": "`&lt;planCode&gt;`"
          },
          "roomTypeCode": {
            "type": "string",
            "description": "`&lt;roomTypeCode&gt;`"
          },
          "startDate": {
            "type": "string",
            "description": "`&lt;startDate&gt;`",
            "format": "date"
          },
          "endDate": {
            "type": "string",
            "description": "`&lt;endDate&gt;`",
            "format": "date"
          },
          "salesCondition": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`&lt;salesCondition&gt;`",
            "format": "int32"
          }
        },
        "description": "Glovia `inputSellStopUpdateParam` payload."
      },
      "GloviaSellStopUpdateRequestXml": {
        "type": "object",
        "properties": {
          "attestationInformation": {
            "description": "`&lt;attestationInformation&gt;`",
            "$ref": "#/components/schemas/GloviaAttestationInformationXml"
          },
          "sellStopUpdateParam": {
            "description": "`&lt;inputSellStopUpdateParam&gt;`",
            "$ref": "#/components/schemas/GloviaSellStopUpdateParamXml"
          }
        },
        "description": "Glovia `inputSellStopUpdate` stop-sales request envelope."
      },
      "GloviaSellStopUpdateResponseXml": {
        "type": "object",
        "properties": {
          "hotelCode": {
            "type": "string",
            "description": "`&lt;hcod&gt;`"
          },
          "campaignCode": {
            "type": "string",
            "description": "`&lt;campaignCode&gt;`"
          },
          "roomType": {
            "type": "string",
            "description": "`&lt;roomType&gt;`"
          },
          "startDate": {
            "type": "string",
            "description": "`&lt;settingStartDay&gt;`",
            "format": "date"
          },
          "endDate": {
            "type": "string",
            "description": "`&lt;settingEndDay&gt;`",
            "format": "date"
          },
          "processingResult": {
            "type": "boolean",
            "description": "`&lt;processingResult&gt;`"
          },
          "errorMessage": {
            "type": "string",
            "description": "`&lt;errorMessage&gt;`"
          }
        },
        "description": "Glovia `returnSellStopUpdate` stop-sales response envelope."
      },
      "GloviaTaxCategory": {
        "type": "integer",
        "description": "0: No Tax, 1: Excluding Tax, 2: Including Tax."
      },
      "HashApiKeyRequest": {
        "type": "object",
        "properties": {
          "apiKey": {
            "type": "string"
          }
        }
      },
      "HelloWorldFifoResponse": {
        "required": [
          "messageId"
        ],
        "type": "object",
        "properties": {
          "messageId": {
            "type": "string"
          }
        }
      },
      "HotelFeatureFlags": {
        "required": [
          "saveAriRequests",
          "createdAt",
          "updatedAt"
        ],
        "type": "object",
        "properties": {
          "saveAriRequests": {
            "type": "boolean"
          },
          "createdAt": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "updatedAt": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          }
        }
      },
      "HotelIntegration": {
        "type": "object",
        "properties": {
          "integrationName": {
            "type": [
              "null",
              "string"
            ]
          },
          "hotelCode": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "HotelOtaFeatureFlags": {
        "required": [
          "pushAriToOta",
          "createdAt",
          "updatedAt"
        ],
        "type": "object",
        "properties": {
          "pushAriToOta": {
            "type": "boolean"
          },
          "createdAt": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "updatedAt": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          }
        }
      },
      "HttpValidationProblemDetails": {
        "type": "object",
        "properties": {
          "type": {
            "type": [
              "null",
              "string"
            ]
          },
          "title": {
            "type": [
              "null",
              "string"
            ]
          },
          "status": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "detail": {
            "type": [
              "null",
              "string"
            ]
          },
          "instance": {
            "type": [
              "null",
              "string"
            ]
          },
          "errors": {
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        }
      },
      "IntegrationCatalogItem": {
        "required": [
          "otaId",
          "otaName",
          "name"
        ],
        "type": "object",
        "properties": {
          "otaId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "OTA identifier.",
            "format": "int32"
          },
          "otaName": {
            "type": "string",
            "description": "Canonical OTA name (`external_sites.ota_name`)."
          },
          "name": {
            "type": "string",
            "description": "Display name from `ota_display_name`, falling back to `ota_name`."
          }
        },
        "description": "One OTA/PMS channel from the `external_sites` catalog."
      },
      "IntegrationsListResponse": {
        "required": [
          "items"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/IntegrationCatalogItem"
            }
          }
        }
      },
      "ListDashboardLoginEmailsResponse": {
        "required": [
          "emails"
        ],
        "type": "object",
        "properties": {
          "emails": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DashboardLoginEmail"
            }
          }
        }
      },
      "ListYearlyMonthlyDealsResponse": {
        "required": [
          "propertyId",
          "deals",
          "cursor"
        ],
        "type": "object",
        "properties": {
          "propertyId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "deals": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/YearlyMonthlyDealItemResponse"
            }
          },
          "cursor": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "format": "int32"
          }
        }
      },
      "PropertiesByOtaResponse": {
        "required": [
          "items"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PropertyListItem"
            }
          }
        }
      },
      "PropertiesPage": {
        "required": [
          "items",
          "cursor"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PropertyListItem"
            },
            "description": "Rows in this page."
          },
          "cursor": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "description": "Set int? PropertiesQuery.Cursor to this value for the next request, or `null` when there is no further page.",
            "format": "int32"
          }
        },
        "description": "One page of properties."
      },
      "PropertyDetailsResponse": {
        "required": [
          "propertyId",
          "name",
          "status",
          "integrations"
        ],
        "type": "object",
        "properties": {
          "propertyId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "name": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "integrations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PropertyIntegrationItem"
            }
          }
        }
      },
      "PropertyIntegrationItem": {
        "required": [
          "otaId",
          "name"
        ],
        "type": "object",
        "properties": {
          "otaId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "OTA identifier from `external_sites.ota_id`.",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "description": "Display name from `ota_display_name`, falling back to `ota_name`."
          }
        },
        "description": "One OTA/PMS integration connected to a property."
      },
      "PropertyListItem": {
        "required": [
          "propertyId",
          "name",
          "status"
        ],
        "type": "object",
        "properties": {
          "propertyId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "Property identifier.",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "description": "Human-readable property name."
          },
          "status": {
            "type": "string",
            "description": "`property_details.status` (`active` or `inactive`)."
          }
        },
        "description": "One property row with id and name."
      },
      "PropertyRatePlanItem": {
        "required": [
          "ratePlanId",
          "name",
          "parentRatePlanId",
          "status"
        ],
        "type": "object",
        "properties": {
          "ratePlanId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`Rate_Plans.id`.",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "description": "`Rate_Plans.Name`."
          },
          "parentRatePlanId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`Rate_Plans.link_rateplanid`; `0` when not derived from another plan.",
            "format": "int32"
          },
          "startDate": {
            "type": [
              "null",
              "string"
            ],
            "description": "`Rate_Plans.start`; `null` when unset or legacy zero date.",
            "format": "date"
          },
          "endDate": {
            "type": [
              "null",
              "string"
            ],
            "description": "`Rate_Plans.end`; `null` when unset or legacy zero date.",
            "format": "date"
          },
          "status": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`Rate_Plans.status`: `0` = open, `1` = stop sales (Glovia).",
            "format": "int32"
          }
        },
        "description": "One rate plan row from `Rate_Plans`."
      },
      "PropertyRoomDetails": {
        "required": [
          "roomId",
          "propertyId",
          "name",
          "ratePlans"
        ],
        "type": "object",
        "properties": {
          "roomId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`Rooms.id`.",
            "format": "int32"
          },
          "propertyId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`Rooms.Property_Id`.",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "description": "`Rooms.Name`."
          },
          "cutOffNights": {
            "type": [
              "null",
              "string"
            ],
            "description": "`Rooms.cut_of_nights` — room-level cut-off nights default for OTA/ARI delivery when a deal does not override it."
          },
          "ratePlans": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PropertyRatePlanItem"
            },
            "description": "Active rate plans on this room."
          }
        },
        "description": "Room metadata and rate plans for one property room."
      },
      "PropertyRoomItem": {
        "required": [
          "roomId",
          "name"
        ],
        "type": "object",
        "properties": {
          "roomId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "`Rooms.id`.",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "description": "`Rooms.Name`."
          }
        },
        "description": "One room type row from `Rooms`."
      },
      "PropertyRoomsResponse": {
        "required": [
          "rooms"
        ],
        "type": "object",
        "properties": {
          "rooms": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PropertyRoomItem"
            }
          }
        }
      },
      "PropertyUnmappedAriItem": {
        "required": [
          "externalRoomTypeId",
          "externalRatePlanId",
          "lastSentAt",
          "count"
        ],
        "type": "object",
        "properties": {
          "externalRoomTypeId": {
            "type": "string"
          },
          "externalRatePlanId": {
            "type": "string"
          },
          "lastSentAt": {
            "type": "string"
          },
          "count": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int64"
          }
        }
      },
      "PropertyUnmappedAriResponse": {
        "required": [
          "items"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PropertyUnmappedAriItem"
            }
          }
        }
      },
      "RatePlanChangelog": {
        "required": [
          "propertyId",
          "roomId",
          "ratePlanId",
          "stayDate",
          "txId",
          "ratePlanName",
          "actorType",
          "actorId",
          "operation"
        ],
        "type": "object",
        "properties": {
          "propertyId": {
            "type": "string"
          },
          "roomId": {
            "type": "string"
          },
          "ratePlanId": {
            "type": "string"
          },
          "stayDate": {
            "type": "string",
            "format": "date"
          },
          "txId": {
            "type": "string"
          },
          "ratePlanName": {
            "type": "string"
          },
          "actorType": {
            "type": "string"
          },
          "actorId": {
            "type": "string"
          },
          "operation": {
            "type": "string"
          },
          "rates": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "stopSell": {
            "type": [
              "null",
              "boolean"
            ]
          },
          "minimumNights": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "closedToArrival": {
            "type": [
              "null",
              "boolean"
            ]
          },
          "closedToDeparture": {
            "type": [
              "null",
              "boolean"
            ]
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "RatePlanChangelogsPage": {
        "required": [
          "items",
          "cursor"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RatePlanChangelog"
            }
          },
          "cursor": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "RoomInventoryChangelog": {
        "required": [
          "propertyId",
          "roomId",
          "stayDate",
          "txId",
          "roomName",
          "actorType",
          "actorId",
          "operation",
          "availability",
          "netAllotment"
        ],
        "type": "object",
        "properties": {
          "propertyId": {
            "type": "string"
          },
          "roomId": {
            "type": "string"
          },
          "stayDate": {
            "type": "string",
            "format": "date"
          },
          "txId": {
            "type": "string"
          },
          "roomName": {
            "type": "string"
          },
          "actorType": {
            "type": "string"
          },
          "actorId": {
            "type": "string"
          },
          "operation": {
            "type": "string"
          },
          "availability": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "netAllotment": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "RoomInventoryChangelogsPage": {
        "required": [
          "items",
          "cursor"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RoomInventoryChangelog"
            }
          },
          "cursor": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "SetHotelFeatureFlagRequest": {
        "type": "object",
        "properties": {
          "featureFlag": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          }
        }
      },
      "SetHotelFeatureFlagResponse": {
        "required": [
          "propertyId",
          "featureFlag",
          "enabled"
        ],
        "type": "object",
        "properties": {
          "propertyId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "featureFlag": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          }
        }
      },
      "SetHotelOtaFeatureFlagRequest": {
        "type": "object",
        "properties": {
          "featureFlag": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          }
        }
      },
      "SetHotelOtaFeatureFlagResponse": {
        "required": [
          "propertyId",
          "otaId",
          "featureFlag",
          "enabled"
        ],
        "type": "object",
        "properties": {
          "propertyId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "otaId": {
            "type": "string"
          },
          "featureFlag": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          }
        }
      },
      "SiteMinderAriResponseXml": {
        "type": "object",
        "properties": {
          "header": {
            "description": "The `&lt;soap:Header&gt;` element containing WS-Security credentials.\nDefaults to an empty header with empty credentials when the element is absent.",
            "$ref": "#/components/schemas/SiteMinderSoapHeaderXml"
          }
        },
        "description": "Abstract base for all SiteMinder ARI response envelope types."
      },
      "SiteMinderCredentialsXml": {
        "type": "object",
        "properties": {
          "username": {
            "description": "The `&lt;wsse:Username&gt;` value identifying the SiteMinder caller.",
            "$ref": "#/components/schemas/SiteMinderUsernameXml"
          },
          "password": {
            "description": "The `&lt;wsse:Password&gt;` value.",
            "$ref": "#/components/schemas/SiteMinderPasswordXml"
          }
        },
        "description": "Represents the `&lt;wsse:UsernameToken&gt;` element containing\na plaintext username and password for authentication."
      },
      "SiteMinderPasswordXml": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "description": "WS-Security password type URI for plaintext credentials."
          },
          "value": {
            "type": "string",
            "description": "The password text content."
          }
        },
        "description": "The `&lt;wsse:Password&gt;` value with its WS-Security type attribute."
      },
      "SiteMinderSoapEnvelopeXml": {
        "type": "object",
        "properties": {
          "header": {
            "description": "The `&lt;soap:Header&gt;` element containing WS-Security credentials.\nDefaults to an empty header with empty credentials when the element is absent.",
            "$ref": "#/components/schemas/SiteMinderSoapHeaderXml"
          }
        },
        "description": "Abstract base for all SiteMinder SOAP Envelope request and response types.\nThe `&lt;soap:Header&gt;` (WS-Security) is shared across all endpoints;\neach concrete subclass adds its own `&lt;soap:Body&gt;` property with an\nendpoint-specific body type."
      },
      "SiteMinderSoapHeaderXml": {
        "type": "object",
        "properties": {
          "security": {
            "description": "The `&lt;wsse:Security&gt;` element with `soap:mustUnderstand=\"1\"`.",
            "$ref": "#/components/schemas/SiteMinderWsseSecurityXml"
          }
        },
        "description": "Represents the `&lt;soap:Header&gt;` element.\nContains the WS-Security `&lt;wsse:Security&gt;` block used for\npayload-based authentication."
      },
      "SiteMinderUsernameXml": {
        "type": "object",
        "properties": {
          "value": {
            "type": "string",
            "description": "The username text content."
          }
        },
        "description": "The `&lt;wsse:Username&gt;` value identifying the SiteMinder caller."
      },
      "SiteMinderWsseSecurityXml": {
        "type": "object",
        "properties": {
          "mustUnderstand": {
            "type": "string",
            "description": "The `soap:mustUnderstand` attribute value on `wsse:Security`."
          },
          "usernameToken": {
            "description": "The `&lt;wsse:UsernameToken&gt;` element carrying the caller's credentials.",
            "$ref": "#/components/schemas/SiteMinderCredentialsXml"
          }
        },
        "description": "Represents the `&lt;wsse:Security&gt;` element defined by the\nOASIS WS-Security 1.0 specification."
      },
      "SlackAlertConnectivityProbeResult": {
        "required": [
          "messageType",
          "sent"
        ],
        "type": "object",
        "properties": {
          "messageType": {
            "type": "string"
          },
          "sent": {
            "type": "boolean"
          }
        }
      },
      "SqsMessageLedgerEntry": {
        "required": [
          "status",
          "firstSeenAt",
          "lastAttemptAt",
          "attempts",
          "messageDeduplicationId",
          "messageGroupId"
        ],
        "type": "object",
        "properties": {
          "status": {
            "type": "string"
          },
          "firstSeenAt": {
            "type": "string",
            "format": "date-time"
          },
          "lastAttemptAt": {
            "type": "string",
            "format": "date-time"
          },
          "attempts": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int64"
          },
          "messageDeduplicationId": {
            "type": "string"
          },
          "messageGroupId": {
            "type": "string"
          },
          "messageBody": {
            "type": [
              "null",
              "string"
            ]
          },
          "stackTrace": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "SqsMessageLedgerPage": {
        "required": [
          "items",
          "cursor"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SqsMessageLedgerEntry"
            }
          },
          "cursor": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "TriplaLinkLogRequest": {
        "type": "object",
        "properties": {
          "propertyId": {
            "type": "string"
          },
          "txId": {
            "type": "string"
          }
        }
      },
      "TxOtaDelivery": {
        "required": [
          "otaId",
          "status"
        ],
        "type": "object",
        "properties": {
          "otaId": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "finishedAt": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          }
        }
      },
      "TxRow": {
        "required": [
          "propertyId",
          "txId",
          "traceId",
          "actorType",
          "actorId",
          "operation",
          "createdAt"
        ],
        "type": "object",
        "properties": {
          "propertyId": {
            "type": "string"
          },
          "txId": {
            "type": "string"
          },
          "traceId": {
            "type": "string"
          },
          "actorType": {
            "type": "string"
          },
          "actorId": {
            "type": "string"
          },
          "operation": {
            "type": "string"
          },
          "echoToken": {
            "type": [
              "null",
              "string"
            ]
          },
          "isOkResponse": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "isMismatchedResponse": {
            "type": [
              "null",
              "boolean"
            ]
          },
          "savedAt": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "otaDelivery": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "$ref": "#/components/schemas/TxOtaDelivery"
            }
          }
        }
      },
      "TxRowsPage": {
        "required": [
          "items",
          "cursor"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TxRow"
            }
          },
          "cursor": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "UpsertYearlyMonthlyDealItemRequest": {
        "required": [
          "roomId",
          "ratePlanId",
          "date"
        ],
        "type": "object",
        "properties": {
          "roomId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "ratePlanId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "date": {
            "type": "string",
            "format": "date"
          },
          "netAllotment": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "availability": {
            "type": [
              "null",
              "string"
            ]
          },
          "rates": {
            "type": [
              "null",
              "string"
            ]
          },
          "stopSell": {
            "type": [
              "null",
              "string"
            ]
          },
          "minNights": {
            "type": [
              "null",
              "string"
            ]
          },
          "closedToArrival": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "closedToDeparture": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "format": "int32"
          }
        }
      },
      "UpsertYearlyMonthlyDealsResponse": {
        "required": [
          "propertyId",
          "count"
        ],
        "type": "object",
        "properties": {
          "propertyId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "count": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          }
        }
      },
      "VerifyApiKeyRequest": {
        "type": "object",
        "properties": {
          "apiKey": {
            "type": "string"
          },
          "hash": {
            "type": "string"
          }
        }
      },
      "VersionResponse": {
        "required": [
          "environment",
          "version",
          "imageID"
        ],
        "type": "object",
        "properties": {
          "environment": {
            "type": "string"
          },
          "version": {
            "type": [
              "null",
              "string"
            ]
          },
          "imageID": {
            "type": "string"
          }
        }
      },
      "VhpAvailStatusMessageXml": {
        "type": "object",
        "properties": {
          "bookingLimit": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "description": "Maximum rooms available for sale.",
            "format": "int32"
          },
          "statusApplicationControl": {
            "description": "Room type, rate plan, and date range filter.",
            "$ref": "#/components/schemas/VhpStatusApplicationControlXml"
          },
          "restrictionStatuses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VhpRestrictionStatusXml"
            },
            "description": "Stop-sell, CTA, or CTD restriction entries."
          }
        },
        "description": "A single `&lt;AvailStatusMessage&gt;` element describing availability changes."
      },
      "VhpAvailStatusMessagesXml": {
        "type": "object",
        "properties": {
          "hotelCode": {
            "type": "string",
            "description": "The hotel/property identifier."
          },
          "messages": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VhpAvailStatusMessageXml"
            },
            "description": "Individual availability/restriction update messages."
          }
        },
        "description": "Container for `&lt;AvailStatusMessage&gt;` elements.\nCarries the `HotelCode` identifying the target property."
      },
      "VhpAvailabilityRatesInventoryBodyXml": {
        "type": "object",
        "properties": {
          "updateRates": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The `&lt;OTA_HotelRateAmountNotifRQ&gt;` element.\nPopulated when the request is a rate/price update; `null` otherwise.",
                "$ref": "#/components/schemas/VhpUpdateRatesXml"
              }
            ]
          },
          "updateInventoryAvailability": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The `&lt;OTA_HotelAvailNotifRQ&gt;` element.\nPopulated when the request is an availability/restriction update; `null` otherwise.",
                "$ref": "#/components/schemas/VhpUpdateInventoryAvailabilityXml"
              }
            ]
          }
        },
        "description": "Body type for the `vhp/vhp.php` endpoint.\nContains one or both OTA notification request types. VHP normally sends one per request,\nbut SOAP allows both `OTA_HotelRateAmountNotifRQ` and `OTA_HotelAvailNotifRQ` in the same body."
      },
      "VhpAvailabilityRatesInventoryRequestXml": {
        "type": "object",
        "properties": {
          "body": {
            "description": "The `&lt;soap:Body&gt;` element containing rate/availability OTA request payloads.",
            "$ref": "#/components/schemas/VhpAvailabilityRatesInventoryBodyXml"
          },
          "header": {
            "description": "The `&lt;soap:Header&gt;` element containing WS-Security credentials.\nDefaults to an empty header with empty credentials when the element is absent.",
            "$ref": "#/components/schemas/VhpSoapHeaderXml"
          }
        },
        "description": "Concrete SOAP Envelope for the `vhp/vhp.php` endpoint.\nDeserializes rate amount and availability notification requests."
      },
      "VhpAvailabilityRatesInventoryResponseBodyXml": {
        "type": "object",
        "properties": {
          "updateRatesResponse": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The `&lt;OTA_HotelRateAmountNotifRS&gt;` element.",
                "$ref": "#/components/schemas/VhpUpdateRatesResponseXml"
              }
            ]
          },
          "updateInventoryAvailabilityResponse": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "description": "The `&lt;OTA_HotelAvailNotifRS&gt;` element.",
                "$ref": "#/components/schemas/VhpUpdateInventoryAvailabilityResponseXml"
              }
            ]
          },
          "error": {
            "type": [
              "null",
              "string"
            ],
            "description": "Unprefixed `&lt;Error&gt;` element directly under `soap:Body`."
          }
        },
        "description": "Body type for VHP ARI responses."
      },
      "VhpAvailabilityRatesInventoryResponseXml": {
        "type": "object",
        "properties": {
          "body": {
            "description": "The `&lt;soap:Body&gt;` element containing the OTA response payload.",
            "$ref": "#/components/schemas/VhpAvailabilityRatesInventoryResponseBodyXml"
          },
          "header": {
            "description": "The `&lt;soap:Header&gt;` element containing WS-Security credentials.\nDefaults to an empty header with empty credentials when the element is absent.",
            "$ref": "#/components/schemas/VhpSoapHeaderXml"
          }
        },
        "description": "Concrete SOAP Envelope for VHP ARI responses."
      },
      "VhpBaseByGuestAmtXml": {
        "type": "object",
        "properties": {
          "amountAfterTax": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "description": "Total price including tax.",
            "format": "double"
          }
        },
        "description": "A single `&lt;BaseByGuestAmt&gt;` element carrying the room price."
      },
      "VhpCredentialsXml": {
        "type": "object",
        "properties": {
          "username": {
            "description": "The `&lt;wsse:Username&gt;` value identifying the OTA caller.",
            "$ref": "#/components/schemas/VhpUsernameXml"
          },
          "password": {
            "description": "The `&lt;wsse:Password&gt;` value.",
            "$ref": "#/components/schemas/VhpPasswordXml"
          }
        },
        "description": "Represents the `&lt;wsse:UsernameToken&gt;` element containing\na plaintext username and password for authentication."
      },
      "VhpOpenCloseStatus": {
        "type": "integer",
        "description": "`Status` attribute on `&lt;RestrictionStatus&gt;`.\n        Indicates whether a restriction is active or lifted."
      },
      "VhpPasswordXml": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "description": "The legacy PHP generates this specific URI string in the response XML."
          },
          "value": {
            "type": "string",
            "description": "The password text content."
          }
        },
        "description": "The `&lt;wsse:Password&gt;` value with its WS-Security type attribute."
      },
      "VhpRateAmountMessageXml": {
        "type": "object",
        "properties": {
          "statusApplicationControl": {
            "description": "Room type, rate plan, and date range filter.",
            "$ref": "#/components/schemas/VhpStatusApplicationControlXml"
          },
          "rates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VhpRateXml"
            },
            "description": "The `&lt;Rates&gt;` wrapper containing the new rate amounts."
          }
        },
        "description": "A single `&lt;RateAmountMessage&gt;` pairing a\nVhpStatusApplicationControlXml VhpRateAmountMessageXml.StatusApplicationControl with List&lt;VhpRateXml&gt; VhpRateAmountMessageXml.Rates."
      },
      "VhpRateAmountMessagesXml": {
        "type": "object",
        "properties": {
          "hotelCode": {
            "type": "string",
            "description": "The hotel/property identifier."
          },
          "messages": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VhpRateAmountMessageXml"
            },
            "description": "Individual rate update messages."
          }
        },
        "description": "Container for `&lt;RateAmountMessage&gt;` elements.\nCarries the `HotelCode` identifying the target property."
      },
      "VhpRateXml": {
        "type": "object",
        "properties": {
          "baseByGuestAmts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VhpBaseByGuestAmtXml"
            },
            "description": "Per-guest-count base amounts."
          }
        },
        "description": "A single `&lt;Rate&gt;` element."
      },
      "VhpRestrictionStatusXml": {
        "type": "object",
        "properties": {
          "status": {
            "description": "Whether the restriction is applied or lifted.",
            "$ref": "#/components/schemas/VhpOpenCloseStatus"
          },
          "restriction": {
            "description": "The type of restriction being applied.",
            "$ref": "#/components/schemas/VhpRestrictionType"
          }
        },
        "description": "`&lt;RestrictionStatus&gt;` — stop-sell, CTA, or CTD restriction."
      },
      "VhpRestrictionType": {
        "type": "integer",
        "description": "`Restriction` attribute on `&lt;RestrictionStatus&gt;`.\n        Identifies the type of restriction being applied."
      },
      "VhpSoapHeaderXml": {
        "type": "object",
        "properties": {
          "security": {
            "description": "The `&lt;wsse:Security&gt;` element with `soap:mustUnderstand=\"1\"`.",
            "$ref": "#/components/schemas/VhpWsseSecurityXml"
          }
        },
        "description": "Represents the `&lt;soap:Header&gt;` element.\nContains the WS-Security `&lt;wsse:Security&gt;` block used for\npayload-based authentication."
      },
      "VhpStatusApplicationControlXml": {
        "type": "object",
        "properties": {
          "startDate": {
            "type": [
              "null",
              "string"
            ],
            "description": "Inclusive start date (`yyyy-MM-dd`).",
            "format": "date"
          },
          "endDate": {
            "type": [
              "null",
              "string"
            ],
            "description": "Inclusive end date (`yyyy-MM-dd`).",
            "format": "date"
          },
          "ratePlanCode": {
            "type": "string",
            "description": "Rate plan code (e.g. `\"RACK\"`). Required for rate updates; optional for availability and\nrestriction updates when the change applies at room level across all rate plans."
          },
          "roomTypeCode": {
            "type": "string",
            "description": "Inventory / room type code (e.g. `\"DBL\"`)."
          }
        },
        "description": "`&lt;StatusApplicationControl&gt;` — room type, rate plan, and date range filter."
      },
      "VhpUpdateInventoryAvailabilityResponseXml": {
        "type": "object",
        "properties": {
          "version": {
            "type": "string",
            "description": "The OTA specification version (e.g. `\"1.0\"`)."
          },
          "timeStamp": {
            "type": "string",
            "description": "The response timestamp."
          },
          "echoToken": {
            "type": "string",
            "description": "The echoed request token."
          },
          "success": {
            "type": [
              "null",
              "string"
            ],
            "description": "The `&lt;Success&gt;` element value when the update succeeded."
          }
        },
        "description": "Represents the `&lt;OTA_HotelAvailNotifRS&gt;` element."
      },
      "VhpUpdateInventoryAvailabilityXml": {
        "type": "object",
        "properties": {
          "echoToken": {
            "type": "string",
            "description": "A unique token echoed back in the response, used for idempotency and request tracking."
          },
          "version": {
            "type": "string",
            "description": "The OTA specification version (e.g. `\"1.0\"`)."
          },
          "availStatusMessages": {
            "description": "The `&lt;AvailStatusMessages&gt;` child element containing availability updates.",
            "$ref": "#/components/schemas/VhpAvailStatusMessagesXml"
          },
          "timeStamp": {
            "type": [
              "null",
              "string"
            ],
            "description": "The timestamp of the request.",
            "format": "date-time"
          }
        },
        "description": "Represents the `&lt;OTA_HotelAvailNotifRQ&gt;` element.\nContains availability and restriction update messages for a hotel property."
      },
      "VhpUpdateRatesResponseXml": {
        "type": "object",
        "properties": {
          "version": {
            "type": "string",
            "description": "The OTA specification version (e.g. `\"1.0\"`)."
          },
          "timeStamp": {
            "type": "string",
            "description": "The response timestamp."
          },
          "echoToken": {
            "type": "string",
            "description": "The echoed request token."
          },
          "success": {
            "type": [
              "null",
              "string"
            ],
            "description": "The `&lt;Success&gt;` element value when the update succeeded."
          },
          "error": {
            "type": [
              "null",
              "string"
            ],
            "description": "Inner `&lt;Error&gt;` element for rate-limit and similar failures."
          }
        },
        "description": "Represents the `&lt;OTA_HotelRateAmountNotifRS&gt;` element."
      },
      "VhpUpdateRatesXml": {
        "type": "object",
        "properties": {
          "echoToken": {
            "type": "string",
            "description": "A unique token echoed back in the response, used for idempotency and request tracking."
          },
          "version": {
            "type": "string",
            "description": "The OTA specification version (e.g. `\"1.0\"`)."
          },
          "rateAmountMessages": {
            "description": "The `&lt;RateAmountMessages&gt;` child element containing rate updates.",
            "$ref": "#/components/schemas/VhpRateAmountMessagesXml"
          },
          "timeStamp": {
            "type": [
              "null",
              "string"
            ],
            "description": "The timestamp of the request.",
            "format": "date-time"
          }
        },
        "description": "Represents the `&lt;OTA_HotelRateAmountNotifRQ&gt;` element.\nContains rate/price update messages for a hotel property."
      },
      "VhpUsernameXml": {
        "type": "object",
        "properties": {
          "value": {
            "type": "string",
            "description": "The username text content."
          }
        },
        "description": "The `&lt;wsse:Username&gt;` value identifying the OTA caller."
      },
      "VhpWsseSecurityXml": {
        "type": "object",
        "properties": {
          "mustUnderstand": {
            "type": "string",
            "description": "Required for the response to be valid SOAP.\nNot required for request XML."
          },
          "usernameToken": {
            "description": "The `&lt;wsse:UsernameToken&gt;` element carrying the caller's credentials.",
            "$ref": "#/components/schemas/VhpCredentialsXml"
          }
        },
        "description": "Represents the `&lt;wsse:Security&gt;` element defined by the\nOASIS WS-Security 1.0 specification."
      },
      "YearlyMonthlyDealItemResponse": {
        "required": [
          "id",
          "roomId",
          "ratePlanId",
          "date",
          "availability",
          "rates",
          "stopSell",
          "minNights",
          "closedToArrival",
          "closedToDeparture"
        ],
        "type": "object",
        "properties": {
          "id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "roomId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "ratePlanId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "date": {
            "type": "string",
            "format": "date"
          },
          "availability": {
            "type": [
              "null",
              "string"
            ]
          },
          "rates": {
            "type": [
              "null",
              "string"
            ]
          },
          "stopSell": {
            "type": [
              "null",
              "string"
            ]
          },
          "minNights": {
            "type": [
              "null",
              "string"
            ]
          },
          "closedToArrival": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "closedToDeparture": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          }
        }
      }
    },
    "securitySchemes": {
      "ApiKey": {
        "type": "apiKey",
        "description": "API key required in the x-api-key header",
        "name": "x-api-key",
        "in": "header"
      }
    }
  },
  "tags": [
    {
      "name": "VersionEndpoint"
    },
    {
      "name": "HelloWorldFifoEndpoint"
    },
    {
      "name": "Full-Restriction PMS"
    },
    {
      "name": "API Keys"
    },
    {
      "name": "Connectivity"
    },
    {
      "name": "Feature Flags"
    },
    {
      "name": "VHP PMS"
    },
    {
      "name": "ExpertResa PMS"
    },
    {
      "name": "Guirez PMS"
    },
    {
      "name": "HotelMu PMS"
    },
    {
      "name": "IDS PMS"
    },
    {
      "name": "KAI PMS"
    },
    {
      "name": "Newport PMS"
    },
    {
      "name": "Roomme PMS"
    },
    {
      "name": "Skyhotel PMS"
    },
    {
      "name": "Ultron PMS"
    },
    {
      "name": "Urbaneroon PMS"
    },
    {
      "name": "Zuzu PMS"
    },
    {
      "name": "SiteMinder PMS"
    },
    {
      "name": "Metrics"
    },
    {
      "name": "TX"
    },
    {
      "name": "TX Artifacts"
    },
    {
      "name": "Changelogs"
    },
    {
      "name": "Integrations"
    },
    {
      "name": "Properties"
    },
    {
      "name": "SQS Ledger"
    },
    {
      "name": "ATLAS Dashboard Login Emails"
    },
    {
      "name": "tripla Link"
    },
    {
      "name": "Glovia PMS"
    }
  ]
}