{"openapi":"3.1.0","info":{"title":"TaskFlow Public Connector API","version":"1.0.0","summary":"Public discovery document for TaskFlow MCP, OAuth, health, and trust surfaces.","description":"TaskFlow is an AI-agent work control plane. This document describes the public connector and discovery surface; project data APIs remain authenticated and project scoped."},"servers":[{"url":"https://emun.io","description":"Production"}],"tags":[{"name":"Public"},{"name":"Discovery"},{"name":"OAuth"},{"name":"MCP"},{"name":"Health"}],"paths":{"/":{"get":{"tags":["Public"],"summary":"TaskFlow public overview","responses":{"200":{"description":"HTML overview page"}}}},"/docs":{"get":{"tags":["Public"],"summary":"Getting started documentation","responses":{"200":{"description":"HTML documentation page"}}}},"/connectors/claude":{"get":{"tags":["Public"],"summary":"Claude connector setup information","responses":{"200":{"description":"HTML connector setup page"}}}},"/pricing":{"get":{"tags":["Public"],"summary":"Current pricing and release boundary","responses":{"200":{"description":"HTML pricing page"}}}},"/privacy":{"get":{"tags":["Public"],"summary":"Privacy policy","responses":{"200":{"description":"HTML privacy page"}}}},"/security":{"get":{"tags":["Public"],"summary":"Security posture","responses":{"200":{"description":"HTML security page"}}}},"/support":{"get":{"tags":["Public"],"summary":"Support contact page","responses":{"200":{"description":"HTML support page"}}}},"/status":{"get":{"tags":["Public"],"summary":"Public service status","responses":{"200":{"description":"HTML status page"}}}},"/changelog":{"get":{"tags":["Public"],"summary":"Public release changelog","responses":{"200":{"description":"HTML changelog page"}}}},"/llms.txt":{"get":{"tags":["Discovery"],"summary":"AI usage guidance","responses":{"200":{"description":"Plain-text AI usage guidance","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/.well-known/openapi":{"get":{"tags":["Discovery"],"summary":"OpenAPI discovery document","responses":{"200":{"description":"OpenAPI 3.1 JSON document","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/.well-known/oauth-protected-resource":{"get":{"tags":["OAuth"],"summary":"OAuth protected-resource metadata","responses":{"200":{"description":"OAuth protected resource metadata","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/.well-known/oauth-authorization-server":{"get":{"tags":["OAuth"],"summary":"OAuth authorization-server metadata","responses":{"200":{"description":"OAuth authorization server metadata","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/v1/oauth/register":{"post":{"tags":["OAuth"],"summary":"Dynamic OAuth client registration","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["redirect_uris"],"properties":{"client_name":{"type":"string"},"redirect_uris":{"type":"array","items":{"type":"string","format":"uri"}},"grant_types":{"type":"array","items":{"type":"string","enum":["authorization_code","refresh_token"]}},"response_types":{"type":"array","items":{"type":"string","enum":["code"]}},"token_endpoint_auth_method":{"type":"string","enum":["none","client_secret_post","client_secret_basic"]}}}}}},"responses":{"201":{"description":"OAuth client registered"},"400":{"description":"Invalid client metadata"},"429":{"description":"Rate limited"}}}},"/api/v1/oauth/authorize":{"get":{"tags":["OAuth"],"summary":"OAuth authorization endpoint","parameters":[{"name":"client_id","in":"query","required":true,"schema":{"type":"string"}},{"name":"redirect_uri","in":"query","required":true,"schema":{"type":"string","format":"uri"}},{"name":"response_type","in":"query","required":true,"schema":{"type":"string","enum":["code"]}},{"name":"code_challenge","in":"query","required":true,"schema":{"type":"string"}},{"name":"code_challenge_method","in":"query","required":true,"schema":{"type":"string","enum":["S256"]}},{"name":"state","in":"query","required":false,"schema":{"type":"string"}},{"name":"scope","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Authorization HTML form"},"302":{"description":"Redirect with authorization code or OAuth error"},"400":{"description":"Invalid authorization request"},"429":{"description":"Rate limited"}}},"post":{"tags":["OAuth"],"summary":"Submit OAuth authorization decision","responses":{"302":{"description":"Redirect with authorization code or OAuth error"},"400":{"description":"Invalid authorization request"},"429":{"description":"Rate limited"}}}},"/api/v1/oauth/token":{"post":{"tags":["OAuth"],"summary":"OAuth token endpoint","requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"grant_type":{"type":"string","enum":["authorization_code","refresh_token"]},"client_id":{"type":"string"},"client_secret":{"type":"string"},"code":{"type":"string"},"redirect_uri":{"type":"string","format":"uri"},"code_verifier":{"type":"string"},"refresh_token":{"type":"string"}}}}}},"responses":{"200":{"description":"OAuth token response"},"400":{"description":"OAuth error response"},"429":{"description":"Rate limited"}}}},"/api/v1/mcp":{"post":{"tags":["MCP"],"summary":"MCP Streamable HTTP endpoint","description":"Accepts JSON-RPC MCP requests. Project-scoped tools require authenticated project access.","security":[{"oauth2":["mcp:tools"]},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["jsonrpc","method"],"properties":{"jsonrpc":{"type":"string","enum":["2.0"]},"id":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"null"}]},"method":{"type":"string"},"params":{"type":"object"}}}}}},"responses":{"200":{"description":"JSON-RPC response or SSE-compatible response"},"401":{"description":"Authentication discovery challenge"},"403":{"description":"Forbidden by project membership or scope"},"429":{"description":"Rate limited or plan limited"}}}},"/api/v1/health":{"get":{"tags":["Health"],"summary":"Application and database readiness","responses":{"200":{"description":"Health payload","content":{"application/json":{"schema":{"type":"object","required":["status","checks","git_sha","timestamp","latency_ms"],"properties":{"status":{"type":"string","enum":["ok","degraded"]},"checks":{"type":"object","properties":{"app":{"type":"string"},"database":{"type":"string"}}},"git_sha":{"type":"string"},"timestamp":{"type":"string","format":"date-time"},"latency_ms":{"type":"number"}}}}}}}}}},"components":{"securitySchemes":{"oauth2":{"type":"oauth2","flows":{"authorizationCode":{"authorizationUrl":"https://emun.io/api/v1/oauth/authorize","tokenUrl":"https://emun.io/api/v1/oauth/token","scopes":{"mcp:tools":"Read and manage TaskFlow project state through MCP tools."}}}},"bearerAuth":{"type":"http","scheme":"bearer"}}}}