{"openapi":"3.1.0","info":{"title":"PlatPhorm SitemapOps API","description":"Generate sitemaps from index policy, not route noise. SitemapOps builds clean, evidence-backed sitemaps for articles, tools, docs, reports, and news by excluding noindex, redirected, blocked, duplicate, weak, thin, broken, canonicalized, and untrusted pages.","version":"1.0.0","contact":{"name":"PlatPhorm News","url":"https://platphormnews.com"}},"servers":[{"url":"https://sitemapops.platphormnews.com","description":"Production"}],"paths":{"/api/health":{"get":{"summary":"Health check","tags":["Health"],"responses":{"200":{"description":"Service is healthy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}}}},"/api/sitemapops/status":{"get":{"summary":"Get SitemapOps status","tags":["SitemapOps"],"responses":{"200":{"description":"Status response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/sitemapops/dashboard":{"get":{"summary":"Get dashboard data","tags":["SitemapOps"],"responses":{"200":{"description":"Dashboard data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardResponse"}}}}}}},"/api/sitemapops/index-policy":{"get":{"summary":"Get index policy","tags":["Index Policy"],"responses":{"200":{"description":"Index policy configuration","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndexPolicyResponse"}}}}}}},"/api/sitemapops/decisions":{"get":{"summary":"List policy decisions","tags":["Decisions"],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","default":100}},{"name":"sitemapClass","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"List of policy decisions"}}}},"/api/sitemapops/decisions/evaluate":{"post":{"summary":"Evaluate a URL against index policy","tags":["Decisions"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to evaluate"},"httpStatus":{"type":"integer","description":"HTTP status code"},"canonical":{"type":"string","description":"Canonical URL"},"metaRobots":{"type":"string","description":"Meta robots directive"}},"required":["url"]}}}},"responses":{"200":{"description":"Policy decision"}}}},"/api/sitemapops/sitemaps":{"get":{"summary":"List generated sitemaps","tags":["Sitemaps"],"responses":{"200":{"description":"List of sitemaps"}}}},"/api/sitemapops/generate/dry-run":{"post":{"summary":"Dry-run sitemap generation","tags":["Generation"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"sitemapClass":{"type":"string","description":"Sitemap class to generate"}}}}}},"responses":{"200":{"description":"Dry-run result"}}}},"/api/sitemapops/validate":{"post":{"summary":"Validate a sitemap","tags":["Validation"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"xml":{"type":"string","description":"Sitemap XML to validate"}},"required":["xml"]}}}},"responses":{"200":{"description":"Validation result"}}}},"/api/web/status":{"get":{"summary":"Get Web Status","tags":["Web Status"],"responses":{"200":{"description":"Web Status response"}}}},"/api/mcp":{"post":{"summary":"MCP JSON-RPC endpoint","tags":["MCP"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"jsonrpc":{"type":"string","const":"2.0"},"id":{"oneOf":[{"type":"string"},{"type":"integer"}]},"method":{"type":"string"},"params":{"type":"object"}},"required":["jsonrpc","id","method"]}}}},"responses":{"200":{"description":"JSON-RPC response"}}}}},"components":{"schemas":{"HealthResponse":{"type":"object","properties":{"ok":{"type":"boolean"},"service":{"type":"string"},"site":{"type":"string"},"version":{"type":"string"},"timestamp":{"type":"string","format":"date-time"}}},"StatusResponse":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{"type":"object"},"meta":{"type":"object"},"warnings":{"type":"array","items":{"type":"string"}},"errors":{"type":"array","items":{"type":"string"}}}},"DashboardResponse":{"type":"object","properties":{"service":{"type":"object"},"status":{"type":"object"},"counts":{"type":"object"},"sitemapClasses":{"type":"array"},"integrations":{"type":"array"}}},"IndexPolicyResponse":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"version":{"type":"string"},"includeRules":{"type":"array"},"excludeRules":{"type":"array"}}}}}},"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Use PLATPHORM_API_KEY for protected actions"},"apiKey":{"type":"apiKey","in":"header","name":"X-PlatPhorm-API-Key","description":"Use PLATPHORM_API_KEY for protected actions"}}},"tags":[{"name":"Health","description":"Health check endpoints"},{"name":"SitemapOps","description":"SitemapOps status and dashboard"},{"name":"Index Policy","description":"Index policy management"},{"name":"Decisions","description":"Policy decisions and URL evaluation"},{"name":"Sitemaps","description":"Generated sitemaps"},{"name":"Generation","description":"Sitemap generation"},{"name":"Validation","description":"Sitemap validation"},{"name":"Web Status","description":"Web Status endpoints"},{"name":"MCP","description":"Model Context Protocol"}],"generatedAt":"2026-06-03T07:21:14.090Z"}