{"openapi":"3.1.0","jsonSchemaDialect":"https://json-schema.org/draft/2020-12/schema","info":{"title":"AnovaGrowth Public Tool API","version":"1.0.0","description":"A small public function-calling surface for anonymous AnovaGrowth tools and machine-readable discovery. The four tool operations inspect public input only, do not require credentials, and return JSON. Read each operation schema before calling it.","contact":{"name":"AnovaGrowth","url":"https://anovagrowth.com/contact"}},"servers":[{"url":"https://anovagrowth.com","description":"Production"}],"tags":[{"name":"Discovery","description":"Machine-readable API discovery resources."},{"name":"Public tools","description":"Anonymous tools that inspect public websites or a bounded conversation."}],"security":[],"paths":{"/openapi.json":{"get":{"tags":["Discovery"],"summary":"Get this OpenAPI document","description":"Returns the current OpenAPI 3.1 document so an agent can choose a documented operation and validate its request and response schemas before making a call.","operationId":"getOpenApiDocument","responses":{"200":{"description":"The current OpenAPI document.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenApiDocumentResponse"}}}},"500":{"description":"The server could not complete the operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolErrorResponse"}}}}}}},"/agents.json":{"get":{"tags":["Discovery"],"summary":"Get the AnovaGrowth agent manifest","description":"Returns the public capability inventory, service links, and machine-readable resources used to decide whether AnovaGrowth is relevant to a business workflow.","operationId":"getAgentManifest","responses":{"200":{"description":"The current AnovaGrowth agent manifest.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentManifestResponse"}}}},"500":{"description":"The server could not complete the operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolErrorResponse"}}}}}}},"/api/agent-chat":{"post":{"tags":["Public tools"],"summary":"Continue the public agent demo conversation","description":"Generates a short plain-text reply for the AnovaGrowth agent demo. It has no access to private systems and does not perform external actions. The server may return a safe demo fallback when a model is unavailable.","operationId":"continueAgentDemoConversation","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentChatRequest"}}}},"responses":{"200":{"description":"A reply and the model or fallback used.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentChatResponse"}}}},"400":{"description":"The request is invalid or required input is missing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolErrorResponse"}}}},"415":{"description":"The request must use application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolErrorResponse"}}}}}}},"/api/ai-visibility":{"post":{"tags":["Public tools"],"summary":"Scan a public website for AI visibility","description":"Runs a deterministic scan of a public website URL and returns crawler access, machine-readable content, and recommendation findings. URL-only calls are anonymous. The optional name and email fields support the browser lead flow and, when both are supplied, can forward the report to CRM and notification webhook systems.","operationId":"scanPublicWebsiteAiVisibility","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AiVisibilityRequest"}}}},"responses":{"200":{"description":"The AI visibility report.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VisibilityReportResponse"}}}},"400":{"description":"The request is invalid or required input is missing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolErrorResponse"}}}},"415":{"description":"The request must use application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolErrorResponse"}}}},"422":{"description":"The public target could not be processed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolErrorResponse"}}}},"500":{"description":"The server could not complete the operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolErrorResponse"}}}}}}},"/api/rank-check":{"post":{"tags":["Public tools"],"summary":"Check a public website keyword ranking","description":"Checks a public domain against the returned search window for one keyword and returns the observed position, competitors, and evidence-based improvement tips. URL and keyword calls are anonymous. The optional name and email fields support the browser lead flow and, when both are supplied, can send a report and forward lead details to CRM and notification webhook systems.","operationId":"checkPublicWebsiteRanking","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RankCheckRequest"}}}},"responses":{"200":{"description":"The ranking result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RankCheckResponse"}}}},"400":{"description":"The request is invalid or required input is missing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolErrorResponse"}}}},"415":{"description":"The request must use application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolErrorResponse"}}}},"500":{"description":"The server could not complete the operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolErrorResponse"}}}}}}},"/api/stack-scout":{"post":{"tags":["Public tools"],"summary":"Scan a public website technology stack","description":"Runs a deterministic technology scan against a public website URL and returns detected technologies, evidence, a trace, and a first-build hypothesis. Private and local targets are rejected.","operationId":"scanPublicWebsiteTechnologyStack","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicUrlRequest"}}}},"responses":{"200":{"description":"The technology stack report.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StackScoutResponse"}}}},"400":{"description":"The request is invalid or required input is missing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolErrorResponse"}}}},"415":{"description":"The request must use application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolErrorResponse"}}}},"422":{"description":"The public target could not be processed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolErrorResponse"}}}},"500":{"description":"The server could not complete the operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolErrorResponse"}}}}}}}},"components":{"schemas":{"ToolErrorResponse":{"type":"object","description":"Structured error returned by a documented public tool.","required":["error","code","message","resolution"],"properties":{"error":{"type":"string","description":"Legacy display-safe error text."},"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Human-readable explanation of the failure."},"resolution":{"type":"string","description":"Concrete action the caller can take to recover."}},"additionalProperties":false},"PublicUrlRequest":{"type":"object","description":"Anonymous public-tool request for a public URL. This operation does not accept lead fields or perform CRM, email, or webhook side effects.","required":["url"],"properties":{"url":{"type":"string","format":"uri","maxLength":2048,"description":"A publicly reachable HTTP or HTTPS website URL."}},"additionalProperties":false},"AiVisibilityRequest":{"type":"object","description":"Public URL scan request. URL-only calls are anonymous. Supplying both optional name and email enables the browser lead flow, which can forward the report to CRM and notification webhook systems.","required":["url"],"properties":{"url":{"type":"string","format":"uri","maxLength":2048,"description":"A publicly reachable HTTP or HTTPS website URL."},"name":{"type":"string","minLength":1,"maxLength":200,"description":"Optional lead name for the browser capture flow."},"email":{"type":"string","format":"email","maxLength":254,"description":"Optional lead email for the browser capture flow."}},"additionalProperties":false},"AgentChatRequest":{"type":"object","description":"Anonymous demo conversation request. CRM, email, webhook, and other lead fields are not accepted.","required":["messages"],"properties":{"messages":{"type":"array","minItems":1,"maxItems":6,"items":{"$ref":"#/components/schemas/AgentChatMessage"}}},"additionalProperties":false},"AgentChatMessage":{"type":"object","required":["role","content"],"properties":{"role":{"type":"string","enum":["user","assistant"]},"content":{"type":"string","minLength":1,"maxLength":500}},"additionalProperties":false},"RankCheckRequest":{"type":"object","description":"Public ranking request. URL and keyword calls are anonymous. Supplying both optional name and email enables the browser lead flow, which can send a report and forward lead details to CRM and notification webhook systems.","required":["url","keyword"],"properties":{"url":{"type":"string","format":"uri","maxLength":2048},"keyword":{"type":"string","minLength":1,"maxLength":200},"name":{"type":"string","minLength":1,"maxLength":200,"description":"Optional lead name for the browser capture flow."},"email":{"type":"string","format":"email","maxLength":254,"description":"Optional lead email for the browser capture flow."}},"additionalProperties":false},"AgentChatResponse":{"type":"object","required":["reply","model"],"properties":{"reply":{"type":"string"},"model":{"type":"string"}},"additionalProperties":false},"VisibilityReportResponse":{"type":"object","required":["success","report"],"properties":{"success":{"type":"boolean"},"report":{"$ref":"#/components/schemas/VisibilityReport"}},"additionalProperties":false},"VisibilityReport":{"type":"object","required":["url","finalUrl","score","grade","gradeLabel","categories","botAccess","recommendations","stats","fetchedAt"],"properties":{"url":{"type":"string","format":"uri"},"finalUrl":{"type":"string","format":"uri"},"score":{"type":"number"},"grade":{"type":"string"},"gradeLabel":{"type":"string"},"categories":{"type":"array","items":{"$ref":"#/components/schemas/VisibilityCategory"}},"botAccess":{"type":"array","items":{"$ref":"#/components/schemas/BotAccess"}},"recommendations":{"type":"array","items":{"$ref":"#/components/schemas/VisibilityRecommendation"}},"aiSummary":{"type":"string"},"pageTitle":{"type":"string"},"stats":{"$ref":"#/components/schemas/VisibilityStats"},"fetchedAt":{"type":"string","format":"date-time"}},"additionalProperties":false},"VisibilityCategory":{"type":"object","required":["id","name","description","score","maxScore","checks"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"score":{"type":"number"},"maxScore":{"type":"number"},"checks":{"type":"array","items":{"$ref":"#/components/schemas/VisibilityCheck"}}},"additionalProperties":false},"VisibilityCheck":{"type":"object","required":["id","label","status","points","maxPoints","detail"],"properties":{"id":{"type":"string"},"label":{"type":"string"},"status":{"type":"string","enum":["pass","warn","fail"]},"points":{"type":"number"},"maxPoints":{"type":"number"},"detail":{"type":"string"},"recommendation":{"type":"string"},"impact":{"type":"string","enum":["High","Medium","Low"]}},"additionalProperties":false},"BotAccess":{"type":"object","required":["bot","company","purpose","allowed"],"properties":{"bot":{"type":"string"},"company":{"type":"string"},"purpose":{"type":"string"},"allowed":{"type":"boolean"}},"additionalProperties":false},"VisibilityRecommendation":{"type":"object","required":["title","detail","impact","category"],"properties":{"title":{"type":"string"},"detail":{"type":"string"},"impact":{"type":"string","enum":["High","Medium","Low"]},"category":{"type":"string"}},"additionalProperties":false},"VisibilityStats":{"type":"object","required":["words","headings","schemaTypes"],"properties":{"words":{"type":"integer"},"headings":{"type":"integer"},"schemaTypes":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"RankCheckResponse":{"type":"object","required":["success","result"],"properties":{"success":{"type":"boolean"},"result":{"$ref":"#/components/schemas/RankResult"}},"additionalProperties":false},"RankResult":{"type":"object","required":["position","totalResults","topCompetitors","tips"],"properties":{"position":{"type":["integer","null"]},"totalResults":{"type":"string"},"topCompetitors":{"type":"array","items":{"$ref":"#/components/schemas/RankCompetitor"}},"tips":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"RankCompetitor":{"type":"object","required":["position","title","url"],"properties":{"position":{"type":"integer"},"title":{"type":"string"},"url":{"type":"string","format":"uri"}},"additionalProperties":false},"StackScoutResponse":{"type":"object","required":["report"],"properties":{"report":{"$ref":"#/components/schemas/StackReport"}},"additionalProperties":false},"StackReport":{"type":"object","required":["url","finalUrl","siteTitle","detections","steps","insights","firstBuild","platformKnown","stats","fetchedAt"],"properties":{"url":{"type":"string","format":"uri"},"finalUrl":{"type":"string","format":"uri"},"siteTitle":{"type":"string"},"detections":{"type":"array","items":{"$ref":"#/components/schemas/StackDetection"}},"steps":{"type":"array","items":{"$ref":"#/components/schemas/TraceStep"}},"insights":{"type":"array","items":{"$ref":"#/components/schemas/StackInsight"}},"firstBuild":{"$ref":"#/components/schemas/FirstBuild"},"platformKnown":{"type":"boolean"},"stats":{"$ref":"#/components/schemas/StackStats"},"fetchedAt":{"type":"string","format":"date-time"}},"additionalProperties":false},"StackDetection":{"type":"object","required":["id","name","category","confidence","evidence"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"category":{"type":"string"},"confidence":{"type":"string","enum":["confirmed","likely"]},"evidence":{"type":"string"}},"additionalProperties":false},"TraceStep":{"type":"object","required":["id","label","detail","status","kind"],"properties":{"id":{"type":"string"},"label":{"type":"string"},"detail":{"type":"string"},"status":{"type":"string","enum":["done","warn"]},"kind":{"type":"string","enum":["work","finding","reasoning"]}},"additionalProperties":false},"StackInsight":{"type":"object","required":["title","detail","action","kind"],"properties":{"title":{"type":"string"},"detail":{"type":"string"},"action":{"type":"string"},"kind":{"type":"string","enum":["automation","risk","quick-win"]}},"additionalProperties":false},"FirstBuild":{"type":"object","required":["title","reason"],"properties":{"title":{"type":"string"},"reason":{"type":"string"}},"additionalProperties":false},"StackStats":{"type":"object","required":["htmlKb","scripts","images","hasJsonLd"],"properties":{"htmlKb":{"type":"number"},"scripts":{"type":"integer"},"images":{"type":"integer"},"hasJsonLd":{"type":"boolean"}},"additionalProperties":false},"AgentManifestResponse":{"type":"object","required":["schema","name","product","description","url","capabilities","services","machine_readable_resources"],"properties":{"schema":{"type":"string"},"name":{"type":"string"},"product":{"type":"string"},"description":{"type":"string"},"url":{"type":"string","format":"uri"},"contact":{"$ref":"#/components/schemas/ManifestContact"},"capabilities":{"type":"array","items":{"type":"string"}},"services":{"type":"array","items":{"$ref":"#/components/schemas/ManifestService"}},"agent_blueprints":{"$ref":"#/components/schemas/AgentBlueprints"},"machine_readable_resources":{"$ref":"#/components/schemas/ManifestResources"},"agent_guidance":{"$ref":"#/components/schemas/AgentGuidance"},"public_surface_boundaries":{"$ref":"#/components/schemas/PublicSurfaceBoundaries"},"meta":{"$ref":"#/components/schemas/ManifestMeta"}},"additionalProperties":false},"ManifestContact":{"type":"object","required":["url","type","email"],"properties":{"url":{"type":"string","format":"uri"},"type":{"type":"string"},"email":{"type":"string","format":"email"}},"additionalProperties":false},"ManifestService":{"type":"object","required":["name","description","url","pricing"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"url":{"type":"string","format":"uri"},"pricing":{"type":"string"}},"additionalProperties":false},"AgentBlueprints":{"type":"object","required":["status","description","categories","waitlist_url"],"properties":{"status":{"type":"string"},"description":{"type":"string"},"categories":{"type":"array","items":{"type":"string"}},"waitlist_url":{"type":"string","format":"uri"}},"additionalProperties":false},"ManifestResources":{"type":"object","required":["developer_docs","agent_instructions","openapi_json","llms_txt","llms_full_txt","agents_json","sitemap_xml"],"properties":{"developer_docs":{"type":"string","format":"uri"},"agent_instructions":{"type":"string","format":"uri"},"openapi_json":{"type":"string","format":"uri"},"llms_txt":{"type":"string","format":"uri"},"llms_full_txt":{"type":"string","format":"uri"},"agents_json":{"type":"string","format":"uri"},"sitemap_xml":{"type":"string","format":"uri"}},"additionalProperties":false},"AgentGuidance":{"type":"object","required":["instructions_url","when_to_use","call_sequence"],"properties":{"instructions_url":{"type":"string","format":"uri"},"when_to_use":{"type":"array","items":{"type":"string"}},"call_sequence":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"PublicSurfaceBoundaries":{"type":"object","required":["authentication","webhooks","mcp"],"properties":{"authentication":{"type":"string"},"webhooks":{"type":"string"},"mcp":{"type":"string"}},"additionalProperties":false},"ManifestMeta":{"type":"object","required":["version","last_updated","organization","location"],"properties":{"version":{"type":"string"},"last_updated":{"type":"string","format":"date"},"organization":{"type":"string"},"location":{"type":"string"}},"additionalProperties":false},"OpenApiDocumentResponse":{"type":"object","required":["openapi","info","paths","components"],"properties":{"openapi":{"type":"string","enum":["3.1.0"]},"jsonSchemaDialect":{"type":"string","format":"uri"},"info":{"type":"object","additionalProperties":true},"servers":{"type":"array","items":{"type":"object","additionalProperties":true}},"tags":{"type":"array","items":{"type":"object","additionalProperties":true}},"paths":{"type":"object","additionalProperties":true},"components":{"type":"object","additionalProperties":true}},"additionalProperties":false}}}}