{"openapi":"3.1.0","info":{"title":"LeadBot AI Public API","version":"1.0.0","description":"Public REST endpoints for LeadBot AI service discovery, health checks, and embeddable chat widgets. Partner API keys and authenticated CRM integrations are planned for Business and Agency plans.","contact":{"name":"LeadBot AI","email":"social@leadbotapp.com","url":"https://leadbotapp.com"}},"servers":[{"url":"https://leadbotapp.com","description":"Production"}],"paths":{"/api/v1":{"get":{"operationId":"getApiV1Discovery","summary":"API service descriptor","description":"Returns the public API base metadata, documentation links, and operational status.","tags":["Discovery"],"responses":{"200":{"description":"Service descriptor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiDescriptor"}}}}}}},"/api/v1/openapi.json":{"get":{"operationId":"getOpenApiSpec","summary":"OpenAPI specification","tags":["Discovery"],"responses":{"200":{"description":"OpenAPI 3.x document","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/health":{"get":{"operationId":"getHealth","summary":"Deployment health","description":"Reports configuration checks for the deployed app (used for monitoring).","tags":["Operations"],"responses":{"200":{"description":"Health payload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}}}},"/api/widget/config":{"get":{"operationId":"getWidgetConfig","summary":"Widget configuration","description":"Returns branding, qualifying questions, and booking settings for an embedded chat widget. Requires a valid business_id.","tags":["Widget"],"parameters":[{"name":"business_id","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Widget config"},"400":{"description":"Missing business_id"},"403":{"description":"Widget disabled"},"404":{"description":"Business not found"}}}},"/api/widget/chat":{"post":{"operationId":"postWidgetChat","summary":"Widget chat message","description":"Sends a user message to the AI assistant for a business widget session.","tags":["Widget"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetChatRequest"}}}},"responses":{"200":{"description":"Assistant reply"},"400":{"description":"Invalid request"},"403":{"description":"Widget disabled"}}}},"/api/widget/leads":{"post":{"operationId":"postWidgetLead","summary":"Submit widget lead or booking","description":"Captures lead details and optional booking requests from the embeddable widget.","tags":["Widget"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetLeadRequest"}}}},"responses":{"200":{"description":"Lead accepted"},"400":{"description":"Invalid request"},"404":{"description":"Business not found"}}}},"/api/marketing/config":{"get":{"operationId":"getMarketingConfig","summary":"LeadBot marketing site demo widget config","description":"Configuration for the demo qualification widget on leadbotapp.com (not customer-specific).","tags":["Marketing site"],"responses":{"200":{"description":"Demo widget config"}}}}},"components":{"schemas":{"ApiDescriptor":{"type":"object","required":["name","version","docs_url","openapi_url","status"],"properties":{"name":{"type":"string","example":"LeadBot AI"},"version":{"type":"string","example":"1.0.0"},"api_base_url":{"type":"string","format":"uri"},"docs_url":{"type":"string","format":"uri"},"openapi_url":{"type":"string","format":"uri"},"status":{"type":"string","example":"operational"}}},"HealthResponse":{"type":"object","properties":{"status":{"type":"string"},"checks":{"type":"object","additionalProperties":{"type":"boolean"}},"missing":{"type":"array","items":{"type":"string"}},"optional_missing":{"type":"array","items":{"type":"string"}},"widget_api_url":{"type":"string","nullable":true}}},"WidgetChatRequest":{"type":"object","required":["business_id","session_id","message"],"properties":{"business_id":{"type":"string","format":"uuid"},"session_id":{"type":"string"},"message":{"type":"string","maxLength":2000},"conversation_id":{"type":"string","format":"uuid","nullable":true},"page_url":{"type":"string"}}},"WidgetLeadRequest":{"type":"object","required":["business_id"],"properties":{"business_id":{"type":"string","format":"uuid"},"conversation_id":{"type":"string","format":"uuid"},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string","format":"email"},"phone":{"type":"string"},"service_requested":{"type":"string"},"qualification_data":{"type":"object","additionalProperties":{"type":"string"}},"booking":{"type":"object","properties":{"date":{"type":"string"},"time":{"type":"string"}}}}}}},"tags":[{"name":"Discovery","description":"Service metadata and OpenAPI"},{"name":"Operations","description":"Health and monitoring"},{"name":"Widget","description":"Embeddable chat widget (public, business-scoped)"},{"name":"Marketing site","description":"LeadBot demo on leadbotapp.com"}],"x-authentication":{"public_endpoints":"Widget and discovery routes do not require an API key.","partner_api_keys":"REST API keys for server-to-server integrations (CRM sync, lead export) are on the roadmap for Business and Agency plans. Contact social@leadbotapp.com for early access.","mcp":"Model Context Protocol (MCP) server documentation is not published yet; use this OpenAPI spec for integrations."}}