{"openapi":"3.1.1","info":{"title":"KnoVet — conteúdo público e API de leitura","version":"1.0.0","description":"Referência do conteúdo público da KnoVet e de duas consultas JSON existentes na plataforma. Estas operações não exigem autenticação. Cadastros, solicitações de atendimento e operações dos portais não fazem parte deste contrato.","termsOfService":"https://www.knovet.com/termos","contact":{"name":"KnoVet","url":"https://www.knovet.com/contato","email":"administradorknovet@gmail.com"}},"servers":[{"url":"https://www.knovet.com","description":"Site público da KnoVet"}],"security":[],"externalDocs":{"description":"Documentação para desenvolvedores e agentes","url":"https://www.knovet.com/docs"},"tags":[{"name":"Conteúdo público","description":"Páginas e arquivos para descoberta e leitura."},{"name":"API de leitura","description":"Consultas JSON existentes, sem autenticação e sem alteração de dados."}],"paths":{"/":{"get":{"operationId":"readHomepage","summary":"Ler a apresentação da KnoVet","description":"Use Accept: text/markdown para Markdown ou Accept: text/html para HTML. A negociação considera os pesos q do cabeçalho Accept; a ausência de preferência mantém HTML. A resposta varia conforme Accept. Não é necessário executar JavaScript para ler o conteúdo principal.","tags":["Conteúdo público"],"responses":{"200":{"description":"Apresentação da plataforma no formato negociado.","headers":{"Vary":{"description":"Inclui Accept na representação Markdown; HTML inclui os cabeçalhos de navegação do Next.js.","schema":{"type":"string"}},"Cache-Control":{"description":"private, no-store: as representações negociadas não são armazenadas em caches HTTP.","schema":{"type":"string"}}},"content":{"text/html":{"schema":{"type":"string","minLength":1}},"text/markdown":{"schema":{"type":"string","minLength":1}}}},"406":{"description":"O cabeçalho Accept não permite HTML nem Markdown."}}}},"/index.md":{"get":{"operationId":"readHomepageMarkdown","summary":"Ler a apresentação da KnoVet em Markdown","tags":["Conteúdo público"],"responses":{"200":{"description":"Ler a apresentação da KnoVet em Markdown","content":{"text/markdown":{"schema":{"type":"string","minLength":1}}}}}}},"/llms.txt":{"get":{"operationId":"readAgentGuide","summary":"Descobrir o conteúdo público da KnoVet","tags":["Conteúdo público"],"responses":{"200":{"description":"Descobrir o conteúdo público da KnoVet","content":{"text/plain":{"schema":{"type":"string","minLength":1}}}}}}},"/robots.txt":{"get":{"operationId":"readCrawlPolicy","summary":"Consultar as regras de rastreamento do site","tags":["Conteúdo público"],"responses":{"200":{"description":"Consultar as regras de rastreamento do site","content":{"text/plain":{"schema":{"type":"string","minLength":1}}}}}}},"/sitemap.xml":{"get":{"operationId":"readSitemap","summary":"Descobrir as URLs canônicas publicadas","tags":["Conteúdo público"],"responses":{"200":{"description":"Descobrir as URLs canônicas publicadas","content":{"application/xml":{"schema":{"type":"string","minLength":1}}}}}}},"/openapi.json":{"get":{"operationId":"readOpenApi","summary":"Ler esta especificação OpenAPI","tags":["Conteúdo público"],"responses":{"200":{"description":"Documento OpenAPI 3.1.1 em JSON.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/v1/landing/partner-index":{"servers":[{"url":"https://knovet-backend.vercel.app","description":"API pública da KnoVet"}],"get":{"operationId":"listPublicPartnerIndex","summary":"Listar o índice público de parceiros ativos","description":"Retorna slug, categoria, cidade, UF, bairro e elegibilidade para coleções geográficas. Não aceita filtros nem paginação. O índice não informa disponibilidade de agenda.","tags":["API de leitura"],"responses":{"200":{"description":"Índice de parceiros; data pode ser uma lista vazia.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerIndexResponse"}}}},"500":{"$ref":"#/components/responses/BackendError"}}}},"/api/v1/landing/stats":{"servers":[{"url":"https://knovet-backend.vercel.app","description":"API pública da KnoVet"}],"get":{"operationId":"readPublicStats","summary":"Consultar indicadores agregados da plataforma","description":"Retorna a quantidade de parceiros ativos e de pets distintos em solicitações não canceladas. Não retorna dados pessoais nem confirma a realização de consultas. Os valores podem diferir dos números de apresentação da homepage.","tags":["API de leitura"],"responses":{"200":{"description":"Contagens atuais calculadas pela plataforma.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatsResponse"}}}},"500":{"$ref":"#/components/responses/BackendError"}}}}},"components":{"schemas":{"PartnerIndexResponse":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PartnerIndexEntry"}}}},"PartnerIndexEntry":{"type":"object","required":["slug","type","city","state","neighborhood","directoryEligible"],"properties":{"slug":{"type":"string","description":"Identificador público do perfil do parceiro."},"type":{"type":"string","description":"Categoria cadastrada, por exemplo clinic, hospital, petshop ou clinic_petshop."},"city":{"type":"string"},"state":{"type":"string","description":"UF cadastrada."},"neighborhood":{"type":["string","null"]},"directoryEligible":{"type":"boolean","description":"Se a unidade tem os dados necessários para contar nas coleções geográficas."}}},"StatsResponse":{"type":"object","required":["data"],"properties":{"data":{"type":"object","required":["activePartnersCount","petsScheduledCount"],"properties":{"activePartnersCount":{"type":"integer","minimum":0},"petsScheduledCount":{"type":"integer","minimum":0}}}}},"BackendError":{"type":"object","required":["error","message","requestId"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}},"responses":{"BackendError":{"description":"Falha ao consultar os dados. Aguarde antes de tentar novamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackendError"}}}}}}}