{
  "openapi" : "3.1.0",
  "info" : {
    "title" : "Wink API",
    "description" : "Welcome to the Wink API — a programmer-friendly way to manage, sell and book travel\ninventory on the Wink platform. See the **Overview** page (under **API**) for the full\nintroduction, intended audience, testing, and versioning.\n\n# Channel Manager API\nWink exposes a secured REST-based, JSON API to its channel manager partners. The connection is \"channel-wide\". Partners are free to integrate with the REST-based API using any programming language.\n\n# Intended Audience\nThis document is intended for external channel partners who wish to integrate with Wink.\n\n# Requirements\n- Active account with Wink. Sign up for your Channel Manager account:\n   - Staging: [https://staging-app.wink.travel](https://staging-app.wink.travel).\n   - Production: [https://app.wink.travel](https://app.wink.travel).\n- Active application. An application provides you with Oauth2 credentials you can pass to our endpoints. One is already created for you upon account creation.\n- Your production IP numbers. They need to be whitelisted before you can talk to our production environment.\n\n# Performance\nA particular attention to performance should be given when integrating with this API. A few things to be aware of:\n- Enable gzip compression to make payloads smaller.\n- Fewer large REST calls are preferred to many small ones. E.g. It is better to update many dates instead of individual dates.\n- It is possible to update both rate and availability with a single request.\n- Request only date ranges that you will use. There is no need to request an entire year if you will only be working with the first seven days.\n\n## Reservation notification (PUSH)\nWink supports PUSH notifications to communicate reservations. We also support BASIC AUTH to your endpoint. If you want to enable PUSH, add your PUSH endpoint and credentials (optional) to your account.",
    "contact" : {
      "name" : "Contact",
      "email" : "hi@wink.travel"
    },
    "version" : "0.0.0-TEST",
    "x-logo" : {
      "backgroundColor" : "#FFFFFF",
      "altText" : "wink",
      "url" : "https://res.cloudinary.com/traveliko/image/upload/c_scale,h_129/v1653285543/wink/logo_text_white.svg"
    }
  },
  "externalDocs" : {
    "description" : "Documentation",
    "url" : "https://wink.travel/getting-started/how-to-use/"
  },
  "servers" : [ {
    "url" : "https://integrations.wink.travel",
    "description" : "Endpoint"
  } ],
  "tags" : [ {
    "name" : "Channel Manager",
    "description" : "Channel managers can use this endpoint to integrate. It contains all the features a channel manager would need to query properties, update rate and availability and retrieve bookings.",
    "externalDocs" : {
      "description" : "Try it in Scalar",
      "url" : "https://integrations.wink.travel/scalar#channel-manager/tag/channel-manager"
    }
  } ],
  "paths" : {
    "/api/managing-entity/{managingEntityIdentifier}/channel-manager/property/{propertyIdentifier}/master-rate/{masterRateIdentifier}" : {
      "get" : {
        "tags" : [ "Channel Manager" ],
        "summary" : "Show daily rates",
        "description" : "Returns the room rate plus every daily rate and availability entry for the given property and master rate within the requested startDate-to-endDate range.",
        "operationId" : "show-property-room-rates",
        "parameters" : [ {
          "name" : "managingEntityIdentifier",
          "in" : "path",
          "description" : "Rate provider (channel-manager account) identifier (UUID)",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "d5b8a3c2-9e6f-4a1b-8d34-7c2e1f0a5b69"
        }, {
          "name" : "propertyIdentifier",
          "in" : "path",
          "description" : "Property identifier (UUID)",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "e2c7b4d3-1a8f-4e9c-b5d6-3a9f0e7c2b18"
        }, {
          "name" : "masterRateIdentifier",
          "in" : "path",
          "description" : "Master rate identifier (UUID)",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "5e8a3b7c-0d4f-4a2b-8c1d-9e6f2a0b4c73"
        }, {
          "name" : "startDate",
          "in" : "query",
          "description" : "Start date for rate query range (inclusive)",
          "required" : true,
          "schema" : {
            "type" : "string",
            "format" : "date"
          },
          "example" : "2026-02-15"
        }, {
          "name" : "endDate",
          "in" : "query",
          "description" : "End date for rate query range (inclusive)",
          "required" : true,
          "schema" : {
            "type" : "string",
            "format" : "date"
          },
          "example" : "2026-02-28"
        }, {
          "name" : "Wink-Version",
          "in" : "header",
          "schema" : {
            "type" : "string",
            "default" : "2.0.0",
            "enum" : [ "2.0" ]
          }
        }, {
          "name" : "Accept",
          "in" : "header",
          "schema" : {
            "type" : "string",
            "enum" : [ "application/json" ],
            "default" : null
          }
        } ],
        "responses" : {
          "400" : {
            "description" : "Bad Request — missing or invalid request parameter or body",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized — authentication is required or the session has expired",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden — authenticated but lacking the required permission or scope",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "404" : {
            "description" : "Not Found — the requested resource does not exist",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "405" : {
            "description" : "Method Not Allowed — the HTTP verb is not supported on this endpoint",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "409" : {
            "description" : "Conflict — the resource was modified by someone else since you read it; re-read it and retry with the new version",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "415" : {
            "description" : "Unsupported Media Type — use application/json",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "500" : {
            "description" : "Internal Server Error — an unexpected failure occurred on the server",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "503" : {
            "description" : "Service Unavailable — a downstream dependency is unreachable",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "200" : {
            "description" : "Master rate details with daily rates for the requested date range",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PropertyRoomRateWithRateList"
                },
                "example" : {
                  "endDate" : "2026-02-28",
                  "rates" : [ {
                    "amount" : 450.0,
                    "closedOnArrival" : false,
                    "closedOnDeparture" : false,
                    "currencyCode" : "THB",
                    "date" : "2026-02-15",
                    "guestRoomIdentifier" : "6f9b4c8d-1e5a-4b3c-9d2e-8a7f0c1b5e43",
                    "identifier" : "5e8a3b7c-0d4f-4a2b-8c1d-9e6f2a0b4c73",
                    "master" : true,
                    "maxLengthOfStay" : 30,
                    "maxOccupancy" : 4,
                    "minLengthOfStay" : 2,
                    "minOccupancy" : 1,
                    "propertyIdentifier" : "e2c7b4d3-1a8f-4e9c-b5d6-3a9f0e7c2b18",
                    "quantity" : 5,
                    "ratePlanIdentifier" : "7a0c5d9e-2f6b-4c1a-8e4d-3b9f1a0c6d52",
                    "roomRateIdentifier" : "5e8a3b7c-0d4f-4a2b-8c1d-9e6f2a0b4c73"
                  } ],
                  "room" : {
                    "baseRate" : 450.0,
                    "extraChildRateModifier" : {
                      "percent" : 0.5,
                      "type" : "PERCENTAGE"
                    },
                    "extraPaxRateModifier" : {
                      "fixedAmount" : {
                        "amount" : 35.0,
                        "currency" : "THB"
                      },
                      "type" : "FIXED"
                    },
                    "guestRoomName" : "Superior Deluxe",
                    "identifier" : "5e8a3b7c-0d4f-4a2b-8c1d-9e6f2a0b4c73",
                    "includedAdultOccupancy" : 2,
                    "includedChildOccupancy" : 0,
                    "maxAdultOccupancy" : 2,
                    "maxChildOccupancy" : 2,
                    "maxOccupancy" : 4,
                    "minOccupancy" : 1,
                    "name" : "Superior Deluxe - BAR",
                    "propertyIdentifier" : "e2c7b4d3-1a8f-4e9c-b5d6-3a9f0e7c2b18",
                    "ratePlanIdentifier" : "7a0c5d9e-2f6b-4c1a-8e4d-3b9f1a0c6d52",
                    "ratePlanName" : "BAR",
                    "roomTypeIdentifier" : "6f9b4c8d-1e5a-4b3c-9d2e-8a7f0c1b5e43",
                    "singleOccupancyRateModifier" : {
                      "percent" : 0.1,
                      "type" : "PERCENTAGE"
                    }
                  },
                  "startDate" : "2026-02-15"
                }
              }
            }
          }
        },
        "security" : [ {
          "oauth2ClientCredentials" : [ ]
        } ]
      },
      "put" : {
        "tags" : [ "Channel Manager" ],
        "summary" : "Update daily rates",
        "description" : "Bulk-updates daily price, availability and stay restrictions for the given property and master rate over a date range; amount is optional, so the call can adjust quantity alone, and currency defaults to the property's currency when omitted.",
        "operationId" : "update-rates",
        "parameters" : [ {
          "name" : "managingEntityIdentifier",
          "in" : "path",
          "description" : "Rate provider (channel-manager account) identifier (UUID)",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "d5b8a3c2-9e6f-4a1b-8d34-7c2e1f0a5b69"
        }, {
          "name" : "propertyIdentifier",
          "in" : "path",
          "description" : "Property identifier (UUID)",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "e2c7b4d3-1a8f-4e9c-b5d6-3a9f0e7c2b18"
        }, {
          "name" : "masterRateIdentifier",
          "in" : "path",
          "description" : "Master rate identifier (UUID)",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "5e8a3b7c-0d4f-4a2b-8c1d-9e6f2a0b4c73"
        }, {
          "name" : "Wink-Version",
          "in" : "header",
          "schema" : {
            "type" : "string",
            "default" : "2.0.0",
            "enum" : [ "2.0" ]
          }
        } ],
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/PropertyRateUpdateRequest"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "400" : {
            "description" : "Bad Request — missing or invalid request parameter or body",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized — authentication is required or the session has expired",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden — authenticated but lacking the required permission or scope",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "404" : {
            "description" : "Not Found — the requested resource does not exist",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "405" : {
            "description" : "Method Not Allowed — the HTTP verb is not supported on this endpoint",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "409" : {
            "description" : "Conflict — the resource was modified by someone else since you read it; re-read it and retry with the new version",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "415" : {
            "description" : "Unsupported Media Type — use application/json",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "500" : {
            "description" : "Internal Server Error — an unexpected failure occurred on the server",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "503" : {
            "description" : "Service Unavailable — a downstream dependency is unreachable",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "200" : {
            "description" : "Updated daily rates for every date in the requested range",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/PropertyRate"
                  }
                },
                "example" : [ {
                  "amount" : 450.0,
                  "closedOnArrival" : false,
                  "closedOnDeparture" : false,
                  "currencyCode" : "THB",
                  "date" : "2026-02-15",
                  "guestRoomIdentifier" : "6f9b4c8d-1e5a-4b3c-9d2e-8a7f0c1b5e43",
                  "identifier" : "5e8a3b7c-0d4f-4a2b-8c1d-9e6f2a0b4c73",
                  "master" : true,
                  "maxLengthOfStay" : 30,
                  "maxOccupancy" : 4,
                  "minLengthOfStay" : 2,
                  "minOccupancy" : 1,
                  "propertyIdentifier" : "e2c7b4d3-1a8f-4e9c-b5d6-3a9f0e7c2b18",
                  "quantity" : 5,
                  "ratePlanIdentifier" : "7a0c5d9e-2f6b-4c1a-8e4d-3b9f1a0c6d52",
                  "roomRateIdentifier" : "5e8a3b7c-0d4f-4a2b-8c1d-9e6f2a0b4c73"
                } ]
              }
            }
          }
        },
        "security" : [ {
          "oauth2ClientCredentials" : [ ]
        } ]
      }
    },
    "/api/managing-entity/{managingEntityIdentifier}/channel-manager/property/{propertyIdentifier}" : {
      "get" : {
        "tags" : [ "Channel Manager" ],
        "summary" : "Show property",
        "description" : "Returns the given property's details together with its full list of room-level master rates.",
        "operationId" : "show-property",
        "parameters" : [ {
          "name" : "managingEntityIdentifier",
          "in" : "path",
          "description" : "Rate provider (channel-manager account) identifier (UUID)",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "d5b8a3c2-9e6f-4a1b-8d34-7c2e1f0a5b69"
        }, {
          "name" : "propertyIdentifier",
          "in" : "path",
          "description" : "Property identifier (UUID)",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "e2c7b4d3-1a8f-4e9c-b5d6-3a9f0e7c2b18"
        }, {
          "name" : "Wink-Version",
          "in" : "header",
          "schema" : {
            "type" : "string",
            "default" : "2.0.0",
            "enum" : [ "2.0" ]
          }
        }, {
          "name" : "Accept",
          "in" : "header",
          "schema" : {
            "type" : "string",
            "enum" : [ "application/json" ],
            "default" : null
          }
        } ],
        "responses" : {
          "400" : {
            "description" : "Bad Request — missing or invalid request parameter or body",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized — authentication is required or the session has expired",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden — authenticated but lacking the required permission or scope",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "404" : {
            "description" : "Not Found — the requested resource does not exist",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "405" : {
            "description" : "Method Not Allowed — the HTTP verb is not supported on this endpoint",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "409" : {
            "description" : "Conflict — the resource was modified by someone else since you read it; re-read it and retry with the new version",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "415" : {
            "description" : "Unsupported Media Type — use application/json",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "500" : {
            "description" : "Internal Server Error — an unexpected failure occurred on the server",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "503" : {
            "description" : "Service Unavailable — a downstream dependency is unreachable",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "200" : {
            "description" : "Property details with its complete list of master rates",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PropertyWithRoomRateList"
                },
                "example" : {
                  "list" : [ {
                    "baseRate" : 450.0,
                    "extraChildRateModifier" : {
                      "percent" : 0.5,
                      "type" : "PERCENTAGE"
                    },
                    "extraPaxRateModifier" : {
                      "fixedAmount" : {
                        "amount" : 35.0,
                        "currency" : "THB"
                      },
                      "type" : "FIXED"
                    },
                    "guestRoomName" : "Superior Deluxe",
                    "identifier" : "5e8a3b7c-0d4f-4a2b-8c1d-9e6f2a0b4c73",
                    "includedAdultOccupancy" : 2,
                    "includedChildOccupancy" : 0,
                    "maxAdultOccupancy" : 2,
                    "maxChildOccupancy" : 2,
                    "maxOccupancy" : 4,
                    "minOccupancy" : 1,
                    "name" : "Superior Deluxe - BAR",
                    "propertyIdentifier" : "e2c7b4d3-1a8f-4e9c-b5d6-3a9f0e7c2b18",
                    "ratePlanIdentifier" : "7a0c5d9e-2f6b-4c1a-8e4d-3b9f1a0c6d52",
                    "ratePlanName" : "BAR",
                    "roomTypeIdentifier" : "6f9b4c8d-1e5a-4b3c-9d2e-8a7f0c1b5e43",
                    "singleOccupancyRateModifier" : {
                      "percent" : 0.1,
                      "type" : "PERCENTAGE"
                    }
                  } ],
                  "property" : {
                    "city" : "Bangkok",
                    "countryCode" : "TH",
                    "currencyCode" : "THB",
                    "identifier" : "e2c7b4d3-1a8f-4e9c-b5d6-3a9f0e7c2b18",
                    "name" : "The Siam Residences, Bangkok",
                    "timeZone" : "Asia/Bangkok"
                  }
                }
              }
            }
          }
        },
        "security" : [ {
          "oauth2ClientCredentials" : [ ]
        } ]
      }
    },
    "/api/managing-entity/{managingEntityIdentifier}/channel-manager/property/{propertyIdentifier}/booking/{bookingIdentifier}" : {
      "get" : {
        "tags" : [ "Channel Manager" ],
        "summary" : "Show booking",
        "description" : "Returns the single booking identified by the given booking ID for the given property.",
        "operationId" : "show-property-booking",
        "parameters" : [ {
          "name" : "managingEntityIdentifier",
          "in" : "path",
          "description" : "Rate provider (channel-manager account) identifier (UUID)",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "d5b8a3c2-9e6f-4a1b-8d34-7c2e1f0a5b69"
        }, {
          "name" : "propertyIdentifier",
          "in" : "path",
          "description" : "Property identifier (UUID)",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "e2c7b4d3-1a8f-4e9c-b5d6-3a9f0e7c2b18"
        }, {
          "name" : "bookingIdentifier",
          "in" : "path",
          "description" : "Booking identifier (UUID)",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "f4d1c8e5-2b9a-4f3d-9e7c-1b6a5d3f8c92"
        }, {
          "name" : "Wink-Version",
          "in" : "header",
          "schema" : {
            "type" : "string",
            "default" : "2.0.0",
            "enum" : [ "2.0" ]
          }
        }, {
          "name" : "Accept",
          "in" : "header",
          "schema" : {
            "type" : "string",
            "enum" : [ "application/json" ],
            "default" : null
          }
        } ],
        "responses" : {
          "400" : {
            "description" : "Bad Request — missing or invalid request parameter or body",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized — authentication is required or the session has expired",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden — authenticated but lacking the required permission or scope",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "404" : {
            "description" : "Not Found — the requested resource does not exist",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "405" : {
            "description" : "Method Not Allowed — the HTTP verb is not supported on this endpoint",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "409" : {
            "description" : "Conflict — the resource was modified by someone else since you read it; re-read it and retry with the new version",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "415" : {
            "description" : "Unsupported Media Type — use application/json",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "500" : {
            "description" : "Internal Server Error — an unexpected failure occurred on the server",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "503" : {
            "description" : "Service Unavailable — a downstream dependency is unreachable",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "200" : {
            "description" : "The requested booking",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PropertyBooking"
                },
                "example" : {
                  "bookingCode" : "WNK4ZQ7P",
                  "bookingIdentifier" : "f4d1c8e5-2b9a-4f3d-9e7c-1b6a5d3f8c92",
                  "cancelled" : false,
                  "createdDate" : "2026-02-01T10:30:00",
                  "currencyCode" : "THB",
                  "email" : "alexandra.beaumont@example.com",
                  "firstName" : "Alexandra",
                  "lastName" : "Beaumont",
                  "paymentMethodStatus" : "PAYMENT_SUCCEEDED",
                  "paymentMethodType" : "Card",
                  "propertyIdentifier" : "e2c7b4d3-1a8f-4e9c-b5d6-3a9f0e7c2b18",
                  "roomStays" : [ {
                    "adults" : 2,
                    "amount" : "450.00",
                    "children" : 1,
                    "endDate" : "2026-02-17",
                    "guestRoomName" : "Superior Deluxe",
                    "guests" : 3,
                    "name" : "Superior Deluxe - BAR",
                    "ratePlanName" : "BAR",
                    "roomRateIdentifier" : "5e8a3b7c-0d4f-4a2b-8c1d-9e6f2a0b4c73",
                    "startDate" : "2026-02-15"
                  } ],
                  "salesChannelIdentifier" : "7a0c5d9e-2f6b-4c1a-8e4d-3b9f1a0c6d52",
                  "salesChannelName" : "Wink Travel Agents",
                  "totalAmount" : "450.00"
                }
              }
            }
          }
        },
        "security" : [ {
          "oauth2ClientCredentials" : [ ]
        } ]
      }
    },
    "/api/managing-entity/{managingEntityIdentifier}/channel-manager/property/{propertyIdentifier}/booking/list" : {
      "get" : {
        "tags" : [ "Channel Manager" ],
        "summary" : "List bookings",
        "description" : "Returns all bookings for the given property last updated between startDate and endDate (not booking creation date - a booking created before startDate but modified within the window, e.g. cancelled, is included); when endDate is omitted it defaults to startDate plus one day.",
        "operationId" : "show-property-bookings",
        "parameters" : [ {
          "name" : "managingEntityIdentifier",
          "in" : "path",
          "description" : "Rate provider (channel-manager account) identifier (UUID)",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "d5b8a3c2-9e6f-4a1b-8d34-7c2e1f0a5b69"
        }, {
          "name" : "propertyIdentifier",
          "in" : "path",
          "description" : "Property identifier (UUID)",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "e2c7b4d3-1a8f-4e9c-b5d6-3a9f0e7c2b18"
        }, {
          "name" : "startDate",
          "in" : "query",
          "description" : "Start timestamp for booking last-updated date filter (inclusive); if endDate is omitted, it defaults to startDate + 1 day",
          "required" : true,
          "schema" : {
            "type" : "string",
            "format" : "date-time"
          },
          "example" : "2026-02-01T10:30:00"
        }, {
          "name" : "endDate",
          "in" : "query",
          "description" : "End timestamp for booking last-updated date filter (inclusive; optional; defaults to startDate + 1 day)",
          "required" : false,
          "schema" : {
            "type" : "string",
            "format" : "date-time"
          },
          "example" : "2026-02-02T10:30:00"
        }, {
          "name" : "Wink-Version",
          "in" : "header",
          "schema" : {
            "type" : "string",
            "default" : "2.0.0",
            "enum" : [ "2.0" ]
          }
        }, {
          "name" : "Accept",
          "in" : "header",
          "schema" : {
            "type" : "string",
            "enum" : [ "application/json" ],
            "default" : null
          }
        } ],
        "responses" : {
          "400" : {
            "description" : "Bad Request — missing or invalid request parameter or body",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized — authentication is required or the session has expired",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden — authenticated but lacking the required permission or scope",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "404" : {
            "description" : "Not Found — the requested resource does not exist",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "405" : {
            "description" : "Method Not Allowed — the HTTP verb is not supported on this endpoint",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "409" : {
            "description" : "Conflict — the resource was modified by someone else since you read it; re-read it and retry with the new version",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "415" : {
            "description" : "Unsupported Media Type — use application/json",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "500" : {
            "description" : "Internal Server Error — an unexpected failure occurred on the server",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "503" : {
            "description" : "Service Unavailable — a downstream dependency is unreachable",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "200" : {
            "description" : "All bookings for the given property in the requested last-updated date range",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/PropertyBooking"
                  }
                },
                "example" : [ {
                  "bookingCode" : "WNK4ZQ7P",
                  "bookingIdentifier" : "f4d1c8e5-2b9a-4f3d-9e7c-1b6a5d3f8c92",
                  "cancelled" : false,
                  "createdDate" : "2026-02-01T10:30:00",
                  "currencyCode" : "THB",
                  "email" : "alexandra.beaumont@example.com",
                  "firstName" : "Alexandra",
                  "lastName" : "Beaumont",
                  "paymentMethodStatus" : "PAYMENT_SUCCEEDED",
                  "paymentMethodType" : "Card",
                  "propertyIdentifier" : "e2c7b4d3-1a8f-4e9c-b5d6-3a9f0e7c2b18",
                  "roomStays" : [ {
                    "adults" : 2,
                    "amount" : "450.00",
                    "children" : 1,
                    "endDate" : "2026-02-17",
                    "guestRoomName" : "Superior Deluxe",
                    "guests" : 3,
                    "name" : "Superior Deluxe - BAR",
                    "ratePlanName" : "BAR",
                    "roomRateIdentifier" : "5e8a3b7c-0d4f-4a2b-8c1d-9e6f2a0b4c73",
                    "startDate" : "2026-02-15"
                  } ],
                  "salesChannelIdentifier" : "7a0c5d9e-2f6b-4c1a-8e4d-3b9f1a0c6d52",
                  "salesChannelName" : "Wink Travel Agents",
                  "totalAmount" : "450.00"
                } ]
              }
            }
          }
        },
        "security" : [ {
          "oauth2ClientCredentials" : [ ]
        } ]
      }
    },
    "/api/managing-entity/{managingEntityIdentifier}/channel-manager/property/list" : {
      "get" : {
        "tags" : [ "Channel Manager" ],
        "summary" : "List properties",
        "description" : "Returns a page of the properties your channel-manager account is connected to. Page is zero-based and size is capped at 100 records per page.",
        "operationId" : "show-properties",
        "parameters" : [ {
          "name" : "managingEntityIdentifier",
          "in" : "path",
          "description" : "Rate provider (channel-manager account) identifier (UUID)",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "d5b8a3c2-9e6f-4a1b-8d34-7c2e1f0a5b69"
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "Zero-based page index for pagination",
          "required" : false,
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          },
          "example" : 0
        }, {
          "name" : "size",
          "in" : "query",
          "description" : "Number of records per page (maximum 100)",
          "required" : false,
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 25
          },
          "example" : 25
        }, {
          "name" : "Wink-Version",
          "in" : "header",
          "schema" : {
            "type" : "string",
            "default" : "2.0.0",
            "enum" : [ "2.0" ]
          }
        }, {
          "name" : "Accept",
          "in" : "header",
          "schema" : {
            "type" : "string",
            "enum" : [ "application/json" ],
            "default" : null
          }
        } ],
        "responses" : {
          "400" : {
            "description" : "Bad Request — missing or invalid request parameter or body",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized — authentication is required or the session has expired",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden — authenticated but lacking the required permission or scope",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "404" : {
            "description" : "Not Found — the requested resource does not exist",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "405" : {
            "description" : "Method Not Allowed — the HTTP verb is not supported on this endpoint",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "409" : {
            "description" : "Conflict — the resource was modified by someone else since you read it; re-read it and retry with the new version",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "415" : {
            "description" : "Unsupported Media Type — use application/json",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "500" : {
            "description" : "Internal Server Error — an unexpected failure occurred on the server",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "503" : {
            "description" : "Service Unavailable — a downstream dependency is unreachable",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "200" : {
            "description" : "Paginated list of properties connected to the channel-manager account (zero-based page; each item is a ChannelManagerProperty)",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PageResponseChannelManagerProperty"
                },
                "example" : {
                  "content" : [ {
                    "city" : "Bangkok",
                    "countryCode" : "TH",
                    "currencyCode" : "THB",
                    "identifier" : "e2c7b4d3-1a8f-4e9c-b5d6-3a9f0e7c2b18",
                    "name" : "The Siam Residences, Bangkok",
                    "timeZone" : "Asia/Bangkok"
                  } ],
                  "first" : true,
                  "last" : false,
                  "number" : 0,
                  "numberOfElements" : 20,
                  "size" : 20,
                  "totalElements" : 1234,
                  "totalPages" : 62
                }
              }
            }
          }
        },
        "security" : [ {
          "oauth2ClientCredentials" : [ ]
        } ]
      }
    },
    "/api/managing-entity/{managingEntityIdentifier}/channel-manager/ping" : {
      "get" : {
        "tags" : [ "Channel Manager" ],
        "summary" : "Ping",
        "description" : "Health-check endpoint that validates your credentials and returns the API version plus your account's name and status.",
        "operationId" : "ping",
        "parameters" : [ {
          "name" : "managingEntityIdentifier",
          "in" : "path",
          "description" : "Rate provider (channel-manager account) identifier (UUID)",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "d5b8a3c2-9e6f-4a1b-8d34-7c2e1f0a5b69"
        }, {
          "name" : "Wink-Version",
          "in" : "header",
          "schema" : {
            "type" : "string",
            "default" : "2.0.0",
            "enum" : [ "2.0" ]
          }
        }, {
          "name" : "Accept",
          "in" : "header",
          "schema" : {
            "type" : "string",
            "enum" : [ "application/json" ],
            "default" : null
          }
        } ],
        "responses" : {
          "400" : {
            "description" : "Bad Request — missing or invalid request parameter or body",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized — authentication is required or the session has expired",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "403" : {
            "description" : "Forbidden — authenticated but lacking the required permission or scope",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "404" : {
            "description" : "Not Found — the requested resource does not exist",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "405" : {
            "description" : "Method Not Allowed — the HTTP verb is not supported on this endpoint",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "409" : {
            "description" : "Conflict — the resource was modified by someone else since you read it; re-read it and retry with the new version",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "415" : {
            "description" : "Unsupported Media Type — use application/json",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "500" : {
            "description" : "Internal Server Error — an unexpected failure occurred on the server",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "503" : {
            "description" : "Service Unavailable — a downstream dependency is unreachable",
            "content" : {
              "application/problem+json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "200" : {
            "description" : "Credentials are valid; returns API version plus account name and status",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PingResponse"
                },
                "example" : {
                  "apiVersion" : "2.0",
                  "name" : "The Siam Residences, Bangkok"
                }
              }
            }
          }
        },
        "security" : [ {
          "oauth2ClientCredentials" : [ ]
        } ]
      }
    }
  },
  "components" : {
    "schemas" : {
      "ProblemDetail" : {
        "type" : "object",
        "properties" : {
          "detail" : {
            "type" : "string"
          },
          "instance" : {
            "type" : "string",
            "format" : "uri"
          },
          "properties" : {
            "additionalProperties" : { },
            "type" : "object"
          },
          "status" : {
            "type" : "integer",
            "format" : "int32"
          },
          "title" : {
            "type" : "string"
          },
          "type" : {
            "type" : "string",
            "format" : "uri"
          }
        }
      },
      "CustomMonetaryAmount" : {
        "type" : "object",
        "description" : "Monetary amount with an associated ISO 4217 currency code, used at API boundaries where JSON-friendly serialization is needed",
        "example" : {
          "amount" : 1250.0,
          "currency" : "USD"
        },
        "properties" : {
          "amount" : {
            "type" : "number",
            "description" : "Monetary amount value",
            "example" : 1250.0
          },
          "currency" : {
            "type" : "string",
            "description" : "ISO 4217 currency code",
            "example" : "USD",
            "minLength" : 1,
            "pattern" : "^[A-Z]{3}$"
          }
        },
        "required" : [ "amount", "currency" ]
      },
      "PropertyRateUpdateRequest" : {
        "type" : "object",
        "description" : "Request body for bulk-updating daily rates and availability for a master rate over a date range",
        "example" : {
          "amount" : 450.0,
          "closedOnArrival" : false,
          "closedOnDeparture" : false,
          "currencyCode" : "THB",
          "endDate" : "2026-02-28",
          "extraChildRateModifier" : {
            "percent" : 0.5,
            "type" : "PERCENTAGE"
          },
          "extraPaxRateModifier" : {
            "fixedAmount" : {
              "amount" : 35.0,
              "currency" : "THB"
            },
            "type" : "FIXED"
          },
          "master" : true,
          "maxLengthOfStay" : 30,
          "maxOccupancy" : 4,
          "minLengthOfStay" : 2,
          "minOccupancy" : 1,
          "quantity" : 5,
          "singleOccupancyRateModifier" : {
            "percent" : 0.1,
            "type" : "PERCENTAGE"
          },
          "startDate" : "2026-02-15"
        },
        "properties" : {
          "amount" : {
            "type" : "number",
            "description" : "Updated daily rate amount (optional; omit to preserve current amounts)",
            "example" : 450.0
          },
          "closedOnArrival" : {
            "type" : "boolean",
            "description" : "Whether to close the rate on arrival dates",
            "example" : false
          },
          "closedOnDeparture" : {
            "type" : "boolean",
            "description" : "Whether to close the rate on departure dates",
            "example" : false
          },
          "currencyCode" : {
            "type" : "string",
            "description" : "Currency code for rate amount (optional; defaults to property currency)",
            "example" : "THB"
          },
          "endDate" : {
            "type" : "string",
            "format" : "date",
            "description" : "End date for rate update range (inclusive)",
            "example" : "2026-02-28"
          },
          "extraChildRateModifier" : {
            "$ref" : "#/components/schemas/VariableCharge",
            "description" : "Extra child rate modifier (JSON representation of VariableCharge, optional)",
            "example" : {
              "percent" : 0.5,
              "type" : "PERCENTAGE"
            }
          },
          "extraPaxRateModifier" : {
            "$ref" : "#/components/schemas/VariableCharge",
            "description" : "Extra occupant rate modifier (JSON representation of VariableCharge, optional)",
            "example" : {
              "fixedAmount" : {
                "amount" : 35.0,
                "currency" : "THB"
              },
              "type" : "FIXED"
            }
          },
          "master" : {
            "type" : "boolean",
            "description" : "Whether to update this as a master rate",
            "example" : true
          },
          "maxLengthOfStay" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "Maximum length of stay limit in nights (optional)",
            "example" : 30
          },
          "maxOccupancy" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "Maximum occupancy limit (optional)",
            "example" : 4
          },
          "minLengthOfStay" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "Minimum length of stay requirement in nights (optional)",
            "example" : 2
          },
          "minOccupancy" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "Minimum occupancy requirement (optional)",
            "example" : 1
          },
          "quantity" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "Available quantity/inventory for each date in range (optional)",
            "example" : 5
          },
          "singleOccupancyRateModifier" : {
            "$ref" : "#/components/schemas/VariableCharge",
            "description" : "Single occupancy rate modifier (JSON representation of VariableCharge, optional)",
            "example" : {
              "percent" : 0.1,
              "type" : "PERCENTAGE"
            }
          },
          "startDate" : {
            "type" : "string",
            "format" : "date",
            "description" : "Start date for rate update range (inclusive)",
            "example" : "2026-02-15"
          }
        },
        "required" : [ "endDate", "startDate" ]
      },
      "VariableCharge" : {
        "type" : "object",
        "example" : {
          "fixedAmount" : {
            "amount" : 1250.0,
            "currency" : "USD"
          },
          "percent" : 0.25,
          "type" : "PERCENTAGE"
        },
        "properties" : {
          "fixedAmount" : {
            "$ref" : "#/components/schemas/CustomMonetaryAmount",
            "description" : "A localized amount, always non-negative. Direction (surcharge vs. discount) is determined by which field this charge is assigned to, not the sign of this value."
          },
          "percent" : {
            "type" : "number",
            "format" : "float",
            "description" : "A fraction between 0 and 1 (inclusive) representing a percentage of the total stay amount for an early check-in or late check-out, e.g. 0.25 for 25%. Direction (surcharge vs. discount) is determined by which field this charge is assigned to, not the sign of this value.",
            "example" : 0.25,
            "maximum" : 1.0,
            "minimum" : 0.0
          },
          "type" : {
            "type" : "string",
            "description" : "When the type is FIXED, fixedAmount is required. When the type is PERCENTAGE, percent is required.",
            "enum" : [ "FIXED", "PERCENTAGE" ],
            "example" : "PERCENTAGE"
          }
        },
        "required" : [ "type" ]
      },
      "PropertyRate" : {
        "type" : "object",
        "description" : "A single daily rate entry for a master rate, including availability, stay restrictions, and optional occupancy modifiers",
        "example" : {
          "amount" : 450.0,
          "closedOnArrival" : false,
          "closedOnDeparture" : false,
          "currencyCode" : "THB",
          "date" : "2026-02-15",
          "guestRoomIdentifier" : "6f9b4c8d-1e5a-4b3c-9d2e-8a7f0c1b5e43",
          "identifier" : "5e8a3b7c-0d4f-4a2b-8c1d-9e6f2a0b4c73",
          "master" : true,
          "maxLengthOfStay" : 30,
          "maxOccupancy" : 4,
          "minLengthOfStay" : 2,
          "minOccupancy" : 1,
          "propertyIdentifier" : "e2c7b4d3-1a8f-4e9c-b5d6-3a9f0e7c2b18",
          "quantity" : 5,
          "ratePlanIdentifier" : "7a0c5d9e-2f6b-4c1a-8e4d-3b9f1a0c6d52",
          "roomRateIdentifier" : "5e8a3b7c-0d4f-4a2b-8c1d-9e6f2a0b4c73"
        },
        "properties" : {
          "amount" : {
            "type" : "number",
            "description" : "Daily rate amount",
            "example" : 450.0,
            "minimum" : 0
          },
          "closedOnArrival" : {
            "type" : "boolean",
            "description" : "Whether the rate is closed on arrival",
            "example" : false
          },
          "closedOnDeparture" : {
            "type" : "boolean",
            "description" : "Whether the rate is closed on departure",
            "example" : false
          },
          "currencyCode" : {
            "type" : "string",
            "description" : "Currency code for rate amount",
            "example" : "THB",
            "minLength" : 1
          },
          "date" : {
            "type" : "string",
            "format" : "date",
            "description" : "Date for this daily rate",
            "example" : "2026-02-15"
          },
          "extraChildRateModifier" : {
            "$ref" : "#/components/schemas/VariableCharge",
            "description" : "Extra child rate modifier (JSON representation of VariableCharge)",
            "example" : {
              "percent" : 0.5,
              "type" : "PERCENTAGE"
            }
          },
          "extraPaxRateModifier" : {
            "$ref" : "#/components/schemas/VariableCharge",
            "description" : "Extra occupant rate modifier (JSON representation of VariableCharge)",
            "example" : {
              "fixedAmount" : {
                "amount" : 35.0,
                "currency" : "THB"
              },
              "type" : "FIXED"
            }
          },
          "guestRoomIdentifier" : {
            "type" : "string",
            "format" : "uuid",
            "description" : "Guest room (room type) identifier",
            "example" : "6f9b4c8d-1e5a-4b3c-9d2e-8a7f0c1b5e43",
            "minLength" : 1
          },
          "identifier" : {
            "type" : "string",
            "format" : "uuid",
            "description" : "Daily rate identifier",
            "example" : "5e8a3b7c-0d4f-4a2b-8c1d-9e6f2a0b4c73"
          },
          "master" : {
            "type" : "boolean",
            "description" : "Whether this is a master (template) rate",
            "example" : true
          },
          "maxLengthOfStay" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "Maximum length of stay (in nights) for this date",
            "example" : 30
          },
          "maxOccupancy" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "Maximum occupancy allowed for this date",
            "example" : 4
          },
          "minLengthOfStay" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "Minimum length of stay (in nights) for this date",
            "example" : 2
          },
          "minOccupancy" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "Minimum occupancy required for this date",
            "example" : 1
          },
          "propertyIdentifier" : {
            "type" : "string",
            "format" : "uuid",
            "description" : "Property identifier",
            "example" : "e2c7b4d3-1a8f-4e9c-b5d6-3a9f0e7c2b18",
            "minLength" : 1
          },
          "quantity" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "Available quantity/inventory on this date",
            "example" : 5,
            "minimum" : 0
          },
          "ratePlanIdentifier" : {
            "type" : "string",
            "format" : "uuid",
            "description" : "Rate plan identifier",
            "example" : "7a0c5d9e-2f6b-4c1a-8e4d-3b9f1a0c6d52",
            "minLength" : 1
          },
          "roomRateIdentifier" : {
            "type" : "string",
            "format" : "uuid",
            "description" : "Master rate identifier",
            "example" : "5e8a3b7c-0d4f-4a2b-8c1d-9e6f2a0b4c73",
            "minLength" : 1
          },
          "singleOccupancyRateModifier" : {
            "$ref" : "#/components/schemas/VariableCharge",
            "description" : "Single occupancy rate modifier (JSON representation of VariableCharge)",
            "example" : {
              "percent" : 0.1,
              "type" : "PERCENTAGE"
            }
          }
        },
        "required" : [ "amount", "closedOnArrival", "closedOnDeparture", "currencyCode", "date", "guestRoomIdentifier", "master", "propertyIdentifier", "ratePlanIdentifier", "roomRateIdentifier" ]
      },
      "ChannelManagerProperty" : {
        "type" : "object",
        "description" : "Property entry returned by the channel manager API, containing the property's identity, location, and currency settings",
        "example" : {
          "city" : "Bangkok",
          "countryCode" : "TH",
          "currencyCode" : "THB",
          "identifier" : "e2c7b4d3-1a8f-4e9c-b5d6-3a9f0e7c2b18",
          "name" : "The Siam Residences, Bangkok",
          "timeZone" : "Asia/Bangkok"
        },
        "properties" : {
          "city" : {
            "type" : "string",
            "description" : "City property is located in or near",
            "example" : "Bangkok",
            "minLength" : 1
          },
          "countryCode" : {
            "type" : "string",
            "description" : "Country code property is located in",
            "example" : "TH",
            "minLength" : 1
          },
          "currencyCode" : {
            "type" : "string",
            "description" : "Currency code property uses",
            "example" : "THB",
            "minLength" : 1
          },
          "identifier" : {
            "type" : "string",
            "format" : "uuid",
            "description" : "Property ID",
            "example" : "e2c7b4d3-1a8f-4e9c-b5d6-3a9f0e7c2b18",
            "minLength" : 1
          },
          "name" : {
            "type" : "string",
            "description" : "Property name",
            "example" : "The Siam Residences, Bangkok",
            "minLength" : 1
          },
          "timeZone" : {
            "type" : "string",
            "description" : "Timezone property is located in",
            "example" : "Asia/Bangkok",
            "minLength" : 1
          }
        },
        "required" : [ "city", "countryCode", "currencyCode", "identifier", "name", "timeZone" ]
      },
      "PropertyRoomRate" : {
        "type" : "object",
        "description" : "A master rate combining a room type and a rate plan, including occupancy limits and base rate modifiers",
        "example" : {
          "baseRate" : 450.0,
          "extraChildRateModifier" : {
            "percent" : 0.5,
            "type" : "PERCENTAGE"
          },
          "extraPaxRateModifier" : {
            "fixedAmount" : {
              "amount" : 35.0,
              "currency" : "THB"
            },
            "type" : "FIXED"
          },
          "guestRoomName" : "Superior Deluxe",
          "identifier" : "5e8a3b7c-0d4f-4a2b-8c1d-9e6f2a0b4c73",
          "includedAdultOccupancy" : 2,
          "includedChildOccupancy" : 0,
          "maxAdultOccupancy" : 2,
          "maxChildOccupancy" : 2,
          "maxOccupancy" : 4,
          "minOccupancy" : 1,
          "name" : "Superior Deluxe - BAR",
          "propertyIdentifier" : "e2c7b4d3-1a8f-4e9c-b5d6-3a9f0e7c2b18",
          "ratePlanIdentifier" : "7a0c5d9e-2f6b-4c1a-8e4d-3b9f1a0c6d52",
          "ratePlanName" : "BAR",
          "roomTypeIdentifier" : "6f9b4c8d-1e5a-4b3c-9d2e-8a7f0c1b5e43",
          "singleOccupancyRateModifier" : {
            "percent" : 0.1,
            "type" : "PERCENTAGE"
          }
        },
        "properties" : {
          "baseRate" : {
            "$ref" : "#/components/schemas/CustomMonetaryAmount",
            "description" : "Base nightly rate in high-demand period",
            "example" : 450.0
          },
          "extraChildRateModifier" : {
            "$ref" : "#/components/schemas/VariableCharge",
            "description" : "Rate modifier for extra children (JSON representation of VariableCharge)",
            "example" : {
              "percent" : 0.5,
              "type" : "PERCENTAGE"
            }
          },
          "extraPaxRateModifier" : {
            "$ref" : "#/components/schemas/VariableCharge",
            "description" : "Rate modifier for extra occupants (JSON representation of VariableCharge)",
            "example" : {
              "fixedAmount" : {
                "amount" : 35.0,
                "currency" : "THB"
              },
              "type" : "FIXED"
            }
          },
          "guestRoomName" : {
            "type" : "string",
            "description" : "Room type name for display",
            "example" : "Superior Deluxe",
            "minLength" : 1
          },
          "identifier" : {
            "type" : "string",
            "format" : "uuid",
            "description" : "Master rate identifier",
            "example" : "5e8a3b7c-0d4f-4a2b-8c1d-9e6f2a0b4c73",
            "minLength" : 1
          },
          "includedAdultOccupancy" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "Number of adults the base rate price is calculated for",
            "example" : 2
          },
          "includedChildOccupancy" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "Number of children the base rate price is calculated for",
            "example" : 0
          },
          "maxAdultOccupancy" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "Maximum number of adults allowed in this room type",
            "example" : 2
          },
          "maxChildOccupancy" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "Maximum number of children allowed in this room type",
            "example" : 2
          },
          "maxOccupancy" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "Maximum occupancy for this room type",
            "example" : 4
          },
          "minOccupancy" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "Minimum occupancy for this room type",
            "example" : 1
          },
          "name" : {
            "type" : "string",
            "description" : "Master rate name (room type + rate plan)",
            "example" : "Superior Deluxe - BAR",
            "minLength" : 1
          },
          "propertyIdentifier" : {
            "type" : "string",
            "format" : "uuid",
            "description" : "Property identifier",
            "example" : "e2c7b4d3-1a8f-4e9c-b5d6-3a9f0e7c2b18",
            "minLength" : 1
          },
          "ratePlanIdentifier" : {
            "type" : "string",
            "format" : "uuid",
            "description" : "Rate plan identifier",
            "example" : "7a0c5d9e-2f6b-4c1a-8e4d-3b9f1a0c6d52",
            "minLength" : 1
          },
          "ratePlanName" : {
            "type" : "string",
            "description" : "Rate plan name for display",
            "example" : "BAR",
            "minLength" : 1
          },
          "roomTypeIdentifier" : {
            "type" : "string",
            "format" : "uuid",
            "description" : "Room type identifier",
            "example" : "6f9b4c8d-1e5a-4b3c-9d2e-8a7f0c1b5e43",
            "minLength" : 1
          },
          "singleOccupancyRateModifier" : {
            "$ref" : "#/components/schemas/VariableCharge",
            "description" : "Rate modifier for single occupancy (JSON representation of VariableCharge)",
            "example" : {
              "percent" : 0.1,
              "type" : "PERCENTAGE"
            }
          }
        },
        "required" : [ "baseRate", "extraChildRateModifier", "extraPaxRateModifier", "guestRoomName", "identifier", "includedAdultOccupancy", "includedChildOccupancy", "maxAdultOccupancy", "maxChildOccupancy", "maxOccupancy", "minOccupancy", "name", "propertyIdentifier", "ratePlanIdentifier", "ratePlanName", "roomTypeIdentifier", "singleOccupancyRateModifier" ]
      },
      "PropertyWithRoomRateList" : {
        "type" : "object",
        "description" : "A property together with its complete list of master rates (room type + rate plan combinations)",
        "example" : {
          "list" : [ {
            "baseRate" : 450.0,
            "extraChildRateModifier" : {
              "percent" : 0.5,
              "type" : "PERCENTAGE"
            },
            "extraPaxRateModifier" : {
              "fixedAmount" : {
                "amount" : 35.0,
                "currency" : "THB"
              },
              "type" : "FIXED"
            },
            "guestRoomName" : "Superior Deluxe",
            "identifier" : "5e8a3b7c-0d4f-4a2b-8c1d-9e6f2a0b4c73",
            "includedAdultOccupancy" : 2,
            "includedChildOccupancy" : 0,
            "maxAdultOccupancy" : 2,
            "maxChildOccupancy" : 2,
            "maxOccupancy" : 4,
            "minOccupancy" : 1,
            "name" : "Superior Deluxe - BAR",
            "propertyIdentifier" : "e2c7b4d3-1a8f-4e9c-b5d6-3a9f0e7c2b18",
            "ratePlanIdentifier" : "7a0c5d9e-2f6b-4c1a-8e4d-3b9f1a0c6d52",
            "ratePlanName" : "BAR",
            "roomTypeIdentifier" : "6f9b4c8d-1e5a-4b3c-9d2e-8a7f0c1b5e43",
            "singleOccupancyRateModifier" : {
              "percent" : 0.1,
              "type" : "PERCENTAGE"
            }
          } ],
          "property" : {
            "city" : "Bangkok",
            "countryCode" : "TH",
            "currencyCode" : "THB",
            "identifier" : "e2c7b4d3-1a8f-4e9c-b5d6-3a9f0e7c2b18",
            "name" : "The Siam Residences, Bangkok",
            "timeZone" : "Asia/Bangkok"
          }
        },
        "properties" : {
          "list" : {
            "type" : "array",
            "description" : "List of master rates (room type + rate plan combinations) for this property",
            "items" : {
              "$ref" : "#/components/schemas/PropertyRoomRate"
            }
          },
          "property" : {
            "$ref" : "#/components/schemas/ChannelManagerProperty",
            "description" : "Property details"
          }
        },
        "required" : [ "property" ]
      },
      "PropertyRoomRateWithRateList" : {
        "type" : "object",
        "description" : "A master rate together with the daily rates for the queried date range",
        "example" : {
          "endDate" : "2026-02-28",
          "rates" : [ {
            "amount" : 450.0,
            "closedOnArrival" : false,
            "closedOnDeparture" : false,
            "currencyCode" : "THB",
            "date" : "2026-02-15",
            "guestRoomIdentifier" : "6f9b4c8d-1e5a-4b3c-9d2e-8a7f0c1b5e43",
            "identifier" : "5e8a3b7c-0d4f-4a2b-8c1d-9e6f2a0b4c73",
            "master" : true,
            "maxLengthOfStay" : 30,
            "maxOccupancy" : 4,
            "minLengthOfStay" : 2,
            "minOccupancy" : 1,
            "propertyIdentifier" : "e2c7b4d3-1a8f-4e9c-b5d6-3a9f0e7c2b18",
            "quantity" : 5,
            "ratePlanIdentifier" : "7a0c5d9e-2f6b-4c1a-8e4d-3b9f1a0c6d52",
            "roomRateIdentifier" : "5e8a3b7c-0d4f-4a2b-8c1d-9e6f2a0b4c73"
          } ],
          "room" : {
            "baseRate" : 450.0,
            "extraChildRateModifier" : {
              "percent" : 0.5,
              "type" : "PERCENTAGE"
            },
            "extraPaxRateModifier" : {
              "fixedAmount" : {
                "amount" : 35.0,
                "currency" : "THB"
              },
              "type" : "FIXED"
            },
            "guestRoomName" : "Superior Deluxe",
            "identifier" : "5e8a3b7c-0d4f-4a2b-8c1d-9e6f2a0b4c73",
            "includedAdultOccupancy" : 2,
            "includedChildOccupancy" : 0,
            "maxAdultOccupancy" : 2,
            "maxChildOccupancy" : 2,
            "maxOccupancy" : 4,
            "minOccupancy" : 1,
            "name" : "Superior Deluxe - BAR",
            "propertyIdentifier" : "e2c7b4d3-1a8f-4e9c-b5d6-3a9f0e7c2b18",
            "ratePlanIdentifier" : "7a0c5d9e-2f6b-4c1a-8e4d-3b9f1a0c6d52",
            "ratePlanName" : "BAR",
            "roomTypeIdentifier" : "6f9b4c8d-1e5a-4b3c-9d2e-8a7f0c1b5e43",
            "singleOccupancyRateModifier" : {
              "percent" : 0.1,
              "type" : "PERCENTAGE"
            }
          },
          "startDate" : "2026-02-15"
        },
        "properties" : {
          "endDate" : {
            "type" : "string",
            "format" : "date",
            "description" : "End date of the queried range (inclusive)",
            "example" : "2026-02-28"
          },
          "rates" : {
            "type" : "array",
            "description" : "Daily rates for the queried date range",
            "items" : {
              "$ref" : "#/components/schemas/PropertyRate"
            }
          },
          "room" : {
            "$ref" : "#/components/schemas/PropertyRoomRate",
            "description" : "Master rate details (room type + rate plan)"
          },
          "startDate" : {
            "type" : "string",
            "format" : "date",
            "description" : "Start date of the queried range (inclusive)",
            "example" : "2026-02-15"
          }
        },
        "required" : [ "room" ]
      },
      "PropertyBooking" : {
        "type" : "object",
        "description" : "A single booking for a property: guest details, payment status, the net sales total, and one room-stay entry per booked room",
        "example" : {
          "bookingCode" : "WNK4ZQ7P",
          "bookingIdentifier" : "f4d1c8e5-2b9a-4f3d-9e7c-1b6a5d3f8c92",
          "cancelled" : false,
          "createdDate" : "2026-02-01T10:30:00",
          "currencyCode" : "THB",
          "email" : "alexandra.beaumont@example.com",
          "firstName" : "Alexandra",
          "lastName" : "Beaumont",
          "paymentMethodStatus" : "PAYMENT_SUCCEEDED",
          "paymentMethodType" : "Card",
          "propertyIdentifier" : "e2c7b4d3-1a8f-4e9c-b5d6-3a9f0e7c2b18",
          "roomStays" : [ {
            "adults" : 2,
            "amount" : "450.00",
            "children" : 1,
            "endDate" : "2026-02-17",
            "guestRoomName" : "Superior Deluxe",
            "guests" : 3,
            "name" : "Superior Deluxe - BAR",
            "ratePlanName" : "BAR",
            "roomRateIdentifier" : "5e8a3b7c-0d4f-4a2b-8c1d-9e6f2a0b4c73",
            "startDate" : "2026-02-15"
          } ],
          "salesChannelIdentifier" : "7a0c5d9e-2f6b-4c1a-8e4d-3b9f1a0c6d52",
          "salesChannelName" : "Wink Travel Agents",
          "totalAmount" : "450.00"
        },
        "properties" : {
          "bookingCode" : {
            "type" : "string",
            "description" : "User-friendly booking confirmation code",
            "example" : "WNK4ZQ7P",
            "minLength" : 1
          },
          "bookingIdentifier" : {
            "type" : "string",
            "format" : "uuid",
            "description" : "Booking ID",
            "example" : "f4d1c8e5-2b9a-4f3d-9e7c-1b6a5d3f8c92",
            "minLength" : 1
          },
          "cancelDate" : {
            "type" : "string",
            "format" : "date-time",
            "description" : "Timestamp when booking was cancelled (null if not cancelled)",
            "example" : "2026-02-05T14:22:30"
          },
          "cancelled" : {
            "type" : "boolean",
            "description" : "Whether the booking is cancelled",
            "example" : false
          },
          "createdDate" : {
            "type" : "string",
            "format" : "date-time",
            "description" : "Timestamp when booking was created",
            "example" : "2026-02-01T10:30:00"
          },
          "currencyCode" : {
            "type" : "string",
            "description" : "Supplier currency code",
            "example" : "THB",
            "minLength" : 1
          },
          "email" : {
            "type" : "string",
            "description" : "Email address of primary guest",
            "example" : "alexandra.beaumont@example.com",
            "minLength" : 1
          },
          "firstName" : {
            "type" : "string",
            "description" : "First name of primary guest",
            "example" : "Alexandra",
            "minLength" : 1
          },
          "lastName" : {
            "type" : "string",
            "description" : "Last name of primary guest",
            "example" : "Beaumont",
            "minLength" : 1
          },
          "paymentMethodStatus" : {
            "type" : "string",
            "description" : "Booking LIFECYCLE status — this does not report refunds; read refundState for that. INITIALIZED: awaiting payment; TEST_PAYMENT_SUCCEEDED: test booking; PAYMENT_SUCCEEDED: payment confirmed; PAYMENT_FAILED: payment declined; FAILED: system failure post-payment; CANCELLED: cancelled by any party. PARTIALLY_REFUNDED and FULLY_REFUNDED are retained only for bookings written before the lifecycle and refund axes were separated and are never emitted for anything refunded after that; a refunded booking that was not cancelled reports PAYMENT_SUCCEEDED here.",
            "enum" : [ "INITIALIZED", "TEST_PAYMENT_SUCCEEDED", "PAYMENT_SUCCEEDED", "PAYMENT_FAILED", "FAILED", "CANCELLED", "PARTIALLY_REFUNDED", "FULLY_REFUNDED" ],
            "example" : "PAYMENT_SUCCEEDED"
          },
          "paymentMethodType" : {
            "type" : "string",
            "description" : "Payment method type (e.g. Card, Direct Debit)",
            "example" : "Card",
            "minLength" : 1
          },
          "paymentWalletType" : {
            "type" : "string",
            "description" : "Payment wallet provider if applicable (e.g. Google Pay, Apple Pay)",
            "example" : "Google Pay"
          },
          "propertyIdentifier" : {
            "type" : "string",
            "format" : "uuid",
            "description" : "Property ID",
            "example" : "e2c7b4d3-1a8f-4e9c-b5d6-3a9f0e7c2b18",
            "minLength" : 1
          },
          "refundState" : {
            "type" : "string",
            "description" : "How much of the booking has been refunded, independent of the lifecycle status. NONE: nothing settled; PARTIAL: some of the amount returned; FULL: the whole amount returned. Absent on responses built before this field existed — treat absent as NONE.",
            "enum" : [ "NONE", "PARTIAL", "FULL" ],
            "example" : "NONE"
          },
          "roomStays" : {
            "type" : "array",
            "description" : "Per-room stay detail — one entry per physical room booked",
            "items" : {
              "$ref" : "#/components/schemas/PropertyBookingRoomStay"
            },
            "minItems" : 1
          },
          "salesChannelIdentifier" : {
            "type" : "string",
            "format" : "uuid",
            "description" : "Sales channel ID",
            "example" : "7a0c5d9e-2f6b-4c1a-8e4d-3b9f1a0c6d52",
            "minLength" : 1
          },
          "salesChannelName" : {
            "type" : "string",
            "description" : "Sales channel name (bookable inventory source)",
            "example" : "Wink Travel Agents",
            "minLength" : 1
          },
          "totalAmount" : {
            "type" : "number",
            "description" : "Net sales total in supplier currency — the amount the hotel receives for the entire booking (all rooms)",
            "example" : 450.0
          }
        },
        "required" : [ "bookingCode", "bookingIdentifier", "cancelled", "createdDate", "currencyCode", "email", "firstName", "lastName", "paymentMethodStatus", "paymentMethodType", "propertyIdentifier", "roomStays", "salesChannelIdentifier", "salesChannelName", "totalAmount" ]
      },
      "PropertyBookingRoomStay" : {
        "type" : "object",
        "description" : "A single physical room within a booking, including its rate, occupancy, stay dates, and per-room net sales amount",
        "example" : {
          "adults" : 2,
          "amount" : 450.0,
          "children" : 1,
          "endDate" : "2026-02-17",
          "guestRoomName" : "Superior Deluxe",
          "guests" : 3,
          "name" : "Superior Deluxe - BAR",
          "quantity" : 5,
          "ratePlanName" : "BAR",
          "roomRateIdentifier" : "5e8a3b7c-0d4f-4a2b-8c1d-9e6f2a0b4c73",
          "startDate" : "2026-02-15"
        },
        "properties" : {
          "adults" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "Number of adults in this room",
            "example" : 2
          },
          "amount" : {
            "type" : "number",
            "description" : "Net sales amount for this room in supplier currency (the booking's net sales total divided across its rooms)",
            "example" : 450.0
          },
          "children" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "Number of children in this room",
            "example" : 1
          },
          "endDate" : {
            "type" : "string",
            "format" : "date",
            "description" : "Room check-out date (departure)",
            "example" : "2026-02-17"
          },
          "guestRoomName" : {
            "type" : "string",
            "description" : "Guest room name",
            "example" : "Superior Deluxe",
            "minLength" : 1
          },
          "guests" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "Total number of guests in this room (adults and children)",
            "example" : 3
          },
          "name" : {
            "type" : "string",
            "description" : "Master Rate name",
            "example" : "Superior Deluxe - BAR",
            "minLength" : 1
          },
          "quantity" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "Total number of room types requested",
            "example" : 5
          },
          "ratePlanName" : {
            "type" : "string",
            "description" : "Rate plan name",
            "example" : "BAR",
            "minLength" : 1
          },
          "roomRateIdentifier" : {
            "type" : "string",
            "format" : "uuid",
            "description" : "Master Rate ID",
            "example" : "5e8a3b7c-0d4f-4a2b-8c1d-9e6f2a0b4c73",
            "minLength" : 1
          },
          "startDate" : {
            "type" : "string",
            "format" : "date",
            "description" : "Room check-in date (arrival)",
            "example" : "2026-02-15"
          }
        },
        "required" : [ "adults", "amount", "children", "endDate", "guestRoomName", "guests", "name", "quantity", "ratePlanName", "roomRateIdentifier", "startDate" ]
      },
      "PageResponseChannelManagerProperty" : {
        "type" : "object",
        "description" : "Owned pagination envelope: a page of content plus flat page metadata.",
        "example" : {
          "content" : [ {
            "city" : "Bangkok",
            "countryCode" : "TH",
            "currencyCode" : "THB",
            "identifier" : "e2c7b4d3-1a8f-4e9c-b5d6-3a9f0e7c2b18",
            "name" : "The Siam Residences, Bangkok",
            "timeZone" : "Asia/Bangkok"
          } ],
          "first" : true,
          "last" : false,
          "number" : 0,
          "numberOfElements" : 20,
          "size" : 20,
          "totalElements" : 1234,
          "totalPages" : 62
        },
        "properties" : {
          "content" : {
            "type" : "array",
            "description" : "The elements on this page.",
            "items" : {
              "$ref" : "#/components/schemas/ChannelManagerProperty"
            }
          },
          "first" : {
            "type" : "boolean",
            "description" : "Whether this is the first page.",
            "example" : true
          },
          "last" : {
            "type" : "boolean",
            "description" : "Whether this is the last page.",
            "example" : false
          },
          "number" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "Zero-based index of this page.",
            "example" : 0
          },
          "numberOfElements" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "Number of elements on this page.",
            "example" : 20
          },
          "size" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "The requested page size.",
            "example" : 20
          },
          "totalElements" : {
            "type" : "integer",
            "format" : "int64",
            "description" : "Total number of elements across all pages.",
            "example" : 1234
          },
          "totalPages" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "Total number of pages for the current page size.",
            "example" : 62
          }
        }
      },
      "PingResponse" : {
        "type" : "object",
        "description" : "Response returned by the ping endpoint confirming that credentials are valid",
        "example" : {
          "apiVersion" : "2.0",
          "name" : "The Siam Residences, Bangkok"
        },
        "properties" : {
          "apiVersion" : {
            "type" : "string",
            "description" : "API version",
            "example" : "2.0"
          },
          "name" : {
            "type" : "string",
            "description" : "Account name",
            "example" : "The Siam Residences, Bangkok"
          },
          "status" : {
            "type" : "string",
            "description" : "Account status. PENDING_APPROVAL: awaiting admin activation; ACTIVE: account is operational; INACTIVE: account has been deactivated; UNDER_REVIEW: account is being reviewed; SUSPENDED: account suspended due to policy violation; REJECTED: account application was rejected; REMOVED: account has been deleted",
            "enum" : [ "PENDING_APPROVAL", "ACTIVE", "INACTIVE", "UNDER_REVIEW", "SUSPENDED", "REJECTED", "REMOVED" ]
          }
        },
        "required" : [ "apiVersion", "name", "status" ]
      }
    },
    "securitySchemes" : {
      "oauth2ClientCredentials" : {
        "type" : "oauth2",
        "description" : "Every endpoint is protected with OAuth2 **client credentials**. Create an\n**Application** in your account to obtain a `clientId` and `clientSecret`, then\nexchange them for a short-lived bearer token.\n\n### 1. Request an access token\n`POST` to the **Token URL** below with `Content-Type: application/x-www-form-urlencoded`\nand a body of `grant_type=client_credentials` (optionally `scope=<space-separated scopes>`).\nSend your credentials as HTTP Basic auth:\n`Authorization: Basic base64(clientId + \":\" + clientSecret)`.\n\n### 2. Call the API\nPass the returned token on every request: `Authorization: Bearer <access_token>`.\n\nTokens carry only the scopes granted to your Application — request the least privilege\nyou need. There is no interactive authorize step and no refresh token for this flow;\nrequest a new token when the current one expires.",
        "name" : "Client Credentials",
        "flows" : {
          "clientCredentials" : {
            "tokenUrl" : "https://iam.wink.travel/oauth2/token",
            "scopes" : {
              "integrations.read" : "View your channel manager integrations.",
              "integrations.write" : "Create and update your channel manager integrations.",
              "integrations.remove" : "Delete your channel manager integrations."
            }
          }
        }
      }
    }
  }
}