{"openapi":"3.1.0","info":{"title":"Gecko public API","version":"1.0.0","summary":"Comprehend an API surface; join the waitlist.","description":"The public HTTP operations behind https://geckovision.tech. Gecko's full product surface for agents is the hosted MCP server (Streamable HTTP; see https://geckovision.tech/.well-known/mcp/server-card.json). These REST operations cover the landing's own interactive features. Docs: https://docs.geckovision.tech","contact":{"name":"Gecko","email":"contact@geckovision.tech","url":"https://geckovision.tech"}},"servers":[{"url":"https://geckovision.tech","description":"The landing site"}],"paths":{"/api/comprehend":{"post":{"operationId":"comprehendApiSurface","summary":"Comprehend an OpenAPI spec or docs URL into agent tools","description":"Point Gecko at a public OpenAPI spec URL (or a docs page with from_docs=true) and receive a preview of the agent tools it comprehends: tool names, counts, quarantine verdict, and the exact commands to add the surface to an MCP client. Control-plane only: the request is forwarded, nothing is stored. Private, internal, and non-HTTP URLs are refused.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Public https URL of an OpenAPI spec (or a docs page when from_docs is true)."},"from_docs":{"type":"boolean","default":false,"description":"Treat the URL as a human docs page and extract the API surface from it."}}}}}},"responses":{"200":{"description":"The comprehended surface preview.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComprehendResult"}}}},"400":{"description":"The URL was missing, malformed, non-public, or did not resolve to a comprehensible spec.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"The spec is too large to comprehend right now.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited; retry later.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"The comprehension service could not be reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/waitlist":{"servers":[{"url":"https://app.geckovision.tech","description":"The Gecko app (this operation is served there)"}],"post":{"operationId":"joinWaitlist","summary":"Join the Gecko waitlist","description":"Add an email to the provider waitlist. Duplicates are absorbed silently (the response never reveals whether an email was already present). One email is sent when a slot opens; nothing else.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email"],"properties":{"email":{"type":"string","format":"email","maxLength":254,"description":"The address to add to the waitlist."},"source":{"type":"string","maxLength":64,"description":"Where the signup came from, e.g. \"landing:closing\"."}}}}}},"responses":{"200":{"description":"The email is on the list (or already was).","content":{"application/json":{"schema":{"type":"object","required":["ok"],"properties":{"ok":{"type":"boolean","const":true}}}}}},"400":{"description":"The body was not JSON or the email is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"Error":{"type":"object","required":["error"],"description":"Every error this API returns is structured JSON, never an HTML page.","properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code, e.g. \"invalid-body\", \"upstream-unreachable\"."},"message":{"type":"string","description":"Human-and-agent-readable explanation."},"hint":{"type":"string","description":"What to change before retrying."}}}}},"ComprehendResult":{"type":"object","description":"Preview of a comprehended API surface. Fields are present when known.","properties":{"name":{"type":"string","description":"The surface's name."},"description":{"type":"string"},"op_count":{"type":"integer","description":"Operations found in the source spec."},"usable_tool_count":{"type":"integer","description":"Tools generated and considered callable."},"tools":{"type":"array","items":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"summary":{"type":"string"}}}},"quarantined":{"type":"boolean","description":"True when the ingested content tripped the anti-poisoning quarantine."},"warnings":{"type":"array","items":{"type":"string"}},"next_steps":{"type":"object","description":"Exact commands to start using the surface.","properties":{"self_host":{"type":"string"},"claude_mcp_add":{"type":"string"},"mcp_json":{"type":"string"}}}}}}}}