{"openapi":"3.1.0","info":{"title":"Platphorm Ready API","version":"1.0.0","description":"Evidence-backed conformity, readiness, drift, and execution verification."},"servers":[{"url":"https://platphormready.platphormnews.com"}],"paths":{"/api/health":{"get":{"operationId":"getHealth","responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/self-assessment":{"get":{"operationId":"getSelfAssessment","description":"Run bounded, read-only live checks against the published PlatPhorm Ready contract and registries.","x-platphorm":{"capabilityId":"self.assess","sideEffects":"READ_ONLY","risk":"READ_ONLY","output":{"required":["schema","status","summary"]}},"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/v1/self-assessment":{"get":{"operationId":"getSelfAssessmentVersioned","description":"Versioned alias for the public self-assessment.","responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/v1/controls":{"get":{"operationId":"listControls","responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/v1/tests":{"get":{"operationId":"listReadyTests","responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/v1/profiles":{"get":{"operationId":"listVerificationProfiles","responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/v1/adapters":{"get":{"operationId":"listSpecialistAdapters","description":"Return runtime-backed scanner status, authority rationale, bounded live capability discovery, health evidence, and source-labeled discovery evidence. Unavailable scanners remain UNKNOWN.","responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/v1/verification/plan":{"post":{"operationId":"createVerificationPlan","responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/v1/network/assessments":{"post":{"operationId":"queueNetworkAssessment","security":[{"PlatPhormApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkAssessmentRequest"}}}},"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/v1/network/assessments/{id}":{"get":{"operationId":"getNetworkAssessment","security":[{"PlatPhormApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/network/assessments":{"post":{"operationId":"queueNetworkAssessmentLegacyPath","security":[{"PlatPhormApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkAssessmentRequest"}}}},"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/network/assessments/{id}":{"get":{"operationId":"getNetworkAssessmentLegacyPath","security":[{"PlatPhormApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/v1/verification/contracts":{"get":{"operationId":"getAssessmentContracts","responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/v1/verification/schema":{"get":{"operationId":"getVerificationSchema","responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/v1/verification/runs":{"post":{"operationId":"queueVerificationRun","security":[{"PlatPhormApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["target"],"properties":{"target":{"type":"string","format":"uri","pattern":"^https://"},"repository":{"type":"string"},"mode":{"type":"string","enum":["WEB_ONLY","WEB_BROWSER","AGENT_REPOSITORY","AGENT_PROVIDER","FULL"]},"profiles":{"type":"array","items":{"type":"string"}},"idempotency_key":{"type":"string","maxLength":200},"orchestration_mode":{"type":"string","enum":["AUTO","LOCAL_ONLY","SPECIALISTS_ONLY","CONSUME_SUPPLIED"]},"specialist_results":{"type":"array","items":{"type":"object"}},"provider_project":{"type":"string","description":"Vercel project id/name reference; never a token."},"cloudflare_zone_id":{"type":"string"},"cloudflare_account_id":{"type":"string"},"execution_id":{"type":"string"},"parent_run_id":{"type":"string"},"root_orchestrator":{"type":"string"},"visited_services":{"type":"array","items":{"type":"string"}},"depth":{"type":"integer","minimum":0,"maximum":10},"scan_level":{"type":"string","enum":["QUICK","STANDARD","FULL","MIGRATION","REPOSITORY","NETWORK"],"description":"Requested scan depth. NETWORK uses bounded graph and sitemap fan-out through the network assessment endpoint."}}}}}},"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}},"get":{"operationId":"listVerificationRuns","description":"List durable verification runs from Cloudflare D1 by requester and terminal or active status. Full reports remain in R2 and are retrieved by run ID.","security":[{"PlatPhormApiKey":[]}],"parameters":[{"name":"requested_by","in":"query","schema":{"type":"string"}},{"name":"status","in":"query","schema":{"type":"string","description":"Comma-separated queued, running, completed, failed, expired, or cancelled states."}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/v1/verification/runs/{id}":{"get":{"operationId":"getVerificationRun","security":[{"PlatPhormApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/v1/verification/runs/{id}/cancel":{"post":{"operationId":"cancelVerificationRun","description":"Terminate an active Cloudflare Workflow and preserve a cancelled terminal state.","security":[{"PlatPhormApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/v1/verification/runs/{id}/result":{"get":{"operationId":"getVerificationResult","security":[{"PlatPhormApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/v1/verification/runs/{id}/specialists":{"post":{"operationId":"ingestSpecialistResult","security":[{"PlatPhormApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/assessments":{"post":{"operationId":"createAssessment","security":[{"PlatPhormApiKey":[]}],"x-platphorm":{"capabilityId":"web.assess","sideEffects":"NETWORK_READ","risk":"NETWORK_READ","errors":["401"],"output":{"required":["id","status"]}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssessmentRequest"}}}},"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/assessments/{id}":{"get":{"operationId":"getAssessment","security":[{"PlatPhormApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/assessments/{id}/result":{"get":{"operationId":"getAssessmentResult","security":[{"PlatPhormApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/assessments/{id}/report":{"get":{"operationId":"getAssessmentReport","description":"Return the JSON report by default or an escaped human-readable HTML report with format=html or Accept: text/html.","security":[{"PlatPhormApiKey":[]}],"x-platphorm":{"capabilityId":"web.report.html","sideEffects":"READ_ONLY","risk":"READ_ONLY","errors":["401"],"output":{"required":["id","target","status"]}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","enum":["json","html"]}}],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/v1/verification/ui/report":{"get":{"operationId":"getPublicAssessmentHtmlReport","description":"Return a human-readable HTML report for a public dashboard run. The report is escaped and public-safe.","parameters":[{"name":"id","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/assessments/{id}/evidence":{"get":{"operationId":"getAssessmentEvidence","description":"Return observations, specialist evidence, source-preserving evidence edges, deduplicated evidence clusters, scanner contributions, scanner coverage, and requirement coverage.","security":[{"PlatPhormApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/assessments/{id}/conformity":{"get":{"operationId":"getAssessmentConformity","security":[{"PlatPhormApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/assessments/{id}/drift":{"get":{"operationId":"getAssessmentDrift","security":[{"PlatPhormApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/assessments/{id}/contradictions":{"get":{"operationId":"getAssessmentContradictions","security":[{"PlatPhormApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/assessments/{id}/repair-plan":{"get":{"operationId":"getAssessmentRepairPlan","security":[{"PlatPhormApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/comparisons":{"post":{"operationId":"createComparison","security":[{"PlatPhormApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComparisonRequest"}}}},"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/comparisons/{id}":{"get":{"operationId":"getComparison","security":[{"PlatPhormApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/tests":{"get":{"operationId":"listTests","responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/probes":{"get":{"operationId":"listProbes","responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/assertions":{"get":{"operationId":"listAssertions","responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/profiles":{"get":{"operationId":"listProfiles","responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/standards":{"get":{"operationId":"listStandards","responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/invariants":{"get":{"operationId":"listInvariants","responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/archetypes":{"get":{"operationId":"listArchetypes","responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/drift-types":{"get":{"operationId":"listDriftTypes","responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/v1/assessments/rollup":{"post":{"operationId":"rollupAssessments","security":[{"PlatPhormApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RollupRequest"}}}},"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/assessments/rollup":{"post":{"operationId":"rollupAssessmentsLegacyPath","security":[{"PlatPhormApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RollupRequest"}}}},"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/v1/assessment-events":{"post":{"operationId":"ingestAssessmentEvent","security":[{"PlatPhormApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssessmentEvent"}}}},"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/v1/assessment-events/{storage_id}":{"get":{"operationId":"getAssessmentEvent","security":[{"PlatPhormApiKey":[]}],"parameters":[{"name":"storage_id","in":"path","required":true,"schema":{"type":"string","pattern":"^assessment_event_[a-f0-9]{48}$"}}],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/v1/assessment-events/{storage_id}/replay":{"post":{"operationId":"replayAssessmentEvent","security":[{"PlatPhormApiKey":[]}],"parameters":[{"name":"storage_id","in":"path","required":true,"schema":{"type":"string","pattern":"^assessment_event_[a-f0-9]{48}$"}}],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/assessment-events":{"post":{"operationId":"ingestAssessmentEventLegacyPath","security":[{"PlatPhormApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssessmentEvent"}}}},"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/assessment-events/{storage_id}":{"get":{"operationId":"getAssessmentEventLegacyPath","security":[{"PlatPhormApiKey":[]}],"parameters":[{"name":"storage_id","in":"path","required":true,"schema":{"type":"string","pattern":"^assessment_event_[a-f0-9]{48}$"}}],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/assessment-events/{storage_id}/replay":{"post":{"operationId":"replayAssessmentEventLegacyPath","security":[{"PlatPhormApiKey":[]}],"parameters":[{"name":"storage_id","in":"path","required":true,"schema":{"type":"string","pattern":"^assessment_event_[a-f0-9]{48}$"}}],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/v1/repository-assessments":{"post":{"operationId":"queueRepositoryAssessment","security":[{"PlatPhormApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RepositoryAssessmentRequest"}}}},"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/repository-assessments":{"post":{"operationId":"queueRepositoryAssessmentStablePath","security":[{"PlatPhormApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RepositoryAssessmentRequest"}}}},"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/network-assessments":{"post":{"operationId":"queueNetworkAssessmentStablePath","security":[{"PlatPhormApiKey":[]}],"x-platphorm":{"capabilityId":"network.assess","sideEffects":"NETWORK_READ","risk":"NETWORK_READ","errors":["401"],"output":{"required":["id","status"]}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkAssessmentRequest"}}}},"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/network-assessments/{id}":{"get":{"operationId":"getNetworkAssessmentStablePath","security":[{"PlatPhormApiKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/v1/certificates":{"get":{"operationId":"listCertificates","responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}},"/api/mcp":{"get":{"operationId":"getMcpMetadata","responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}},"post":{"operationId":"callMcp","responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required"}}}}},"components":{"securitySchemes":{"PlatPhormApiKey":{"type":"http","scheme":"bearer","bearerFormat":"PLATPHORM_API_KEY","description":"Shared PLATPHORM_API_KEY. Dashboard uses a server-side proxy."}},"schemas":{"AssessmentRequest":{"type":"object","required":["target"],"properties":{"target":{"type":"string","format":"uri","pattern":"^https://"},"repository":{"type":"string"},"mode":{"type":"string","enum":["WEB_ONLY","WEB_BROWSER","AGENT_REPOSITORY","AGENT_PROVIDER","FULL"]},"profiles":{"type":"array","items":{"type":"string"}},"idempotency_key":{"type":"string","maxLength":200},"orchestration_mode":{"type":"string","enum":["AUTO","LOCAL_ONLY","SPECIALISTS_ONLY","CONSUME_SUPPLIED"]},"specialist_results":{"type":"array","items":{"type":"object"}},"provider_project":{"type":"string"},"cloudflare_zone_id":{"type":"string"},"cloudflare_account_id":{"type":"string"},"scan_level":{"type":"string","enum":["QUICK","STANDARD","FULL","MIGRATION","REPOSITORY","NETWORK"],"description":"Requested scan depth. NETWORK uses bounded graph and sitemap fan-out through the network assessment endpoint."}}},"ComparisonRequest":{"type":"object","required":["baseline_target","candidate_target"],"properties":{"baseline_target":{"type":"string","format":"uri","pattern":"^https://"},"candidate_target":{"type":"string","format":"uri","pattern":"^https://"},"production_target":{"type":"string","format":"uri","pattern":"^https://"},"comparison_mode":{"type":"string","enum":["STRICT_PARITY","SEMANTIC_PARITY","CAPABILITY_PARITY"]},"mode":{"type":"string","enum":["WEB_ONLY","WEB_BROWSER","AGENT_REPOSITORY","AGENT_PROVIDER","FULL"]},"profiles":{"type":"array","items":{"type":"string"}},"idempotency_key":{"type":"string","maxLength":200},"orchestration_mode":{"type":"string","enum":["AUTO","LOCAL_ONLY","SPECIALISTS_ONLY","CONSUME_SUPPLIED"]}}},"RepositoryAssessmentRequest":{"type":"object","required":["repository"],"properties":{"repository":{"type":"string","description":"GitHub owner/repository or https://github.com/owner/repository URL"},"target":{"type":"string","format":"uri","pattern":"^https://"},"mode":{"type":"string","enum":["AGENT_REPOSITORY","FULL"]},"profiles":{"type":"array","items":{"type":"string"}},"idempotency_key":{"type":"string","maxLength":200},"requested_by":{"type":"string"},"provider_project":{"type":"string"},"cloudflare_zone_id":{"type":"string"},"cloudflare_account_id":{"type":"string"},"scan_level":{"type":"string","enum":["QUICK","STANDARD","FULL","MIGRATION","REPOSITORY","NETWORK"],"description":"Requested scan depth. NETWORK uses bounded graph and sitemap fan-out through the network assessment endpoint."}}},"RollupRequest":{"type":"object","required":["target","assessments"],"properties":{"target":{"type":"string","format":"uri","pattern":"^https://"},"assessments":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"object"}},"mode":{"type":"string","enum":["WEB_ONLY","WEB_BROWSER","AGENT_REPOSITORY","AGENT_PROVIDER","FULL"]},"execution_id":{"type":"string"},"orchestration_mode":{"type":"string","enum":["AUTO","LOCAL_ONLY","SPECIALISTS_ONLY","CONSUME_SUPPLIED"]},"rubric":{"type":"string"}}},"AssessmentEvent":{"type":"object","required":["id","type","source","subject","data"],"properties":{"specversion":{"type":"string","enum":["1.0"]},"id":{"type":"string"},"type":{"type":"string","enum":["platphorm.assessment.started@1","platphorm.assessment.completed@1","platphorm.assessment.failed@1","platphorm.assessment.expired@1","assessment.started","assessment.completed","assessment.failed","assessment.expired"]},"source":{"type":"string"},"subject":{"type":"string"},"time":{"type":"string","format":"date-time"},"datacontenttype":{"type":"string","enum":["application/json"]},"data":{"type":"object"}}},"NetworkAssessmentRequest":{"type":"object","properties":{"root_url":{"type":"string","format":"uri","pattern":"^https://platphormnews\\.com$"},"source":{"type":"string","enum":["graph","sitemap","both"]},"max_targets":{"type":"integer","minimum":1,"maximum":100},"concurrency":{"type":"integer","minimum":1,"maximum":8},"scan_level":{"type":"string","enum":["QUICK","STANDARD","FULL"]},"mode":{"type":"string","enum":["WEB_ONLY","WEB_BROWSER","FULL"]},"requested_by":{"type":"string"},"idempotency_key":{"type":"string","maxLength":200},"execution_id":{"type":"string"}}},"SelfAssessment":{"type":"object","required":["schema","target","status","generatedAt","summary","assertions","evidence"],"properties":{"schema":{"const":"platphorm.ready.self-assessment@1"},"target":{"type":"string","format":"uri"},"status":{"type":"string","enum":["PASS","FAIL","CONDITIONAL","UNKNOWN"]},"generatedAt":{"type":"string","format":"date-time"},"summary":{"type":"object"},"assertions":{"type":"array","items":{"type":"object"}},"evidence":{"type":"array","items":{"type":"object"}},"limitations":{"type":"array","items":{"type":"string"}}}}}}}