{"openapi":"3.1.0","info":{"title":"JC PenTest Harness API","version":"1.2.0","description":"Evidence-first, responsible-use API for dry-run planning, protected real-run orchestration, model status, findings, scorecards, reports, MCP, and discovery."},"servers":[{"url":"https://pentest.platphormnews.com"},{"url":"https://pentest.platphormnews.com"}],"security":[{"PlatPhormBearer":[]},{"PlatPhormApiKey":[]}],"components":{"securitySchemes":{"PlatPhormBearer":{"type":"http","scheme":"bearer","description":"Bearer PLATPHORM_API_KEY"},"PlatPhormApiKey":{"type":"apiKey","in":"header","name":"X-PlatPhorm-API-Key"}},"schemas":{"RestOk":{"type":"object","required":["ok","data"],"properties":{"ok":{"const":true},"data":{"type":"object"}}},"RestError":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object"}}}}}}},"paths":{"/api/health":{"get":{"summary":"Public health status","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}}}}},"/api/coverage":{"get":{"summary":"Public class coverage summary","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}}}}},"/api/events":{"get":{"summary":"Public event outbox","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}}}}},"/api/findings":{"get":{"summary":"Public finding summaries","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}}}}},"/api/stats":{"get":{"summary":"Public dashboard stats","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}}}}},"/api/v1/health":{"get":{"summary":"Versioned health status","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}}}}},"/api/v1/setup/status":{"get":{"summary":"Setup and integration status","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}}}}},"/api/v1/setup/validate":{"post":{"summary":"Validate setup draft and scope","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}}}}},"/api/v1/responsible-use":{"get":{"summary":"Responsible-use policy","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}}}}},"/api/v1/responsible-use/accept":{"post":{"summary":"Accept responsible-use policy","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}},"401":{"description":"PLATPHORM_API_KEY required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestError"}}}}}}},"/api/v1/scopes/validate":{"post":{"summary":"Validate target scope without active calls","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}}}}},"/api/v1/runs":{"get":{"summary":"List protected local run records","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}},"401":{"description":"PLATPHORM_API_KEY required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestError"}}}}}},"post":{"summary":"Create run record","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}},"401":{"description":"PLATPHORM_API_KEY required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestError"}}}}}}},"/api/v1/runs/dry-run":{"post":{"summary":"Execute public-safe demo dry run or protected custom dry run","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}}}}},"/api/v1/runs/real-run":{"post":{"summary":"Request protected real run","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}},"401":{"description":"PLATPHORM_API_KEY required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestError"}}}}}}},"/api/v1/models":{"get":{"summary":"Model roster","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}}}}},"/api/v1/models/status":{"get":{"summary":"Server-side model and key-source status","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}}}}},"/api/v1/integrations/status":{"get":{"summary":"Integration status","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}}}}},"/api/v1/integrations/platphorm/registry":{"get":{"summary":"Configured PlatPhorm service registry","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}}}}},"/api/v1/integrations/platphorm/discovery":{"get":{"summary":"Live public discovery summary for Sandbox and BrowserOps","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}}}}},"/api/v1/integrations/sandbox/preview":{"post":{"summary":"Preview a Sandbox handoff payload without delivery","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}}}}},"/api/v1/integrations/browserops/preview":{"post":{"summary":"Preview a BrowserOps handoff payload without delivery","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}}}}},"/api/v1/integrations/sandbox/handoff":{"post":{"summary":"Send a protected handoff to PlatPhorm Sandbox","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}},"401":{"description":"PLATPHORM_API_KEY required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestError"}}}}}}},"/api/v1/integrations/browserops/handoff":{"post":{"summary":"Send a protected handoff to PlatPhorm BrowserOps","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}},"401":{"description":"PLATPHORM_API_KEY required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestError"}}}}}}},"/api/v1/events":{"get":{"summary":"Versioned event outbox","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}}}}},"/api/v1/webhooks":{"get":{"summary":"Webhook event catalog","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}}}}},"/api/v1/reports":{"get":{"summary":"Public-safe report package index","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}}}}},"/api/v1/reports/{runId}":{"get":{"summary":"Public-safe report package by run id","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}}}}},"/api/v1/runtime/credentials":{"get":{"summary":"Runtime credential presence without exposing raw values","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}}}}},"/api/v1/runtime/credentials/check":{"post":{"summary":"Check runtime credential presence without persistence","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}}}}},"/api/v1/sandbox/jobs":{"post":{"summary":"Create sandbox job when configured","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}},"401":{"description":"PLATPHORM_API_KEY required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestError"}}}}}}},"/api/mcp":{"get":{"summary":"MCP metadata","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}}}},"post":{"summary":"MCP JSON-RPC 2.0 endpoint","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestOk"}}}}}}}},"x-platphorm":{"service":"pentest","publicRoutes":["/","/runs","/runs/new","/findings","/matrix","/models","/scorecard","/reports","/artifacts","/activity","/integrations","/settings","/known-gaps","/registry","/app/setup","/app/setup/responsible-use","/docs","/docs/getting-started","/docs/safety","/docs/responsible-use","/docs/modes","/docs/pipeline","/docs/findings","/docs/integrations","/api/health","/api/v1/health","/api/coverage","/api/events","/api/findings","/api/stats","/api/v1/setup/status","/api/v1/responsible-use","/api/v1/models","/api/v1/models/status","/api/v1/integrations/status","/api/v1/integrations/platphorm/registry","/api/v1/integrations/platphorm/discovery","/api/v1/runtime/credentials","/api/v1/reports","/api/v1/events","/api/v1/webhooks","/api/docs","/api/mcp","/openapi.yaml","/openapi.json","/llms.txt","/llms-full.txt","/llms-index.json","/humans.txt","/robots.txt","/sitemap.xml","/sitemap-index.xml","/sitemap-full.xml","/rss.xml","/feed.xml","/manifest.webmanifest","/.well-known/mcp.json","/.well-known/agents.json","/.well-known/ai-plugin.json","/.well-known/agent-policy.json","/.well-known/ai-policy.json","/.well-known/security.txt","/.well-known/trust.json"],"protectedRoutes":["/api/v1/runs custom dry-run scopes","/api/v1/runs/real-run","/api/v1/runs/:runId/rerun","/api/v1/runs/:runId/(pause|resume|cancel)","/api/v1/sandbox/jobs","/api/v1/integrations/sandbox/handoff","/api/v1/integrations/browserops/handoff","/api/v1/integrations/*","/api/v1/webhooks/*","/api/mcp protected tools"],"auth":"PLATPHORM_API_KEY only for platform protected operations"}}