{
  "openapi": "3.1.0",
  "info": {
    "title": "Doomio Client API",
    "version": "1.0.0",
    "description": "JSON REST API for personal and agency listings. Self-service keys: /cs/admin/api-keys. 120 requests/minute per account across all keys. Prices: decimal strings; areas: square metres. Write operations require write-enabled keys. Existing publication entitlements apply. Maximum JSON body: 128 KiB."
  },
  "servers": [
    {
      "url": "https://doomio.cz/api/v1"
    }
  ],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "paths": {
    "/properties": {
      "get": {
        "operationId": "listProperties",
        "summary": "List only the account’s listings, including drafts.",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "after",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "externalId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "draft",
                "published"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful JSON response.",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyList"
                }
              }
            }
          },
          "400": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "412": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Retry after this many seconds."
              }
            }
          },
          "500": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "createProperty",
        "summary": "Create a draft with a unique, immutable external ID.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateProperty"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful JSON response.",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyResponse"
                }
              }
            }
          },
          "400": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "412": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Retry after this many seconds."
              }
            }
          },
          "500": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/properties/{id}": {
      "parameters": [
        {
          "name": "id",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "minimum": 1
          }
        }
      ],
      "get": {
        "operationId": "getProperty",
        "responses": {
          "200": {
            "description": "Successful JSON response.",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyResponse"
                }
              }
            }
          },
          "400": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "412": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Retry after this many seconds."
              }
            }
          },
          "500": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "patch": {
        "operationId": "updateProperty",
        "summary": "Update supplied fields. External ID is immutable.",
        "parameters": [
          {
            "name": "If-Match",
            "in": "header",
            "description": "Optional ETag from the last GET. Mismatch returns 412.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PropertyInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful JSON response.",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyResponse"
                }
              }
            }
          },
          "400": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "412": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Retry after this many seconds."
              }
            }
          },
          "500": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "withdrawProperty",
        "summary": "Withdraw to a draft, preserving its ID and history.",
        "parameters": [
          {
            "name": "If-Match",
            "in": "header",
            "description": "Optional ETag from the last GET. Mismatch returns 412.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful JSON response.",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyResponse"
                }
              }
            }
          },
          "400": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "412": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Retry after this many seconds."
              }
            }
          },
          "500": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/properties/{id}/publish": {
      "parameters": [
        {
          "name": "id",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "minimum": 1
          }
        }
      ],
      "post": {
        "operationId": "publishProperty",
        "summary": "Publish with existing entitlement and photo validation.",
        "parameters": [
          {
            "name": "If-Match",
            "in": "header",
            "description": "Optional ETag from the last GET. Mismatch returns 412.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful JSON response.",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyResponse"
                }
              }
            }
          },
          "400": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "412": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Retry after this many seconds."
              }
            }
          },
          "500": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/properties/{id}/images": {
      "parameters": [
        {
          "name": "id",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "minimum": 1
          }
        }
      ],
      "post": {
        "operationId": "uploadPropertyImage",
        "summary": "Upload one JPEG/PNG/WebP, max 8 MiB/40 megapixels; 30 per listing.",
        "parameters": [
          {
            "name": "If-Match",
            "in": "header",
            "description": "Optional ETag from the last GET. Mismatch returns 412.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "file"
                ],
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful JSON response.",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyResponse"
                }
              }
            }
          },
          "400": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "412": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Retry after this many seconds."
              }
            }
          },
          "500": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/properties/{id}/images/{imageId}": {
      "parameters": [
        {
          "name": "id",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "minimum": 1
          }
        },
        {
          "name": "imageId",
          "in": "path",
          "required": true,
          "schema": {
            "type": "integer",
            "minimum": 1
          }
        }
      ],
      "delete": {
        "operationId": "deletePropertyImage",
        "parameters": [
          {
            "name": "If-Match",
            "in": "header",
            "description": "Optional ETag from the last GET. Mismatch returns 412.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful JSON response.",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PropertyResponse"
                }
              }
            }
          },
          "400": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "412": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Retry after this many seconds."
              }
            }
          },
          "500": {
            "description": "JSON error. X-Request-ID identifies the request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "Doomio API key"
      }
    },
    "schemas": {
      "PropertyInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "externalId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 191
          },
          "title": {
            "type": "string",
            "minLength": 3,
            "maxLength": 255
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 30000
          },
          "sourceLocale": {
            "type": "string",
            "enum": [
              "en",
              "cs",
              "sk",
              "de",
              "fr",
              "it",
              "es",
              "uk",
              "pt",
              "pl",
              "ru",
              "nl",
              "sv",
              "ko",
              "ja",
              "zh"
            ]
          },
          "country": {
            "type": "string",
            "enum": [
              "cz",
              "sk",
              "de",
              "at",
              "pl",
              "us",
              "gb",
              "eu",
              "it",
              "nl",
              "es"
            ]
          },
          "type": {
            "type": "string",
            "enum": [
              "apartment",
              "house",
              "land",
              "commercial",
              "other",
              "development"
            ]
          },
          "transactionType": {
            "type": "string",
            "enum": [
              "sale",
              "rent"
            ]
          },
          "price": {
            "type": "string",
            "pattern": "^\\d{1,13}(?:\\.\\d{1,2})?$",
            "example": "245000.00"
          },
          "currency": {
            "type": "string",
            "enum": [
              "CZK",
              "EUR",
              "USD",
              "GBP",
              "PLN"
            ]
          },
          "address": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 255
          },
          "city": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 120
          },
          "postalCode": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 20
          },
          "contactEmail": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 255
          },
          "contactPhone": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 50
          },
          "rooms": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0,
            "maximum": 1000
          },
          "bedrooms": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0,
            "maximum": 1000
          },
          "bathrooms": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0,
            "maximum": 1000
          },
          "latitude": {
            "type": [
              "number",
              "null"
            ],
            "minimum": -90,
            "maximum": 90
          },
          "longitude": {
            "type": [
              "number",
              "null"
            ],
            "minimum": -180,
            "maximum": 180
          },
          "usableArea": {
            "type": [
              "number",
              "null"
            ],
            "minimum": 0,
            "maximum": 1000000000.0
          },
          "landArea": {
            "type": [
              "number",
              "null"
            ],
            "minimum": 0,
            "maximum": 1000000000.0
          }
        }
      },
      "CreateProperty": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "externalId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 191
          },
          "title": {
            "type": "string",
            "minLength": 3,
            "maxLength": 255
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 30000
          },
          "sourceLocale": {
            "type": "string",
            "enum": [
              "en",
              "cs",
              "sk",
              "de",
              "fr",
              "it",
              "es",
              "uk",
              "pt",
              "pl",
              "ru",
              "nl",
              "sv",
              "ko",
              "ja",
              "zh"
            ]
          },
          "country": {
            "type": "string",
            "enum": [
              "cz",
              "sk",
              "de",
              "at",
              "pl",
              "us",
              "gb",
              "eu",
              "it",
              "nl",
              "es"
            ]
          },
          "type": {
            "type": "string",
            "enum": [
              "apartment",
              "house",
              "land",
              "commercial",
              "other",
              "development"
            ]
          },
          "transactionType": {
            "type": "string",
            "enum": [
              "sale",
              "rent"
            ]
          },
          "price": {
            "type": "string",
            "pattern": "^\\d{1,13}(?:\\.\\d{1,2})?$",
            "example": "245000.00"
          },
          "currency": {
            "type": "string",
            "enum": [
              "CZK",
              "EUR",
              "USD",
              "GBP",
              "PLN"
            ]
          },
          "address": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 255
          },
          "city": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 120
          },
          "postalCode": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 20
          },
          "contactEmail": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 255
          },
          "contactPhone": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 50
          },
          "rooms": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0,
            "maximum": 1000
          },
          "bedrooms": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0,
            "maximum": 1000
          },
          "bathrooms": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0,
            "maximum": 1000
          },
          "latitude": {
            "type": [
              "number",
              "null"
            ],
            "minimum": -90,
            "maximum": 90
          },
          "longitude": {
            "type": [
              "number",
              "null"
            ],
            "minimum": -180,
            "maximum": 180
          },
          "usableArea": {
            "type": [
              "number",
              "null"
            ],
            "minimum": 0,
            "maximum": 1000000000.0
          },
          "landArea": {
            "type": [
              "number",
              "null"
            ],
            "minimum": 0,
            "maximum": 1000000000.0
          }
        },
        "required": [
          "externalId",
          "title",
          "sourceLocale",
          "country",
          "type",
          "transactionType",
          "price",
          "currency"
        ]
      },
      "Property": {
        "type": "object",
        "properties": {
          "externalId": {
            "type": [
              "string",
              "null"
            ]
          },
          "title": {
            "type": "string",
            "minLength": 3,
            "maxLength": 255
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 30000
          },
          "sourceLocale": {
            "type": "string",
            "enum": [
              "en",
              "cs",
              "sk",
              "de",
              "fr",
              "it",
              "es",
              "uk",
              "pt",
              "pl",
              "ru",
              "nl",
              "sv",
              "ko",
              "ja",
              "zh"
            ]
          },
          "country": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "cz",
              "sk",
              "de",
              "at",
              "pl",
              "us",
              "gb",
              "eu",
              "it",
              "nl",
              "es",
              null
            ]
          },
          "type": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "apartment",
              "house",
              "land",
              "commercial",
              "other",
              "development",
              null
            ]
          },
          "transactionType": {
            "type": "string",
            "enum": [
              "sale",
              "rent"
            ]
          },
          "price": {
            "type": "string",
            "pattern": "^\\d{1,13}(?:\\.\\d{1,2})?$",
            "example": "245000.00"
          },
          "currency": {
            "type": "string",
            "enum": [
              "CZK",
              "EUR",
              "USD",
              "GBP",
              "PLN"
            ]
          },
          "address": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 255
          },
          "city": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 120
          },
          "postalCode": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 20
          },
          "contactEmail": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 255
          },
          "contactPhone": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 50
          },
          "rooms": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0,
            "maximum": 1000
          },
          "bedrooms": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0,
            "maximum": 1000
          },
          "bathrooms": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0,
            "maximum": 1000
          },
          "latitude": {
            "type": [
              "number",
              "null"
            ],
            "minimum": -90,
            "maximum": 90
          },
          "longitude": {
            "type": [
              "number",
              "null"
            ],
            "minimum": -180,
            "maximum": 180
          },
          "usableArea": {
            "type": [
              "number",
              "null"
            ],
            "minimum": 0,
            "maximum": 1000000000.0
          },
          "landArea": {
            "type": [
              "number",
              "null"
            ],
            "minimum": 0,
            "maximum": 1000000000.0
          },
          "id": {
            "type": "integer"
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "published"
            ]
          },
          "publiclyVisible": {
            "type": "boolean"
          },
          "validUntil": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "photoReviewError": {
            "type": [
              "string",
              "null"
            ]
          },
          "images": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "position": {
                  "type": "integer"
                },
                "alt": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              }
            }
          }
        }
      },
      "PropertyResponse": {
        "type": "object",
        "required": [
          "data"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/Property"
          }
        }
      },
      "PropertyList": {
        "type": "object",
        "required": [
          "data",
          "pagination"
        ],
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Property"
            }
          },
          "pagination": {
            "type": "object",
            "properties": {
              "limit": {
                "type": "integer"
              },
              "nextAfter": {
                "type": [
                  "integer",
                  "null"
                ]
              }
            }
          }
        }
      },
      "Error": {
        "type": "object",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "object",
            "required": [
              "code",
              "message"
            ],
            "properties": {
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            }
          }
        }
      }
    }
  }
}
