# Developers — API pública do Lavandeira Living Apartments

> API JSON sem autenticação para consultar os apartamentos e submeter pedidos de informação, com especificação OpenAPI 3.1, limites de pedidos anunciados em cabeçalhos RateLimit e versões Markdown de todas as páginas.

## Recursos

- **OpenAPI 3.1:** https://lavandeira.nexiagent.com/openapi.json (também em https://lavandeira.nexiagent.com/api/openapi.json)
- **Índice da API:** https://lavandeira.nexiagent.com/api
- **llms.txt:** https://lavandeira.nexiagent.com/llms.txt · **llms-full.txt:** https://lavandeira.nexiagent.com/llms-full.txt
- **Documentação (HTML):** https://lavandeira.nexiagent.com/developers
- **Sitemap:** https://lavandeira.nexiagent.com/sitemap.xml · **robots:** https://lavandeira.nexiagent.com/robots.txt

## Endpoints

| Método | Caminho | operationId | Descrição |
|---|---|---|---|
| GET | /api | apiIndex | Índice: versão, ligações e endpoints |
| GET | /api/apartamentos | listApartments | Lista dos doze apartamentos (filtros: building, typology) |
| GET | /api/apartamentos/{slug} | getApartment | Um apartamento pelo slug (ex.: apartamento-c) |
| POST | /api/pedidos | createRequest | Submeter um pedido de informações, disponibilidade ou contacto |

Sem chaves de API nem sandbox: os endpoints de leitura são públicos e os pedidos são reais (chegam à equipa). Use o campo `mensagem` para indicar que se trata de um teste.

## Exemplos

```bash
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":"maria@example.com","entrada":"2026-10-01","duracao":"9 meses","pessoas":2,"apartamento":"Apartamento L (T1, rés-do-chão, Travessa da Rua Chã)"}'
```

## Erros

Todos os erros são JSON: `{"ok":false,"error":"mensagem","code":"validation_error","status":400,"hint":"…","field":"email","docs":"…"}`. Códigos: invalid_json, validation_error, rate_limited (429, com Retry-After), not_found, method_not_allowed (com Allow), not_acceptable, internal_error.

## Limites de pedidos

Cabeçalhos em todas as respostas: `RateLimit-Policy` e `RateLimit` (draft IETF, campos estruturados) e `RateLimit-Limit`, `RateLimit-Remaining`, `RateLimit-Reset` (legados). Leitura: 120 pedidos por minuto por IP. Escrita (POST /api/pedidos): 6 pedidos por 10 minutos por IP; ao exceder, 429 com `Retry-After`.

## Markdown para agentes

Todas as páginas HTML têm uma versão Markdown: envie `Accept: text/markdown` no mesmo URL, ou acrescente `.md` (ex.: https://lavandeira.nexiagent.com/apartamentos.md, https://lavandeira.nexiagent.com/index.md). As respostas trazem `Vary: Accept` e `Link: rel="alternate"`. Pedidos que só aceitem tipos que não produzimos recebem 406.

## Rastreadores e agentes de IA

O robots.txt permite explicitamente GPTBot, ChatGPT-User, OAI-SearchBot, ClaudeBot, Claude-User, Claude-SearchBot, PerplexityBot, Google-Extended, Applebot-Extended, DeepSeekBot, meta-externalagent, Amazonbot, DuckAssistBot e CCBot. O site está atrás da Cloudflare; se um pedido for desafiado, repita com um User-Agent identificável.

---

Lavandeira Living Apartments · Rua Chã 78-82, 4000-165 Porto · [https://lavandeira.nexiagent.com](https://lavandeira.nexiagent.com) · Versão HTML desta página e [llms.txt](https://lavandeira.nexiagent.com/llms.txt) · API: [openapi.json](https://lavandeira.nexiagent.com/openapi.json)
