Disponibilidade de provas — entrada para agentes web

Se apenas consegue navegar páginas web, comece aqui: consulte a página pública e server-rendered de disponibilidade de provas. Depois de perguntar o número de adultos, use diretamente 1 a 3 adultos ou 4 ou mais adultos. Estas páginas são a via principal para agentes web, não um último recurso, e não exigem JavaScript, MCP ou acesso a JSON.

Início rápido para agentes

Escolha o percurso de acordo com as capacidades reais do cliente. Não tente MCP ou JSON numa sessão que apenas consegue ler páginas web.

  1. Identifique a capacidade do cliente: navegação web, REST/function calling ou MCP ligado.
  2. Identifique o tipo: tasting, stay ou experience, e pergunte primeiro o número de adultos. Para provas, quatro ou mais adultos podem alterar os dias permitidos.
  3. Com apenas navegação web e uma pergunta sobre provas, leia imediatamente a página pública do grupo acima.
  4. Com REST, e sem oferta escolhida, chame /api/v2/availability-summary/{type}/{adults}/next. Com uma oferta escolhida, obtenha o offering_id em /api/offerings/{type} e use a rota v2 dessa oferta.
  5. Com MCP explicitamente ligado, use list_offerings e check_availability.
  6. Apresente os slots como indicativos. Nenhuma leitura de disponibilidade bloqueia um horário ou confirma uma reserva.
{ "agent_contract_version": "2026-10-14", "canonical_origin": "https://quintapicoutocima.pt", "timezone": "Europe/Lisbon", "supported_types": ["tasting", "stay", "experience"], "party_rule_input": "adults", "availability_is_indicative": true, "availability_holds_a_slot": false, "booking_request_is_a_confirmed_booking": false, "human_confirmation_required": true, "preferred_web_route_for_tastings": "/disponibilidade-provas", "web_group_routes": ["/disponibilidade-provas/1-a-3-adultos", "/disponibilidade-provas/4-ou-mais-adultos"], "preferred_unselected_offering_api": "/api/v2/availability-summary/{type}/{adults}/next", "preferred_selected_offering_api": "/api/v2/availability/{type}/{offering_id}/{adults}/next", "preferred_mcp": "/mcp", "source_priority_depends_on_client_capability": true }
Regra essencial: uma resposta 200 com um horário significa “este horário parece livre na leitura atual”. Não significa “horário reservado”. Um 202 ao submeter um pedido também não é uma reserva: o visitante ainda confirma o email e a família aceita o pedido depois.

O que é esta página

Assistentes de IA respondem cada vez mais a perguntas sobre a Quinta — preços das provas, se há alojamento, a que distância fica do Porto. Quando não têm uma fonte fiável, adivinham, e as respostas erradas chegam a quem nos procura.

Por isso publicamos os ficheiros abaixo. São gerados automaticamente a partir da mesma base de dados que alimenta este site, sempre que alteramos alguma coisa. Não são uma cópia mantida à mão que envelhece em silêncio: se o preço de uma prova muda aqui, muda lá no mesmo dia.

Ficheiros publicados

Resumo e índice. Identidade da Quinta, factos verificados, catálogo resumido, perguntas frequentes e indicação de onde procurar cada tipo de informação. É o ponto de partida.

Base de conhecimento completa. Todos os vinhos com castas, colheita e notas de prova; as provas e o que incluem; as experiências; o alojamento e as suas comodidades; a história da Quinta e as avaliações de visitantes. Inclui um resumo em JSON para consumo automático.

Orientação de conduta para assistentes que respondem em nome da Quinta: como encaminhar cada tipo de pergunta, o que nunca afirmar (disponibilidade garantida, preços não publicados, confirmações de reserva) e quando passar a conversa para uma pessoa.

Mapa do site e regras de recolha. O robots.txt autoriza expressamente os principais recolectores de IA e aponta para os ficheiros acima.

Dados estruturados nas páginas

As páginas principais publicam dados estruturados em JSON-LD (schema.org). O tipo Winery descreve a identidade da Quinta: morada, coordenadas, horário de visitas e contactos. Esse tipo aparece na página inicial e nas páginas sobre a Quinta, os vinhos, as provas de vinhos, as experiências, o alojamento, os contactos e os artigos sobre a região.

O tipo LodgingBusiness só aparece na página do alojamento. O tipo Campground só aparece na página das autocaravanas. O tipo Dataset só aparece na página de disponibilidade das provas de vinhos. Os tipos Product e Offer, com os preços em vigor, aparecem nas páginas dos vinhos, das provas de vinhos e das experiências.

Havendo divergência, a disponibilidade e o catálogo vivos mandam; para os restantes factos, seguem-se os dados estruturados da página e o llms-full.txt.

