{
    "openapi": "3.0.3",
    "info": {
        "title": "Luxury Home Floripa API",
        "version": "1.2.0",
        "description": "API pública e somente leitura da Luxury Home Floripa para consulta de imóveis de alto padrão e artigos do blog em Florianópolis, Santa Catarina. Sem autenticação: não há chave, cadastro nem ambiente separado; a produção é aberta para testes. Limite de 600 requisições por minuto por IP (cabeçalhos RateLimit e Retry-After). Erros seguem a RFC 9457 (application/problem+json). Versionamento pela URL (/lhf/v1); mudanças incompatíveis só em /lhf/v2, com aviso de pelo menos 90 dias pelos cabeçalhos Deprecation e Sunset.",
        "contact": {
            "name": "Luxury Home Floripa",
            "url": "https://luxuryhomefloripa.com.br/contato/",
            "email": "dayrocco@luxuryhomefloripa.com.br"
        },
        "x-ai-index": "https://luxuryhomefloripa.com.br/llms.txt",
        "x-ai-index-full": "https://luxuryhomefloripa.com.br/llms-full.txt",
        "x-deprecation-policy": "https://luxuryhomefloripa.com.br/api/#versionamento",
        "x-mcp-server": "https://ias.luxuryhomefloripa.com.br/mcp"
    },
    "security": [],
    "servers": [
        {
            "url": "https://luxuryhomefloripa.com.br/wp-json/lhf/v1",
            "description": "Servidor de produção"
        }
    ],
    "paths": {
        "/properties": {
            "get": {
                "operationId": "listProperties",
                "summary": "Listar imóveis com filtros",
                "description": "Retorna imóveis de alto padrão disponíveis em Florianópolis e região. Filtre por bairro, amenidade, preço, área e número de quartos.",
                "security": [],
                "parameters": [
                    {
                        "name": "category",
                        "in": "query",
                        "description": "Slug da categoria do imóvel.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "apartamentos"
                    },
                    {
                        "name": "status",
                        "in": "query",
                        "description": "Slug do status ou finalidade do imóvel.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "venda"
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "description": "Número da página de resultados.",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "default": 1
                        },
                        "example": 1
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "description": "Quantidade de imóveis retornados por página.",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "default": 20
                        },
                        "example": 20
                    },
                    {
                        "name": "amenity",
                        "in": "query",
                        "description": "Slug da amenidade ou característica do imóvel.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "frente-mar"
                    },
                    {
                        "name": "neighborhood",
                        "in": "query",
                        "description": "Slug do bairro.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "jurere-internacional"
                    },
                    {
                        "name": "beds",
                        "in": "query",
                        "description": "Número mínimo de dormitórios.",
                        "schema": {
                            "type": "integer",
                            "minimum": 0
                        },
                        "example": 3
                    },
                    {
                        "name": "min_area",
                        "in": "query",
                        "description": "Área mínima em m².",
                        "schema": {
                            "type": "number",
                            "minimum": 0
                        },
                        "example": 120
                    },
                    {
                        "name": "max_area",
                        "in": "query",
                        "description": "Área máxima em m².",
                        "schema": {
                            "type": "number",
                            "minimum": 0
                        },
                        "example": 200
                    },
                    {
                        "name": "min_price",
                        "in": "query",
                        "description": "Preço mínimo em BRL.",
                        "schema": {
                            "type": "number",
                            "minimum": 0
                        },
                        "example": 1000000
                    },
                    {
                        "name": "max_price",
                        "in": "query",
                        "description": "Preço máximo em BRL.",
                        "schema": {
                            "type": "number",
                            "minimum": 0
                        },
                        "example": 5000000
                    },
                    {
                        "name": "city",
                        "in": "query",
                        "description": "Slug da cidade.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "florianopolis"
                    },
                    {
                        "name": "search",
                        "in": "query",
                        "description": "Busca livre no título e na descrição.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "orderby",
                        "in": "query",
                        "description": "Ordenação.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "date",
                                "modified",
                                "price",
                                "title"
                            ],
                            "default": "date"
                        }
                    },
                    {
                        "name": "order",
                        "in": "query",
                        "description": "Direção.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "ASC",
                                "DESC"
                            ],
                            "default": "DESC"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Lista paginada de imóveis.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "required": [
                                        "page",
                                        "per_page",
                                        "total",
                                        "total_pages",
                                        "items"
                                    ],
                                    "properties": {
                                        "page": {
                                            "type": "integer",
                                            "minimum": 1,
                                            "example": 1
                                        },
                                        "per_page": {
                                            "type": "integer",
                                            "minimum": 1,
                                            "example": 20
                                        },
                                        "total": {
                                            "type": "integer",
                                            "minimum": 0,
                                            "example": 232
                                        },
                                        "total_pages": {
                                            "type": "integer",
                                            "minimum": 0,
                                            "example": 12
                                        },
                                        "items": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Property"
                                            }
                                        }
                                    }
                                }
                            }
                        },
                        "headers": {
                            "RateLimit": {
                                "$ref": "#/components/headers/RateLimit"
                            },
                            "RateLimit-Policy": {
                                "$ref": "#/components/headers/RateLimit-Policy"
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/BadRequest"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooManyRequests"
                    },
                    "500": {
                        "$ref": "#/components/responses/ServerError"
                    }
                }
            }
        },
        "/artigos": {
            "get": {
                "operationId": "listArtigos",
                "summary": "Listar artigos do blog",
                "description": "Retorna artigos do Luxury Blog sobre imóveis, lifestyle, economia, bairros, eventos e tudo sobre Florianópolis. Suporta filtro por categoria, tag, idioma e busca livre. Ideal para IAs que precisam contextualizar a região ou recomendar conteúdo relevante.",
                "security": [],
                "parameters": [
                    {
                        "name": "search",
                        "in": "query",
                        "description": "Busca livre no título e conteúdo do artigo.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "apartamento jurere"
                    },
                    {
                        "name": "categoria",
                        "in": "query",
                        "description": "Slug da categoria editorial. Categorias disponíveis: arquitetura, artigos, cultura, dados-indicadores, decor, destinos, economia, esportes, estilo-de-vida, eventos, floripa, futuro, imovel, longevidade.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "economia"
                    },
                    {
                        "name": "tag",
                        "in": "query",
                        "description": "Slug da tag do artigo. Exemplos: jurere-internacional, campeche, lagoa-da-conceicao, vista-mar, frente-mar, mercado-imobiliario, investimento, lifestyle.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "jurere-internacional"
                    },
                    {
                        "name": "lang",
                        "in": "query",
                        "description": "Idioma da resposta (ISO 639-1). Quando disponível, retorna título e excerpt traduzidos via TranslatePress. Padrão: pt.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "pt",
                                "en",
                                "es",
                                "fr",
                                "de",
                                "ru"
                            ],
                            "default": "pt"
                        },
                        "example": "en"
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "description": "Quantidade de artigos por página. Máximo: 50.",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 50,
                            "default": 12
                        },
                        "example": 10
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "description": "Número de artigos a pular (paginação).",
                        "schema": {
                            "type": "integer",
                            "minimum": 0,
                            "default": 0
                        },
                        "example": 0
                    },
                    {
                        "name": "orderby",
                        "in": "query",
                        "description": "Campo de ordenação.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "date",
                                "title",
                                "modified"
                            ],
                            "default": "date"
                        }
                    },
                    {
                        "name": "order",
                        "in": "query",
                        "description": "Direção da ordenação.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "DESC",
                                "ASC"
                            ],
                            "default": "DESC"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Lista de artigos com metadados completos.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "total": {
                                            "type": "integer",
                                            "description": "Total de artigos encontrados.",
                                            "example": 281
                                        },
                                        "per_page": {
                                            "type": "integer",
                                            "example": 12
                                        },
                                        "offset": {
                                            "type": "integer",
                                            "example": 0
                                        },
                                        "lang": {
                                            "type": "string",
                                            "example": "pt"
                                        },
                                        "results": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Artigo"
                                            }
                                        }
                                    }
                                }
                            }
                        },
                        "headers": {
                            "RateLimit": {
                                "$ref": "#/components/headers/RateLimit"
                            },
                            "RateLimit-Policy": {
                                "$ref": "#/components/headers/RateLimit-Policy"
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/BadRequest"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooManyRequests"
                    },
                    "500": {
                        "$ref": "#/components/responses/ServerError"
                    }
                }
            }
        },
        "/artigos/{slug}": {
            "get": {
                "operationId": "getArtigo",
                "summary": "Buscar artigo por slug",
                "description": "Retorna um artigo específico pelo seu slug (parte final da URL).",
                "security": [],
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "description": "Slug do artigo (ex: mercado-imobiliario-florianopolis).",
                        "schema": {
                            "type": "string"
                        },
                        "example": "mercado-imobiliario-florianopolis"
                    },
                    {
                        "name": "lang",
                        "in": "query",
                        "description": "Idioma da resposta (ISO 639-1). Padrão: pt.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "pt",
                                "en",
                                "es",
                                "fr",
                                "de",
                                "ru"
                            ],
                            "default": "pt"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Dados completos do artigo.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Artigo"
                                }
                            }
                        },
                        "headers": {
                            "RateLimit": {
                                "$ref": "#/components/headers/RateLimit"
                            },
                            "RateLimit-Policy": {
                                "$ref": "#/components/headers/RateLimit-Policy"
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "400": {
                        "$ref": "#/components/responses/BadRequest"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooManyRequests"
                    },
                    "500": {
                        "$ref": "#/components/responses/ServerError"
                    }
                }
            }
        },
        "/properties/{id}": {
            "get": {
                "operationId": "getProperty",
                "summary": "Detalhe de um imóvel",
                "description": "Retorna um imóvel pelo código do anúncio.",
                "security": [],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Código do anúncio (ex.: 100197) ou ID interno.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "100197"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Dados do imóvel.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Property"
                                }
                            }
                        },
                        "headers": {
                            "RateLimit": {
                                "$ref": "#/components/headers/RateLimit"
                            },
                            "RateLimit-Policy": {
                                "$ref": "#/components/headers/RateLimit-Policy"
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/BadRequest"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooManyRequests"
                    },
                    "500": {
                        "$ref": "#/components/responses/ServerError"
                    }
                }
            }
        },
        "/search": {
            "get": {
                "operationId": "searchProperties",
                "summary": "Buscar imóveis por texto ou código",
                "security": [],
                "parameters": [
                    {
                        "name": "q",
                        "in": "query",
                        "required": true,
                        "description": "Texto, bairro, nome ou código.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "jurere"
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "description": "Máximo de resultados.",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "default": 20
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Imóveis encontrados.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/Property"
                                    }
                                }
                            }
                        },
                        "headers": {
                            "RateLimit": {
                                "$ref": "#/components/headers/RateLimit"
                            },
                            "RateLimit-Policy": {
                                "$ref": "#/components/headers/RateLimit-Policy"
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/BadRequest"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooManyRequests"
                    },
                    "500": {
                        "$ref": "#/components/responses/ServerError"
                    }
                }
            }
        },
        "/taxonomies": {
            "get": {
                "operationId": "listTaxonomies",
                "summary": "Listar categorias, status, características, cidades e bairros",
                "description": "Use os slugs retornados como filtros em /properties.",
                "security": [],
                "responses": {
                    "200": {
                        "description": "Termos por taxonomia.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "property_category": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "properties": {
                                                    "id": {
                                                        "type": "integer"
                                                    },
                                                    "name": {
                                                        "type": "string"
                                                    },
                                                    "slug": {
                                                        "type": "string"
                                                    },
                                                    "count": {
                                                        "type": "integer"
                                                    },
                                                    "parent": {
                                                        "type": "integer"
                                                    },
                                                    "link": {
                                                        "type": "string",
                                                        "format": "uri"
                                                    }
                                                }
                                            }
                                        },
                                        "property_status": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "properties": {
                                                    "id": {
                                                        "type": "integer"
                                                    },
                                                    "name": {
                                                        "type": "string"
                                                    },
                                                    "slug": {
                                                        "type": "string"
                                                    },
                                                    "count": {
                                                        "type": "integer"
                                                    },
                                                    "parent": {
                                                        "type": "integer"
                                                    },
                                                    "link": {
                                                        "type": "string",
                                                        "format": "uri"
                                                    }
                                                }
                                            }
                                        },
                                        "property_action_category": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "properties": {
                                                    "id": {
                                                        "type": "integer"
                                                    },
                                                    "name": {
                                                        "type": "string"
                                                    },
                                                    "slug": {
                                                        "type": "string"
                                                    },
                                                    "count": {
                                                        "type": "integer"
                                                    },
                                                    "parent": {
                                                        "type": "integer"
                                                    },
                                                    "link": {
                                                        "type": "string",
                                                        "format": "uri"
                                                    }
                                                }
                                            }
                                        },
                                        "property_city": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "properties": {
                                                    "id": {
                                                        "type": "integer"
                                                    },
                                                    "name": {
                                                        "type": "string"
                                                    },
                                                    "slug": {
                                                        "type": "string"
                                                    },
                                                    "count": {
                                                        "type": "integer"
                                                    },
                                                    "parent": {
                                                        "type": "integer"
                                                    },
                                                    "link": {
                                                        "type": "string",
                                                        "format": "uri"
                                                    }
                                                }
                                            }
                                        },
                                        "property_area": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "properties": {
                                                    "id": {
                                                        "type": "integer"
                                                    },
                                                    "name": {
                                                        "type": "string"
                                                    },
                                                    "slug": {
                                                        "type": "string"
                                                    },
                                                    "count": {
                                                        "type": "integer"
                                                    },
                                                    "parent": {
                                                        "type": "integer"
                                                    },
                                                    "link": {
                                                        "type": "string",
                                                        "format": "uri"
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        },
                        "headers": {
                            "RateLimit": {
                                "$ref": "#/components/headers/RateLimit"
                            },
                            "RateLimit-Policy": {
                                "$ref": "#/components/headers/RateLimit-Policy"
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/BadRequest"
                    },
                    "429": {
                        "$ref": "#/components/responses/TooManyRequests"
                    },
                    "500": {
                        "$ref": "#/components/responses/ServerError"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "PropertyTerm": {
                "type": "object",
                "required": [
                    "id",
                    "name",
                    "slug"
                ],
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "name": {
                        "type": "string"
                    },
                    "slug": {
                        "type": "string"
                    }
                }
            },
            "PropertyPrices": {
                "type": "object",
                "properties": {
                    "sale_brl": {
                        "type": "number",
                        "nullable": true
                    },
                    "rent_brl_month": {
                        "type": "number",
                        "nullable": true
                    },
                    "price_per_m2_brl": {
                        "type": "number",
                        "nullable": true
                    }
                }
            },
            "PropertySpecs": {
                "type": "object",
                "properties": {
                    "area_m2": {
                        "type": "number",
                        "nullable": true
                    },
                    "bedrooms": {
                        "type": "integer",
                        "nullable": true
                    },
                    "bathrooms": {
                        "type": "integer",
                        "nullable": true
                    }
                }
            },
            "Property": {
                "type": "object",
                "required": [
                    "id",
                    "wp_id",
                    "url",
                    "title",
                    "status",
                    "category",
                    "amenities",
                    "city",
                    "neighborhood",
                    "prices",
                    "specs",
                    "images",
                    "date_published",
                    "last_modified"
                ],
                "properties": {
                    "id": {
                        "type": "string"
                    },
                    "wp_id": {
                        "type": "integer"
                    },
                    "url": {
                        "type": "string",
                        "format": "uri"
                    },
                    "title": {
                        "type": "string"
                    },
                    "description": {
                        "type": "string",
                        "nullable": true
                    },
                    "status": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/PropertyTerm"
                        }
                    },
                    "category": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/PropertyTerm"
                        }
                    },
                    "amenities": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/PropertyTerm"
                        }
                    },
                    "city": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/PropertyTerm"
                        }
                    },
                    "neighborhood": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/PropertyTerm"
                        }
                    },
                    "prices": {
                        "$ref": "#/components/schemas/PropertyPrices"
                    },
                    "specs": {
                        "$ref": "#/components/schemas/PropertySpecs"
                    },
                    "images": {
                        "type": "array",
                        "items": {
                            "type": "string",
                            "format": "uri"
                        }
                    },
                    "date_published": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "last_modified": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "content": {
                        "type": "string",
                        "nullable": true
                    }
                }
            },
            "Artigo": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer",
                        "description": "ID interno do post no WordPress.",
                        "example": 78400
                    },
                    "slug": {
                        "type": "string",
                        "description": "Slug do artigo (usado na URL).",
                        "example": "hilton-florianopolis-novo-hotel-no-floripa-airport-que-abre-em-2028"
                    },
                    "title": {
                        "type": "string",
                        "description": "Título do artigo, traduzido se disponível.",
                        "example": "Hilton Florianópolis: novo hotel no Floripa Airport que abre em 2028"
                    },
                    "url": {
                        "type": "string",
                        "format": "uri",
                        "description": "URL do artigo no idioma solicitado.",
                        "example": "https://luxuryhomefloripa.com.br/hilton-florianopolis-novo-hotel-no-floripa-airport-que-abre-em-2028/"
                    },
                    "canonical_url": {
                        "type": "string",
                        "format": "uri",
                        "description": "URL canônica do artigo em português.",
                        "example": "https://luxuryhomefloripa.com.br/hilton-florianopolis-novo-hotel-no-floripa-airport-que-abre-em-2028/"
                    },
                    "excerpt": {
                        "type": "string",
                        "description": "Resumo curto do artigo (até 40 palavras), sem HTML.",
                        "example": "A rede Hilton amplia sua presença no Brasil com um novo projeto em Florianópolis, ao lado do Floripa Airport."
                    },
                    "content_summary": {
                        "type": "string",
                        "description": "Resumo estendido do conteúdo (até 80 palavras), sem HTML.",
                        "example": "A rede Hilton está expandindo sua presença no Brasil com um empreendimento estratégico em Florianópolis..."
                    },
                    "date": {
                        "type": "string",
                        "format": "date-time",
                        "description": "Data de publicação (ISO 8601).",
                        "example": "2026-03-24T10:00:00+00:00"
                    },
                    "date_modified": {
                        "type": "string",
                        "format": "date-time",
                        "description": "Data da última modificação (ISO 8601).",
                        "example": "2026-03-24T12:30:00+00:00"
                    },
                    "reading_time_minutes": {
                        "type": "integer",
                        "description": "Tempo estimado de leitura em minutos.",
                        "example": 5
                    },
                    "thumbnail": {
                        "type": "object",
                        "nullable": true,
                        "description": "Imagem destacada do artigo.",
                        "properties": {
                            "url": {
                                "type": "string",
                                "format": "uri",
                                "example": "https://luxuryhomefloripa.com.br/wp-content/uploads/2026/03/Hilton-Garden-Inn-1170x921.jpg"
                            },
                            "width": {
                                "type": "integer",
                                "example": 1170
                            },
                            "height": {
                                "type": "integer",
                                "example": 921
                            },
                            "alt": {
                                "type": "string",
                                "example": "Hilton Florianópolis Floripa Airport"
                            }
                        }
                    },
                    "categorias": {
                        "type": "array",
                        "description": "Categorias editoriais do artigo.",
                        "items": {
                            "type": "object",
                            "properties": {
                                "slug": {
                                    "type": "string",
                                    "example": "economia"
                                },
                                "name": {
                                    "type": "string",
                                    "example": "Economia"
                                },
                                "url": {
                                    "type": "string",
                                    "format": "uri",
                                    "example": "https://luxuryhomefloripa.com.br/categoria/economia/"
                                }
                            }
                        }
                    },
                    "tags": {
                        "type": "array",
                        "description": "Tags do artigo.",
                        "items": {
                            "type": "object",
                            "properties": {
                                "slug": {
                                    "type": "string",
                                    "example": "jurere-internacional"
                                },
                                "name": {
                                    "type": "string",
                                    "example": "Jurerê Internacional"
                                }
                            }
                        }
                    },
                    "lang": {
                        "type": "string",
                        "description": "Idioma do conteúdo retornado.",
                        "example": "pt"
                    },
                    "lang_available": {
                        "type": "array",
                        "description": "Idiomas com tradução disponível para este artigo.",
                        "items": {
                            "type": "string"
                        },
                        "example": [
                            "pt",
                            "en",
                            "es"
                        ]
                    }
                }
            },
            "Problem": {
                "type": "object",
                "description": "Erro no formato RFC 9457 (Problem Details), com código estável e dica de correção.",
                "required": [
                    "type",
                    "title",
                    "status",
                    "code",
                    "detail"
                ],
                "properties": {
                    "type": {
                        "type": "string",
                        "format": "uri",
                        "description": "Link para a explicação do erro."
                    },
                    "title": {
                        "type": "string",
                        "example": "Não encontrado"
                    },
                    "status": {
                        "type": "integer",
                        "example": 404
                    },
                    "code": {
                        "type": "string",
                        "description": "Código estável, legível por máquina.",
                        "example": "property_not_found"
                    },
                    "detail": {
                        "type": "string",
                        "example": "Nenhum imóvel com o código 999999."
                    },
                    "hint": {
                        "type": "string",
                        "description": "O que fazer para resolver."
                    },
                    "docs": {
                        "type": "string",
                        "format": "uri"
                    },
                    "instance": {
                        "type": "string",
                        "description": "Caminho que gerou o erro."
                    },
                    "message": {
                        "type": "string",
                        "description": "Igual a detail (compatibilidade com o WordPress)."
                    }
                }
            }
        },
        "headers": {
            "RateLimit": {
                "description": "Cota restante (r) e segundos até zerar (t). draft-ietf-httpapi-ratelimit-headers.",
                "schema": {
                    "type": "string",
                    "example": "\"lhf\";r=599;t=42"
                }
            },
            "RateLimit-Policy": {
                "description": "Política de limite: q requisições a cada w segundos.",
                "schema": {
                    "type": "string",
                    "example": "\"lhf\";q=600;w=60"
                }
            },
            "X-RateLimit-Limit": {
                "schema": {
                    "type": "integer",
                    "example": 600
                }
            },
            "X-RateLimit-Remaining": {
                "schema": {
                    "type": "integer",
                    "example": 599
                }
            },
            "X-RateLimit-Reset": {
                "description": "Segundos até a cota zerar.",
                "schema": {
                    "type": "integer",
                    "example": 42
                }
            },
            "Retry-After": {
                "description": "Segundos a esperar antes de tentar de novo.",
                "schema": {
                    "type": "integer",
                    "example": 30
                }
            }
        },
        "responses": {
            "BadRequest": {
                "description": "Parâmetro inválido.",
                "headers": {
                    "RateLimit": {
                        "$ref": "#/components/headers/RateLimit"
                    },
                    "RateLimit-Policy": {
                        "$ref": "#/components/headers/RateLimit-Policy"
                    }
                },
                "content": {
                    "application/problem+json": {
                        "schema": {
                            "$ref": "#/components/schemas/Problem"
                        }
                    }
                }
            },
            "NotFound": {
                "description": "Recurso não encontrado.",
                "headers": {
                    "RateLimit": {
                        "$ref": "#/components/headers/RateLimit"
                    },
                    "RateLimit-Policy": {
                        "$ref": "#/components/headers/RateLimit-Policy"
                    }
                },
                "content": {
                    "application/problem+json": {
                        "schema": {
                            "$ref": "#/components/schemas/Problem"
                        }
                    }
                }
            },
            "TooManyRequests": {
                "description": "Limite de uso excedido.",
                "headers": {
                    "RateLimit": {
                        "$ref": "#/components/headers/RateLimit"
                    },
                    "RateLimit-Policy": {
                        "$ref": "#/components/headers/RateLimit-Policy"
                    },
                    "Retry-After": {
                        "$ref": "#/components/headers/Retry-After"
                    }
                },
                "content": {
                    "application/problem+json": {
                        "schema": {
                            "$ref": "#/components/schemas/Problem"
                        }
                    }
                }
            },
            "ServerError": {
                "description": "Erro interno.",
                "content": {
                    "application/problem+json": {
                        "schema": {
                            "$ref": "#/components/schemas/Problem"
                        }
                    }
                }
            }
        }
    },
    "externalDocs": {
        "description": "Documentação da Luxury Home Floripa API",
        "url": "https://luxuryhomefloripa.com.br/api/"
    }
}
