1. Início
  2. Developers
Developers

API pública do Lavandeira Living Apartments.

Consulte os apartamentos em JSON e submeta pedidos de informação sem autenticação. Especificação OpenAPI 3.1, limites de pedidos anunciados em cabeçalhos, erros em JSON e uma versão Markdown de cada página para agentes.

Recursos

Endpoints

MétodoCaminhooperationIdDescrição
GET/apiapiIndexÍndice: versão, ligações, endpoints e pricing (preços de lançamento por duração e categorias)
GET/api/moradaslistPlacesAs duas moradas (Rua Chã 78-82 e Rua dos Caldeireiros 180) com unidades, telefone, check-in e check-out
GET/api/apartamentoslistApartmentsOs doze apartamentos com category e preço por mês; filtros building (rua-cha, travessa), typology (T0, T1) e category (standard, superior, premium)
GET/api/apartamentos/{slug}getApartmentUm apartamento, ex.: apartamento-c
POST/api/pedidoscreateRequestSubmeter um pedido de informações, disponibilidade ou contacto

Não há chaves de API nem ambiente de testes: a leitura é pública e os pedidos são reais, chegam à equipa e são respondidos por email. Se estiver a testar, diga-o no campo mensagem.

Exemplos

curl -s https://lavandeira.nexiagent.com/api/apartamentos
curl -s https://lavandeira.nexiagent.com/api/apartamentos/apartamento-l
curl -s -X POST https://lavandeira.nexiagent.com/api/pedidos \
  -H 'Content-Type: application/json' \
  -d '{"tipo":"disponibilidade","nome":"Maria Silva","email":"[email protected]",
       "entrada":"2026-10-01","duracao":"9 meses","pessoas":2,
       "apartamento":"Apartamento L (T1, rés-do-chão, Travessa da Rua Chã)"}'

Resposta de sucesso: {"ok":true,"id":"<uuid>","emailed":false}.

Erros

Todos os erros são JSON com a mesma forma:

{
  "ok": false,
  "error": "Email inválido",
  "code": "validation_error",
  "status": 400,
  "field": "email",
  "hint": "Indique um email válido, ex.: [email protected]; é para onde respondemos.",
  "docs": "https://lavandeira.nexiagent.com/developers#erros"
}
codestatusQuando
invalid_json400O corpo não é JSON válido
validation_error400Um campo é inválido; field diz qual
rate_limited429Limite excedido; Retry-After em segundos
not_found404Endpoint ou apartamento inexistente
method_not_allowed405Método errado; cabeçalho Allow
not_acceptable406Nenhuma representação aceitável (páginas HTML/Markdown)
internal_error500Falha do servidor

Limites de pedidos

Cada resposta da API traz os cabeçalhos RateLimit-Policy e RateLimit (campos estruturados do draft IETF ratelimit-headers) e, por compatibilidade, RateLimit-Limit, RateLimit-Remaining e RateLimit-Reset.

  • Leitura (GET): política leitura, 120 pedidos por minuto por IP.
  • Escrita (POST /api/pedidos): política pedidos, 6 pedidos por 10 minutos por IP. Ao exceder, 429 com Retry-After.
RateLimit-Policy: "pedidos";q=6;w=600
RateLimit: "pedidos";r=5;t=600
RateLimit-Limit: 6
RateLimit-Remaining: 5
RateLimit-Reset: 600

Markdown para agentes

Todas as páginas HTML têm uma representação Markdown no mesmo URL. Envie Accept: text/markdown ou acrescente .md ao caminho. As respostas incluem Vary: Accept e um cabeçalho Link com rel="alternate". Um pedido que só aceite tipos que não produzimos recebe 406 com a lista das representações disponíveis.

curl -sI -H "Accept: text/markdown" https://lavandeira.nexiagent.com/apartamentos
curl -s https://lavandeira.nexiagent.com/apartamentos/apartamento-c.md

Rastreadores e agentes de IA

O robots.txt permite explicitamente os agentes de IA conhecidos (GPTBot, ChatGPT-User, OAI-SearchBot, ClaudeBot, Claude-User, PerplexityBot, Google-Extended, Applebot-Extended, DeepSeekBot, meta-externalagent, Amazonbot, DuckAssistBot, CCBot, entre outros). Identifique o agente no User-Agent; o site está atrás da Cloudflare e pedidos sem identificação podem ser desafiados.

Dados e privacidade

Os endpoints de leitura devolvem apenas informação publicada no site. Os pedidos submetidos pela API são guardados e tratados como os do formulário, nos termos da política de privacidade. Áreas e tipologias vêm do projeto de arquitetura e estão sujeitas a confirmação final.