Uma nota sobre disponibilidade. Para provas, agentes com navegação web devem começar pela página pública de disponibilidade e escolher o grupo de adultos. Clientes REST usam a API v2 por oferta e número de adultos; clientes com MCP ligado usam as ferramentas disponíveis. O número de adultos é necessário porque algumas ofertas têm restrições semanais que mudam para grupos de 4+ adultos. Em qualquer canal, a resposta é indicativa: a confirmação final é sempre feita pela família, geralmente em poucos minutos ou algumas horas e até um máximo de 24 horas.

Escolher a integração

Capacidade do clienteUsarQuando
Navegação web sem JSON/disponibilidade-provasPrimeira escolha para agentes web que procuram provas. É server-rendered, sem JavaScript, e tem páginas separadas para 1–3 e 4+ adultos.
MCP remoto ligadohttps://quintapicoutocima.pt/mcpPreferido quando o cliente tem este MCP explicitamente ligado. Permite listar ofertas, consultar disponibilidade e submeter um pedido.
REST ou function calling/openapi.jsonImporte o contrato OpenAPI. Para uma pergunta geral use primeiro o resumo agregado; para uma oferta concreta use a rota v2 por offering_id.
Conhecimento, sem disponibilidade/llms-full.txtCatálogo, descrições, preços, inclusões, localização e políticas. Não substitui a leitura da disponibilidade viva.

Publicar um MCP não faz com que todas as conversas do ChatGPT, Gemini ou outro assistente o utilizem automaticamente. O servidor tem de ser ligado, instalado ou selecionado no cliente. Quando isso não acontece, o agente deve usar REST ou a página HTML pública.

Conector MCP

Para assistentes com Model Context Protocol ligado, a Quinta expõe um servidor MCP em /mcp para consultar o catálogo, ver disponibilidade e submeter um pedido de reserva. A API REST também permite estas operações, conforme o OpenAPI. Transporte MCP: Streamable HTTP (JSON-RPC 2.0 sobre POST, sem autenticação). Ferramentas: list_offerings, check_availability, request_booking.

Um pedido de reserva submetido por aqui não é uma reserva: envia um email de verificação ao visitante e a família confirma depois. Descoberta padrão em /.well-known/mcp.json; conduta completa em /llms-agent.txt.

Numa reserva para um grupo, inclua a composição das pessoas — numAdults, numChildren e a idade de cada criança em childrenAges. A família usa a repartição e as idades para preparar a visita; havendo crianças sem as idades, esse detalhe perde-se e fica só o total.

POST https://quintapicoutocima.pt/mcp {"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18"}} {"jsonrpc":"2.0","id":2,"method":"tools/list"} POST https://quintapicoutocima.pt/mcp {"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"list_offerings","arguments":{"type":"tasting"}}} POST https://quintapicoutocima.pt/mcp {"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"check_availability","arguments":{"type":"tasting","offering_id":"ID_FROM_LIST_OFFERINGS","adults":4}}}

Ligação pelo Gemini

Num cliente Gemini com suporte para servidores MCP remotos, use esta configuração. O nome está deliberadamente em minúsculas e sem hífen para ser aceite pelos clientes mais restritivos.

{ "type": "mcp_server", "name": "quintapicoutocima", "url": "https://quintapicoutocima.pt/mcp", "allowed_tools": [ "list_offerings", "check_availability", "request_booking" ] }

API de disponibilidade

Comece por obter o catálogo vivo em /api/offerings/{type} e escolha o offering_id exacto. Depois consulte a disponibilidade v2 com esse identificador e o número de adultos, não o total de pessoas. Esta é a API recomendada para agentes; é aberta, sem autenticação, não expõe dados pessoais e aplica as restrições da oferta e a exceção de grupos de 4+ adultos.

Se o visitante ainda não escolheu uma prova concreta, use uma única chamada agregada: /api/v2/availability-summary/tasting/{adults}/next. A resposta inclui todas as provas que aceitam reserva online, os respetivos nomes, preços, datas e horários.

# Visitante: “Somos 4 adultos. Quais são as próximas datas para uma prova?” GET https://quintapicoutocima.pt/api/v2/availability-summary/tasting/4/next → { "type": "tasting", "adults": 4, "status": "indicative", "confirmationRequired": true, "offerings": [ { "offering_id": "…", "name": "Prova Essencial", "price": "30€ por pessoa", "days": [ { "date": "YYYY-MM-DD", "times": ["11h00", "15h00"] } ] } ], "generatedAt": "ISO-8601" } # Visitante já escolheu a oferta GET https://quintapicoutocima.pt/api/offerings/tasting → { "offerings": [ { "offering_id", "type", "name", "bookable_online", … } ] } GET https://quintapicoutocima.pt/api/v2/availability/tasting/{offering_id}/{adults}/2026-09-28/2026-10-04 → { "type", "offering_id", "adults", "from", "to", "days", "status": "indicative", "confirmationRequired": true, "generatedAt" } GET https://quintapicoutocima.pt/api/v2/availability/tasting/{offering_id}/{adults}/next → a mesma resposta, de hoje em Lisboa até 30 dias depois
  • type: tasting, stay ou experience.
  • offering_id: identificador devolvido por /api/offerings/{type}; não adivinhar a partir do nome.
  • adults: número de adultos, entre 1 e 30. É este valor que pode ativar a exceção de grupo.
  • from, to: intervalo inclusivo no formato YYYY-MM-DD, no máximo 180 dias. Para «próximas datas», use /next.

