{"openapi":"3.1.1","info":{"title":"Invokely API","version":"0.1.0","description":"MCP security, conformance, monitoring, and approval API."},"servers":[{"url":"https://invokely.ai"}],"paths":{"/health":{"get":{"operationId":"health","summary":"Service health","description":"Returns service health and the deployed rubric and specification versions.","tags":["Operations"],"security":[],"responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid request"},"500":{"description":"Internal error"}}}},"/api/v1/scans":{"post":{"operationId":"createScan","summary":"Scan a remote MCP server","description":"Runs real Layer A surface checks and, when an MCP session is reachable, deterministic depth checks.","tags":["Scans"],"security":[],"responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid request"},"500":{"description":"Internal error"}}}},"/api/v1/scans/{runId}":{"get":{"operationId":"getScan","summary":"Get a scan","description":"Returns the current status and authorized result view for a scan.","tags":["Scans"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid request"},"500":{"description":"Internal error"}}}},"/api/v1/servers":{"get":{"operationId":"listServers","summary":"List measured servers","description":"Lists canonical servers and their latest public measurement state.","tags":["Directory"],"security":[],"responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid request"},"500":{"description":"Internal error"}}}},"/api/v1/policy/verdict":{"post":{"operationId":"policyVerdict","summary":"Get an organization policy verdict","description":"Returns the current allow, deny, or review verdict for a server under an organization policy.","tags":["Guard"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid request"},"500":{"description":"Internal error"}}}},"/api/v1/projects/{projectId}/release-checks":{"post":{"operationId":"createReleaseCheck","summary":"Run a CI release check","description":"Runs the saved depth policy against a project endpoint and returns a scoped release decision.","tags":["CI"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid request"},"500":{"description":"Internal error"}}}},"/api/v1/release-checks/{releaseId}":{"get":{"operationId":"getReleaseCheck","summary":"Get a CI release check","description":"Returns an authorized release-check decision and report reference.","tags":["CI"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid request"},"500":{"description":"Internal error"}}}},"/api/v1/release-checks/{releaseId}/official-conformance":{"post":{"operationId":"importOfficialConformance","summary":"Import official MCP conformance results","description":"Imports checks produced by the pinned official MCP conformance runner into a release report with explicit suite provenance.","tags":["CI"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid request"},"500":{"description":"Internal error"}}}},"/api/v1/projects/{projectId}/staging-connection":{"post":{"operationId":"connectStaging","summary":"Connect a staging endpoint","description":"Stores a short-lived encrypted credential bound to an explicitly authorized staging or disposable tenant endpoint.","tags":["Projects"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid request"},"500":{"description":"Internal error"}}}},"/api/v1/projects/{projectId}/scenarios":{"get":{"operationId":"listScenarios","summary":"List evaluation scenarios","description":"Lists the locked evaluation denominator for an authorized project.","tags":["Evaluations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid request"},"500":{"description":"Internal error"}}},"post":{"operationId":"createScenario","summary":"Create an evaluation scenario","description":"Creates an immutable first version of an owner-supplied scenario and claims rubric.","tags":["Evaluations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid request"},"500":{"description":"Internal error"}}}},"/api/v1/projects/{projectId}/scenarios/{slug}/revisions":{"post":{"operationId":"reviseScenario","summary":"Create a scenario revision","description":"Creates a new immutable scenario revision and atomically retires the previous active revision.","tags":["Evaluations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid request"},"500":{"description":"Internal error"}}}},"/api/v1/projects/{projectId}/scenarios/{slug}/disable":{"post":{"operationId":"disableScenario","summary":"Disable a scenario","description":"Retires the active revision without altering its locked evaluation definition.","tags":["Evaluations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid request"},"500":{"description":"Internal error"}}}},"/api/v1/projects/{projectId}/evaluations":{"post":{"operationId":"createEvaluation","summary":"Start an agent evaluation","description":"Dispatches a durable scenario-by-model evaluation against the authorized test endpoint.","tags":["Evaluations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid request"},"500":{"description":"Internal error"}}}},"/api/v1/projects/{projectId}/watchtower":{"post":{"operationId":"runWatchtower","summary":"Run the model watchtower","description":"Runs a curated current model against the authorized project scenario bank.","tags":["Evaluations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid request"},"500":{"description":"Internal error"}}}},"/api/v1/projects/{projectId}/competitors":{"get":{"operationId":"listProjectCompetitors","summary":"List selection-share competitors","description":"Lists competitor projects whose latest published tool schemas are included as non-executable selection stubs.","tags":["Evaluations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid request"},"500":{"description":"Internal error"}}},"post":{"operationId":"addProjectCompetitor","summary":"Add a selection-share competitor","description":"Adds a managed project as a schema-accurate, non-executable competitor in later agent evaluations.","tags":["Evaluations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid request"},"500":{"description":"Internal error"}}}},"/api/v1/eval-cells/{cellId}/repetitions/{repetition}":{"get":{"operationId":"getReviewableEvaluationTrace","summary":"Get an evaluation repetition","description":"Returns the redacted trace, locked rubric, and original judge decision for an authorized human review.","tags":["Evaluations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid request"},"500":{"description":"Internal error"}}}},"/api/v1/eval-cells/{cellId}/reviews":{"post":{"operationId":"reviewEvaluationTrace","summary":"Record a human evaluation review","description":"Records an immutable human review revision, audits the judge diff, and recomputes affected evidence with the human decision taking precedence.","tags":["Evaluations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid request"},"500":{"description":"Internal error"}}}},"/api/v1/projects/{projectId}/judge-calibration":{"get":{"operationId":"getProjectJudgeCalibration","summary":"Get project judge calibration","description":"Returns judge-versus-human agreement, pass precision and recall, and the labelled sample count for an authorized project.","tags":["Evaluations"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid request"},"500":{"description":"Internal error"}}}},"/api/v1/methodology/judge-calibration":{"get":{"operationId":"getPublishedJudgeCalibration","summary":"Get published judge calibration","description":"Returns aggregate judge-versus-human calibration metrics and whether the 50-label publication threshold has been reached.","tags":["Methodology"],"security":[],"responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid request"},"500":{"description":"Internal error"}}}},"/openapi.json":{"get":{"operationId":"openApi","summary":"OpenAPI document","description":"Returns the Invokely OpenAPI document generated from the endpoint registry.","tags":["Documentation"],"security":[],"responses":{"200":{"description":"Successful response"},"400":{"description":"Invalid request"},"500":{"description":"Internal error"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}}}}