{"openapi":"3.1.1","info":{"title":"AutoDevOps Verification and Agent Activity API","summary":"Signed agent activity, approval, evidence, and provenance endpoints.","description":"AutoDevOps provides pre-production verification for AI coding agents. The public integration routes ingest signed events and bridge approval or evidence workflows. The service does not proxy model calls.","version":"2026-08-21","contact":{"name":"AutoDevOps developer support","url":"https://autodevops.ai/documentation"},"termsOfService":"https://autodevops.ai/terms"},"servers":[{"url":"https://autodevops.ai","description":"AutoDevOps public site and portal edge"}],"externalDocs":{"description":"AutoDevOps developer documentation","url":"https://autodevops.ai/documentation"},"tags":[{"name":"Runtime","description":"Signed agent activity and approval bridge requests."},{"name":"Evidence","description":"Review evidence and evidence exports."},{"name":"Provenance","description":"Read-only provenance queries for authenticated portal members."},{"name":"Public","description":"Public product request endpoints."}],"paths":{"/api/verification-portal/ingest":{"post":{"tags":["Runtime"],"operationId":"ingestRuntimeEvent","summary":"Ingest a signed agent activity event","description":"Accepts a signed JSON event from a verifier connector. The route applies timestamp, replay, size, rate, and team-scope checks.","parameters":[{"name":"x-verifier-timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]+$"},"description":"Unix timestamp in seconds. The accepted clock skew is five minutes."},{"name":"x-verifier-signature","in":"header","required":true,"schema":{"type":"string","pattern":"^sha256="},"description":"HMAC-SHA256 signature over `<timestamp>.<raw JSON body>`."},{"name":"x-verifier-signature-version","in":"header","required":true,"schema":{"type":"string","enum":["v1"]}},{"name":"x-verifier-signing-key-id","in":"header","required":false,"schema":{"type":"string"},"description":"Signing key identifier when the customer configures more than one key."},{"name":"x-verifier-team-id","in":"header","required":false,"schema":{"type":"string"}},{"name":"x-verifier-request-id","in":"header","required":false,"schema":{"type":"string"}},{"name":"x-verifier-idempotency-key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimePayload"}}}},"responses":{"200":{"description":"Event accepted or handled by the portal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimeResult"}}}},"400":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"415":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/verification-portal/runtime/approval-request":{"post":{"tags":["Runtime"],"operationId":"createRuntimeApprovalRequest","summary":"Create or read a signed approval request","parameters":[{"name":"x-verifier-timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]+$"},"description":"Unix timestamp in seconds. The accepted clock skew is five minutes."},{"name":"x-verifier-signature","in":"header","required":true,"schema":{"type":"string","pattern":"^sha256="},"description":"HMAC-SHA256 signature over `<timestamp>.<raw JSON body>`."},{"name":"x-verifier-signature-version","in":"header","required":true,"schema":{"type":"string","enum":["v1"]}},{"name":"x-verifier-signing-key-id","in":"header","required":false,"schema":{"type":"string"},"description":"Signing key identifier when the customer configures more than one key."},{"name":"x-verifier-team-id","in":"header","required":false,"schema":{"type":"string"}},{"name":"x-verifier-request-id","in":"header","required":false,"schema":{"type":"string"}},{"name":"x-verifier-idempotency-key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimePayload"}}}},"responses":{"200":{"description":"Approval request state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Approval"}}}},"400":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"415":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/verification-portal/runtime/approval-status":{"post":{"tags":["Runtime"],"operationId":"getRuntimeApprovalStatus","summary":"Read a signed approval request status","parameters":[{"name":"x-verifier-timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]+$"},"description":"Unix timestamp in seconds. The accepted clock skew is five minutes."},{"name":"x-verifier-signature","in":"header","required":true,"schema":{"type":"string","pattern":"^sha256="},"description":"HMAC-SHA256 signature over `<timestamp>.<raw JSON body>`."},{"name":"x-verifier-signature-version","in":"header","required":true,"schema":{"type":"string","enum":["v1"]}},{"name":"x-verifier-signing-key-id","in":"header","required":false,"schema":{"type":"string"},"description":"Signing key identifier when the customer configures more than one key."},{"name":"x-verifier-team-id","in":"header","required":false,"schema":{"type":"string"}},{"name":"x-verifier-request-id","in":"header","required":false,"schema":{"type":"string"}},{"name":"x-verifier-idempotency-key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimePayload"}}}},"responses":{"200":{"description":"Approval request state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Approval"}}}},"400":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"415":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/verification-portal/ingest/pr-webhook":{"post":{"tags":["Evidence"],"operationId":"ingestPullRequestReviewWebhook","summary":"Ingest a signed pull request review webhook","parameters":[{"name":"x-verifier-timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]+$"},"description":"Unix timestamp in seconds. The accepted clock skew is five minutes."},{"name":"x-verifier-signature","in":"header","required":true,"schema":{"type":"string","pattern":"^sha256="},"description":"HMAC-SHA256 signature over `<timestamp>.<raw JSON body>`."},{"name":"x-verifier-signature-version","in":"header","required":true,"schema":{"type":"string","enum":["v1"]}},{"name":"x-verifier-signing-key-id","in":"header","required":false,"schema":{"type":"string"},"description":"Signing key identifier when the customer configures more than one key."},{"name":"x-verifier-team-id","in":"header","required":false,"schema":{"type":"string"}},{"name":"x-verifier-request-id","in":"header","required":false,"schema":{"type":"string"}},{"name":"x-verifier-idempotency-key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimePayload"}}}},"responses":{"200":{"description":"Webhook processed.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"415":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/verification-portal/pr-evidence/github-webhook":{"post":{"tags":["Evidence"],"operationId":"processGitHubPullRequestEvidenceWebhook","summary":"Process a GitHub pull request evidence webhook","parameters":[{"name":"x-hub-signature-256","in":"header","required":true,"schema":{"type":"string"}},{"name":"x-github-event","in":"header","required":false,"schema":{"type":"string"}},{"name":"x-github-delivery","in":"header","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimePayload"}}}},"responses":{"200":{"description":"Webhook processed.","content":{"application/json":{"schema":{"type":"object"}}}},"202":{"description":"Webhook event ignored.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"502":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/verification-portal/provenance/v1/{endpoint}":{"post":{"tags":["Provenance"],"operationId":"runProvenanceQuery","summary":"Run an authenticated provenance query","parameters":[{"name":"x-verifier-timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]+$"},"description":"Unix timestamp in seconds. The accepted clock skew is five minutes."},{"name":"x-verifier-signature","in":"header","required":true,"schema":{"type":"string","pattern":"^sha256="},"description":"HMAC-SHA256 signature over `<timestamp>.<raw JSON body>`."},{"name":"x-verifier-signature-version","in":"header","required":true,"schema":{"type":"string","enum":["v1"]}},{"name":"x-verifier-signing-key-id","in":"header","required":false,"schema":{"type":"string"},"description":"Signing key identifier when the customer configures more than one key."},{"name":"x-verifier-team-id","in":"header","required":false,"schema":{"type":"string"}},{"name":"x-verifier-request-id","in":"header","required":false,"schema":{"type":"string"}},{"name":"x-verifier-idempotency-key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries."},{"name":"endpoint","in":"path","required":true,"schema":{"type":"string","enum":["sessions-touching","intents-for-change","originator","lineage"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimePayload"}}}},"responses":{"200":{"description":"Provenance query result.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/verification-portal/provenance/v1/blast-radius/snapshot":{"post":{"tags":["Provenance"],"operationId":"getPortalBlastRadiusSnapshot","summary":"Read a blast-radius snapshot","parameters":[{"name":"x-verifier-timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]+$"},"description":"Unix timestamp in seconds. The accepted clock skew is five minutes."},{"name":"x-verifier-signature","in":"header","required":true,"schema":{"type":"string","pattern":"^sha256="},"description":"HMAC-SHA256 signature over `<timestamp>.<raw JSON body>`."},{"name":"x-verifier-signature-version","in":"header","required":true,"schema":{"type":"string","enum":["v1"]}},{"name":"x-verifier-signing-key-id","in":"header","required":false,"schema":{"type":"string"},"description":"Signing key identifier when the customer configures more than one key."},{"name":"x-verifier-team-id","in":"header","required":false,"schema":{"type":"string"}},{"name":"x-verifier-request-id","in":"header","required":false,"schema":{"type":"string"}},{"name":"x-verifier-idempotency-key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimePayload"}}}},"responses":{"200":{"description":"Blast-radius snapshot.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/verification-portal/pr-evidence":{"get":{"tags":["Evidence"],"operationId":"getPullRequestEvidence","summary":"Read pull request merge evidence","parameters":[{"name":"prNumber","in":"query","required":false,"schema":{"type":"integer","minimum":1}},{"name":"repository","in":"query","required":false,"schema":{"type":"string"}},{"name":"headSha","in":"query","required":false,"schema":{"type":"string"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","enum":["json","markdown"],"default":"json"}}],"responses":{"200":{"description":"Merge evidence in JSON or Markdown.","content":{"application/json":{"schema":{"type":"object"}},"text/markdown":{"schema":{"type":"string"}}}},"401":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/verification-portal/reports/risk-prevented":{"get":{"tags":["Evidence"],"operationId":"getRiskPreventedReport","summary":"Read the risk-prevented report","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","enum":["json","markdown"],"default":"json"}}],"responses":{"200":{"description":"Risk-prevented report.","content":{"application/json":{"schema":{"type":"object"}},"text/markdown":{"schema":{"type":"string"}}}},"401":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/verification-portal/search":{"get":{"tags":["Evidence"],"operationId":"searchPortalCommands","summary":"Search portal commands for an authenticated member","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string"}},{"name":"mode","in":"query","required":false,"schema":{"type":"string","enum":["developer","oversight"]}}],"responses":{"200":{"description":"Search results.","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/request-demo":{"post":{"tags":["Public"],"operationId":"requestDemo","summary":"Submit a demo request","description":"Public form endpoint. It applies validation, rate limits, and CAPTCHA checks when configured.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DemoRequest"}}}},"responses":{"200":{"description":"Demo request accepted.","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"]}}}},"400":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Structured JSON error with a stable code and a resolution hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}}},"components":{"securitySchemes":{"VerifierSignature":{"type":"apiKey","in":"header","name":"x-verifier-signature","description":"HMAC-SHA256 signature. Pair this header with the timestamp, version, and key headers documented on each signed operation."},"GitHubWebhookSignature":{"type":"apiKey","in":"header","name":"x-hub-signature-256"}},"schemas":{"ApiError":{"type":"object","required":["error","code","message","resolution"],"properties":{"error":{"type":"string","description":"Backward-compatible copy of message."},"code":{"type":"string","example":"API_ROUTE_NOT_FOUND"},"message":{"type":"string"},"resolution":{"type":"string","description":"Action the caller can take to resolve the error."},"requestId":{"type":"string"}}},"RuntimePayload":{"type":"object","description":"Runtime payload. The exact event schema depends on the documented connector or approval operation.","additionalProperties":true},"RuntimeResult":{"type":"object","additionalProperties":true},"Approval":{"type":"object","additionalProperties":true,"properties":{"approval_id":{"type":"string"},"status":{"type":"string","enum":["pending","approved","denied","expired"]}}},"DemoRequest":{"type":"object","required":["name","email","company","teamSize","cloudContext"],"properties":{"name":{"type":"string"},"email":{"type":"string","format":"email"},"company":{"type":"string"},"teamSize":{"type":"string"},"cloudContext":{"type":"string"},"message":{"type":"string"}}}}}}