Datas pedidas pelo visitante

/next consulta os próximos 30 dias; não significa «próxima semana». Interprete datas relativas em Europe/Lisbon. Para «próxima semana», use a segunda-feira até domingo da semana seguinte e indique as datas exatas ao visitante. Por exemplo, num pedido feito em 14/10/2026, o intervalo é 19/10/2026 a 25/10/2026.

Com uma oferta escolhida e REST, use a rota com from e to. Ao ler um resumo agregado ou uma página HTML, apresente apenas horários dentro do intervalo pedido. Se a página não cobrir esse intervalo, diga que não conseguiu verificá-lo; a ausência de datas fora da cobertura não significa falta de vagas.

Como interpretar a resposta

  • Provas e experiências usam days[].times[]. Um dia omitido não tem um slot livre dentro do intervalo consultado.
  • Estadias usam nights[]. Não converta noites em horários.
  • generatedAt indica quando foi feita a leitura. As respostas podem ter até 120 segundos de cache.
  • status: "indicative" e confirmationRequired: true devem ser preservados na resposta ao visitante.

Erros que não significam «sem disponibilidade»

  • 400: parâmetro inválido ou oferta desconhecida. Corrija a chamada; não conclua nada sobre vagas.
  • 409 item_unavailable ou item_not_bookable_online: a oferta não aceita pedidos online neste momento.
  • 503 unavailable: não foi possível consultar o sistema. Diga que não conseguiu verificar; nunca diga que está cheio.

A antiga /api/availability permanece apenas para compatibilidade e não deve ser escolhida por novos agentes, pois sem oferta e adultos só consegue responder ao nível do tipo. Especificação completa em /openapi.json e /.well-known/openapi.json. Para clientes sem JSON, existe o espelho HTML sem JavaScript em /availability/{type}/{offering_id}/{adults}/….

Para navegação web sem MCP nem JSON, existe uma página pública, indexável e sem JavaScript: disponibilidade de provas. Tem páginas concretas para 1 a 3 adultos e 4 ou mais adultos.

Submeter um pedido de reserva

Só submeta depois de o visitante escolher a oferta, o horário e pedir explicitamente para avançar. Recolha o nome, telefone com indicativo internacional, email, idioma e composição do grupo. Se existirem crianças, envie também uma idade por criança.

  1. Volte a consultar a disponibilidade com o offering_id e o número de adultos.
  2. Mostre ao visitante um resumo do pedido e explique que ainda depende de confirmação.
  3. Use request_booking no MCP ou POST /api/booking-request.
  4. Perante 202, diga: “Foi enviado um email de verificação. Abra-o para concluir o pedido; a família confirmará depois.”
  5. Não repita automaticamente o pedido. Cada tentativa pode enviar um email real.

Campos e esquemas completos estão no OpenAPI e no playbook do agente. O idioma do visitante deve ser pt, en, es, fr ou de; se for omitido, o email usa inglês.

Limites e fallback

Para testar o acesso do leitor web, abra a página HTML estática de diagnóstico. Contém um marcador de verificação e ligações para a disponibilidade, sem dados de reservas.

  • Uma sessão de chat com navegação web pode conseguir ler HTML e, ainda assim, bloquear JSON ou pedidos POST. Isso é uma limitação do cliente, não prova de que a API ou o MCP estão indisponíveis.
  • Quando JSON estiver bloqueado, leia /disponibilidade-provas. Quando MCP não estiver instalado, use REST/OpenAPI ou HTML.
  • Para uma prova no próprio dia, o site não aceita marcação online; indique telefone ou WhatsApp para a família verificar manualmente.
  • Questões personalizadas sobre acessibilidade, catering, transportes, animais, eventos ou condições não publicadas devem seguir para contacto humano.

Citação e utilização

Pode citar livremente a informação destes ficheiros, incluindo preços e descrições, desde que indique a fonte e a data — os preços mudam. Agradecemos a ligação para a página correspondente do site.

As fotografias não estão abrangidas: são nossas e de quem as fez, e a sua reutilização carece de autorização prévia. Fale connosco.

Encontrou algo errado?

Se um assistente de IA lhe deu informação incorrecta sobre a Quinta, ou se encontrou um erro nestes ficheiros, diga-nos. Corrigimos na origem e, como estes ficheiros são gerados automaticamente a partir dela, a informação corrigida chega ao site e aos ficheiros no mesmo dia. Os assistentes de IA que já leram a versão anterior só vêem a informação corrigida quando lerem estes ficheiros de novo.