{"openapi":"3.1.0","info":{"title":"Ankora Engenharia — API pública do site","version":"1.0.0","summary":"Única rota pública: desafio anti-spam (ALTCHA) do formulário de contato.","description":"A Ankora Engenharia é uma empresa de engenharia civil (Porto Alegre/RS, atuação em todo o Brasil). Este site não expõe API de negócio: orçamentos, laudos e contratos passam por atendimento humano (https://ankora.eng.br/contato, WhatsApp https://wa.me/555132486716, e-mail contato@ankora.eng.br). O único endpoint público é o desafio criptográfico usado pelo formulário de contato para bloquear spam. Conteúdo do site em Markdown: envie Accept: text/markdown a qualquer página ou use o sufixo .md; índice em https://ankora.eng.br/llms.txt.","contact":{"name":"Ankora Engenharia","email":"contato@ankora.eng.br","url":"https://ankora.eng.br/contato"},"x-versioning":{"policy":"Sem versão na URL: a rota /api/altcha/challenge é estável. Mudanças incompatíveis serão publicadas em nova rota e a antiga responderá com os cabeçalhos Deprecation e Sunset (RFC 9745/8594) por no mínimo 90 dias antes de ser removida; o changelog fica em /desenvolvedores.","current":"1.0.0"},"x-rate-limit":{"policy":"Uso razoável: o desafio é barato e sem estado, mas a proteção anti-abuso da Cloudflare pode responder 429 com Retry-After a rajadas automatizadas. Não há cota por chave (não há chaves)."},"license":{"name":"Uso restrito ao formulário do site","identifier":"LicenseRef-Proprietary"}},"servers":[{"url":"https://ankora.eng.br","description":"Produção"}],"tags":[{"name":"anti-spam","description":"Proteção do formulário de contato (ALTCHA, prova de trabalho no cliente)."}],"paths":{"/api/altcha/challenge":{"get":{"operationId":"getAltchaChallenge","tags":["anti-spam"],"summary":"Gera um desafio ALTCHA","description":"Devolve um desafio de prova de trabalho (SHA-256) que o widget ALTCHA resolve no navegador antes de enviar o formulário de contato. Sem autenticação. Cada desafio é de uso único e expira; não cacheie. Não há endpoint público para enviar o formulário: o envio é uma Server Action do Next.js acionada pela página /contato.","responses":{"200":{"description":"Desafio gerado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AltchaChallenge"}}}},"405":{"description":"Método não permitido (só GET).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rajada bloqueada pela proteção anti-abuso; aguarde o Retry-After.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Segundos até tentar de novo."}}},"500":{"description":"Falha ao gerar o desafio.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Anti-spam não configurado no servidor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"AltchaChallenge":{"type":"object","description":"Payload padrão do ALTCHA (https://altcha.org/docs/v2/server-integration/).","required":["algorithm","challenge","salt","signature","maxnumber"],"properties":{"algorithm":{"type":"string","enum":["SHA-256"],"description":"Algoritmo de hash."},"challenge":{"type":"string","description":"Hash hexadecimal a ser reproduzido pelo cliente."},"salt":{"type":"string","description":"Sal aleatório; pode incluir parâmetros de expiração."},"signature":{"type":"string","description":"Assinatura HMAC do desafio, verificada no servidor."},"maxnumber":{"type":"integer","minimum":1,"description":"Limite superior do número a ser encontrado."}}},"Error":{"type":"object","description":"Erro estruturado devolvido por toda rota /api/*.","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Código estável (ex.: not_found, method_not_allowed, captcha_not_configured)."},"message":{"type":"string","description":"Explicação legível."},"hint":{"type":"string","description":"Como resolver ou onde procurar."},"docs":{"type":"string","format":"uri","description":"Documentação relacionada."}}}}}}},"externalDocs":{"description":"Recursos para desenvolvedores e agentes","url":"https://ankora.eng.br/desenvolvedores"}}