{"ok":true,"data":{"openapi":"3.1.0","info":{"title":"PlatPhorm Evals","version":"0.1.0","description":"Registry-driven evaluation mesh for the PlatPhorm ecosystem."},"servers":[{"url":"https://evals.platphormnews.com"}],"paths":{"/api/health":{"get":{"summary":"Health check","description":"Returns service status, version, and integration configuration.","tags":["System"],"responses":{"200":{"description":"Service health and integration status","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"data":{"type":"object"}}}}}}}}},"/api/docs":{"get":{"summary":"OpenAPI document","description":"Returns this OpenAPI 3.1 document.","tags":["System"],"responses":{"200":{"description":"OpenAPI JSON"}}}},"/api/mcp":{"get":{"summary":"MCP server descriptor","description":"Returns the MCP server descriptor (tools, resources, prompts). Public, no auth required.","tags":["MCP"],"responses":{"200":{"description":"MCP server descriptor","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"data":{"type":"object"}}}}}}}},"post":{"summary":"MCP JSON-RPC endpoint","description":"Handles MCP JSON-RPC 2.0 requests. Auth required.","tags":["MCP"],"parameters":[{"name":"Authorization","in":"header","description":"Bearer <api_key>","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"JSON-RPC 2.0 response","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"data":{"type":"object"}}}}}},"400":{"description":"Bad request – `{ ok: false, error: { code, message } }`"},"401":{"description":"Unauthorized – missing or invalid API key"},"404":{"description":"Not found"},"500":{"description":"Internal server error"}}}},"/api/v1/evals":{"get":{"summary":"List eval suites","tags":["Evals"],"parameters":[{"name":"Authorization","in":"header","description":"Bearer <api_key>","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated list of eval suites","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"data":{"type":"object"}}}}}},"400":{"description":"Bad request – `{ ok: false, error: { code, message } }`"},"401":{"description":"Unauthorized – missing or invalid API key"},"404":{"description":"Not found"},"500":{"description":"Internal server error"}}},"post":{"summary":"Create eval suite","tags":["Evals"],"parameters":[{"name":"Authorization","in":"header","description":"Bearer <api_key>","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Created eval suite"},"400":{"description":"Bad request – `{ ok: false, error: { code, message } }`"},"401":{"description":"Unauthorized – missing or invalid API key"},"404":{"description":"Not found"},"500":{"description":"Internal server error"}}}},"/api/v1/evals/{id}":{"get":{"summary":"Get eval suite by ID","tags":["Evals"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Eval suite","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"data":{"type":"object"}}}}}},"400":{"description":"Bad request – `{ ok: false, error: { code, message } }`"},"401":{"description":"Unauthorized – missing or invalid API key"},"404":{"description":"Not found"},"500":{"description":"Internal server error"}}}},"/api/v1/runs":{"get":{"summary":"List eval runs","tags":["Runs"],"parameters":[{"name":"Authorization","in":"header","description":"Bearer <api_key>","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated list of eval runs","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"data":{"type":"object"}}}}}},"400":{"description":"Bad request – `{ ok: false, error: { code, message } }`"},"401":{"description":"Unauthorized – missing or invalid API key"},"404":{"description":"Not found"},"500":{"description":"Internal server error"}}},"post":{"summary":"Create eval run","tags":["Runs"],"parameters":[{"name":"Authorization","in":"header","description":"Bearer <api_key>","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Created eval run"},"400":{"description":"Bad request – `{ ok: false, error: { code, message } }`"},"401":{"description":"Unauthorized – missing or invalid API key"},"404":{"description":"Not found"},"500":{"description":"Internal server error"}}}},"/api/v1/runs/{id}":{"get":{"summary":"Get eval run by ID","tags":["Runs"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Eval run","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"data":{"type":"object"}}}}}},"400":{"description":"Bad request – `{ ok: false, error: { code, message } }`"},"401":{"description":"Unauthorized – missing or invalid API key"},"404":{"description":"Not found"},"500":{"description":"Internal server error"}}}},"/api/v1/datasets":{"get":{"summary":"List datasets","tags":["Datasets"],"parameters":[{"name":"Authorization","in":"header","description":"Bearer <api_key>","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated list of datasets","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"data":{"type":"object"}}}}}},"400":{"description":"Bad request – `{ ok: false, error: { code, message } }`"},"401":{"description":"Unauthorized – missing or invalid API key"},"404":{"description":"Not found"},"500":{"description":"Internal server error"}}},"post":{"summary":"Create dataset","tags":["Datasets"],"parameters":[{"name":"Authorization","in":"header","description":"Bearer <api_key>","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Created dataset"},"400":{"description":"Bad request – `{ ok: false, error: { code, message } }`"},"401":{"description":"Unauthorized – missing or invalid API key"},"404":{"description":"Not found"},"500":{"description":"Internal server error"}}}},"/api/v1/datasets/{id}":{"get":{"summary":"Get dataset by ID","tags":["Datasets"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Dataset","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"data":{"type":"object"}}}}}},"400":{"description":"Bad request – `{ ok: false, error: { code, message } }`"},"401":{"description":"Unauthorized – missing or invalid API key"},"404":{"description":"Not found"},"500":{"description":"Internal server error"}}}},"/api/v1/graders":{"get":{"summary":"List graders","tags":["Graders"],"parameters":[{"name":"Authorization","in":"header","description":"Bearer <api_key>","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated list of graders","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"data":{"type":"object"}}}}}},"400":{"description":"Bad request – `{ ok: false, error: { code, message } }`"},"401":{"description":"Unauthorized – missing or invalid API key"},"404":{"description":"Not found"},"500":{"description":"Internal server error"}}},"post":{"summary":"Create grader","tags":["Graders"],"parameters":[{"name":"Authorization","in":"header","description":"Bearer <api_key>","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Created grader"},"400":{"description":"Bad request – `{ ok: false, error: { code, message } }`"},"401":{"description":"Unauthorized – missing or invalid API key"},"404":{"description":"Not found"},"500":{"description":"Internal server error"}}}},"/api/v1/graders/{id}":{"get":{"summary":"Get grader by ID","tags":["Graders"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Grader","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"data":{"type":"object"}}}}}},"400":{"description":"Bad request – `{ ok: false, error: { code, message } }`"},"401":{"description":"Unauthorized – missing or invalid API key"},"404":{"description":"Not found"},"500":{"description":"Internal server error"}}}},"/api/v1/gates":{"get":{"summary":"List release gates","tags":["Gates"],"parameters":[{"name":"Authorization","in":"header","description":"Bearer <api_key>","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated list of release gates","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"data":{"type":"object"}}}}}},"400":{"description":"Bad request – `{ ok: false, error: { code, message } }`"},"401":{"description":"Unauthorized – missing or invalid API key"},"404":{"description":"Not found"},"500":{"description":"Internal server error"}}},"post":{"summary":"Create release gate","tags":["Gates"],"parameters":[{"name":"Authorization","in":"header","description":"Bearer <api_key>","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Created release gate"},"400":{"description":"Bad request – `{ ok: false, error: { code, message } }`"},"401":{"description":"Unauthorized – missing or invalid API key"},"404":{"description":"Not found"},"500":{"description":"Internal server error"}}}},"/api/v1/registry/sync":{"post":{"summary":"Sync network registry","description":"Triggers a sync of the PlatPhorm Network service registry.","tags":["Registry"],"parameters":[{"name":"Authorization","in":"header","description":"Bearer <api_key>","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Sync result","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"data":{"type":"object"}}}}}},"400":{"description":"Bad request – `{ ok: false, error: { code, message } }`"},"401":{"description":"Unauthorized – missing or invalid API key"},"404":{"description":"Not found"},"500":{"description":"Internal server error"}}}},"/api/v1/registry/services":{"get":{"summary":"List registry services","description":"Returns services stored in the network_services table. No auth required.","tags":["Registry"],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","default":50,"maximum":200}},{"name":"offset","in":"query","schema":{"type":"integer","default":0}}],"responses":{"200":{"description":"Paginated list of network services","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"data":{"type":"object"}}}}}},"400":{"description":"Bad request – `{ ok: false, error: { code, message } }`"},"401":{"description":"Unauthorized – missing or invalid API key"},"404":{"description":"Not found"},"500":{"description":"Internal server error"}}}},"/api/v1/registry/probe":{"post":{"summary":"Probe canonical services","description":"Probes all canonical PlatPhorm Network services for health, docs, MCP, and capabilities. Read-only.","tags":["Registry"],"parameters":[{"name":"Authorization","in":"header","description":"Bearer <api_key>","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Probe results for all canonical services","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"data":{"type":"object"}}}}}},"400":{"description":"Bad request – `{ ok: false, error: { code, message } }`"},"401":{"description":"Unauthorized – missing or invalid API key"},"404":{"description":"Not found"},"500":{"description":"Internal server error"}}}},"/api/v1/targets/import":{"get":{"summary":"List import targets","tags":["Targets"],"parameters":[{"name":"Authorization","in":"header","description":"Bearer <api_key>","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Import targets","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"data":{"type":"object"}}}}}},"400":{"description":"Bad request – `{ ok: false, error: { code, message } }`"},"401":{"description":"Unauthorized – missing or invalid API key"},"404":{"description":"Not found"},"500":{"description":"Internal server error"}}},"post":{"summary":"Import targets","tags":["Targets"],"parameters":[{"name":"Authorization","in":"header","description":"Bearer <api_key>","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Import result","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"data":{"type":"object"}}}}}},"400":{"description":"Bad request – `{ ok: false, error: { code, message } }`"},"401":{"description":"Unauthorized – missing or invalid API key"},"404":{"description":"Not found"},"500":{"description":"Internal server error"}}}},"/api/v1/compare":{"get":{"summary":"List comparisons","tags":["Compare"],"parameters":[{"name":"Authorization","in":"header","description":"Bearer <api_key>","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Comparisons","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"data":{"type":"object"}}}}}},"400":{"description":"Bad request – `{ ok: false, error: { code, message } }`"},"401":{"description":"Unauthorized – missing or invalid API key"},"404":{"description":"Not found"},"500":{"description":"Internal server error"}}},"post":{"summary":"Create comparison","tags":["Compare"],"parameters":[{"name":"Authorization","in":"header","description":"Bearer <api_key>","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Comparison result","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"data":{"type":"object"}}}}}},"400":{"description":"Bad request – `{ ok: false, error: { code, message } }`"},"401":{"description":"Unauthorized – missing or invalid API key"},"404":{"description":"Not found"},"500":{"description":"Internal server error"}}}},"/api/v1/regressions":{"post":{"summary":"Create regression record","tags":["Regressions"],"parameters":[{"name":"Authorization","in":"header","description":"Bearer <api_key>","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Created regression"},"400":{"description":"Bad request – `{ ok: false, error: { code, message } }`"},"401":{"description":"Unauthorized – missing or invalid API key"},"404":{"description":"Not found"},"500":{"description":"Internal server error"}}}},"/api/v1/regressions/{id}":{"get":{"summary":"Get regression by ID","tags":["Regressions"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Regression","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"data":{"type":"object"}}}}}},"400":{"description":"Bad request – `{ ok: false, error: { code, message } }`"},"401":{"description":"Unauthorized – missing or invalid API key"},"404":{"description":"Not found"},"500":{"description":"Internal server error"}}}},"/api/v1/templates":{"get":{"summary":"List templates","tags":["Templates"],"parameters":[{"name":"Authorization","in":"header","description":"Bearer <api_key>","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated list of templates","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"data":{"type":"object"}}}}}},"400":{"description":"Bad request – `{ ok: false, error: { code, message } }`"},"401":{"description":"Unauthorized – missing or invalid API key"},"404":{"description":"Not found"},"500":{"description":"Internal server error"}}},"post":{"summary":"Create template","tags":["Templates"],"parameters":[{"name":"Authorization","in":"header","description":"Bearer <api_key>","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Created template"},"400":{"description":"Bad request – `{ ok: false, error: { code, message } }`"},"401":{"description":"Unauthorized – missing or invalid API key"},"404":{"description":"Not found"},"500":{"description":"Internal server error"}}}},"/api/v1/publish":{"post":{"summary":"Publish artifact","tags":["Publish"],"parameters":[{"name":"Authorization","in":"header","description":"Bearer <api_key>","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Publish result","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"data":{"type":"object"}}}}}},"400":{"description":"Bad request – `{ ok: false, error: { code, message } }`"},"401":{"description":"Unauthorized – missing or invalid API key"},"404":{"description":"Not found"},"500":{"description":"Internal server error"}}}}}}}