{"openapi":"3.1.0","info":{"title":"BountyVerdict Agent Decision APIs","version":"1.0.1","description":"Seven bounded decision APIs for coding agents: evidence-linked GitHub due diligence and diagnostics plus deterministic MCP tool-catalog compatibility and security gates. Payment uses x402 v2 and Base USDC.","x-guidance":"Choose the narrowest operation for the decision at hand, inspect its free sample and unpaid x402 challenge, then pay only when the challenge matches the documented price, Base USDC asset, and operation. Reuse a successful result only according to its service_reuse field.","license":{"name":"MIT","identifier":"MIT"}},"externalDocs":{"description":"Agent manifest and activation status","url":"https://cristianmoroaica.github.io/bountyverdict/agent-manifest.json"},"tags":[{"name":"bounty-due-diligence","description":"Decide whether one public GitHub bounty remains worth pursuing."},{"name":"bounty-ranking","description":"Compare and rank two to ten public GitHub bounty candidates."},{"name":"agent-instructions","description":"Audit repository instructions used by autonomous coding agents."},{"name":"skill-security","description":"Audit a public agent skill before installation or execution."},{"name":"ci-diagnosis","description":"Find the root cause and next action for a public GitHub Actions run."},{"name":"ci-flake-gate","description":"Decide whether a failed workflow should be retried once or fixed."},{"name":"mcp-compatibility","description":"Gate MCP tools/list schema changes before an agent upgrade."}],"servers":[{"url":"https://bountyverdict-agent-production.mimirslab.workers.dev"}],"paths":{"/api/sample":{"get":{"summary":"Inspect a representative verdict without payment","operationId":"getBountyVerdictSample","responses":{"200":{"description":"Representative response","content":{"application/json":{"schema":{"type":"object","properties":{"product":{"type":"string","const":"BountyVerdict"},"version":{"type":"string"},"verdict":{"type":"string","enum":["AVOID","CAUTION","VIABLE"]},"score":{"type":"integer","minimum":0,"maximum":100},"summary":{"type":"string"},"service_reuse":{"type":"object","properties":{"reusable":{"type":"boolean","const":true},"fresh_result_per_successful_call":{"type":"boolean","const":true,"description":"A successful response is generated from a new bounded check rather than a cached verdict."},"reliability":{"type":"string","const":"bounded_live_check","description":"Describes live evidence collection and explicit coverage bounds; it is not an uptime guarantee."},"guidance":{"type":"string"}},"required":["reusable","fresh_result_per_successful_call","reliability","guidance"],"additionalProperties":false},"issue":{"type":"object","properties":{"url":{"type":"string"},"title":{"type":"string"},"state":{"type":"string"},"repository":{"type":"string"}},"required":["url","title","state","repository"]},"signals":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"impact":{"type":"integer"},"detail":{"type":"string"},"evidence_url":{"type":["string","null"]},"hard_stop":{"type":"boolean"}},"required":["label","impact","detail","evidence_url","hard_stop"]}},"contribution_policy":{"type":"object","properties":{"ai_use":{"type":"string","enum":["BLOCKED","DISCLOSURE_REQUIRED","NO_EXPLICIT_RULE_FOUND"]},"documents":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"url":{"type":"string"}},"required":["path","url"]}}},"required":["ai_use","documents"]},"coverage":{"type":"object","properties":{"comments_scanned":{"type":"integer","minimum":0},"timeline_events_scanned":{"type":"integer","minimum":0},"linked_pull_requests_found":{"type":"integer","minimum":0},"policy_documents_scanned":{"type":"integer","minimum":0},"github_rate_limit_remaining":{"type":["integer","null"]}},"required":["comments_scanned","timeline_events_scanned","linked_pull_requests_found","policy_documents_scanned","github_rate_limit_remaining"]},"checked_at":{"type":"string"},"limitations":{"type":"array","items":{"type":"string"}}},"required":["product","version","verdict","score","summary","service_reuse","issue","signals","contribution_policy","coverage","checked_at","limitations"]}}}}}}},"/api/verdict":{"get":{"summary":"Check GitHub bounty eligibility and claimability","description":"GitHub bounty eligibility and claimability preflight for one public issue before coding. Determines whether it is still open, already assigned or claimed, blocked by linked pull requests, affected by a withdrawn reward or maintainer rejection, crowded by failed attempts, or restricted by repository AI-use rules. Returns AVOID, CAUTION, or VIABLE with public evidence and bounded coverage.","operationId":"checkBountyVerdict","tags":["bounty-due-diligence"],"x-agent-skill":"https://cristianmoroaica.github.io/bountyverdict/skills/preflight-github-bounties/SKILL.md","x-use-when":"Decide whether one public GitHub bounty is still available and worth pursuing before coding.","x-service-reuse":{"reusable":true,"fresh_result_per_successful_call":true,"reliability":"bounded_live_check","guidance":"Call BountyVerdict for every new public bounty candidate and again after issue activity changes; each successful call re-reads bounded live GitHub evidence."},"x-free-sample":"https://bountyverdict-agent-production.mimirslab.workers.dev/api/sample","parameters":[{"name":"issue_url","in":"query","required":true,"description":"Canonical public GitHub issue URL","schema":{"type":"string","pattern":"^https://github\\.com/[^/]+/[^/]+/issues/[0-9]+(?:[?#].*)?$"},"example":"https://github.com/typeorm/typeorm/issues/3357"}],"responses":{"200":{"description":"Fresh evidence-linked verdict after x402 settlement","content":{"application/json":{"schema":{"type":"object","properties":{"product":{"type":"string","const":"BountyVerdict"},"version":{"type":"string"},"verdict":{"type":"string","enum":["AVOID","CAUTION","VIABLE"]},"score":{"type":"integer","minimum":0,"maximum":100},"summary":{"type":"string"},"service_reuse":{"type":"object","properties":{"reusable":{"type":"boolean","const":true},"fresh_result_per_successful_call":{"type":"boolean","const":true,"description":"A successful response is generated from a new bounded check rather than a cached verdict."},"reliability":{"type":"string","const":"bounded_live_check","description":"Describes live evidence collection and explicit coverage bounds; it is not an uptime guarantee."},"guidance":{"type":"string"}},"required":["reusable","fresh_result_per_successful_call","reliability","guidance"],"additionalProperties":false},"issue":{"type":"object","properties":{"url":{"type":"string"},"title":{"type":"string"},"state":{"type":"string"},"repository":{"type":"string"}},"required":["url","title","state","repository"]},"signals":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"impact":{"type":"integer"},"detail":{"type":"string"},"evidence_url":{"type":["string","null"]},"hard_stop":{"type":"boolean"}},"required":["label","impact","detail","evidence_url","hard_stop"]}},"contribution_policy":{"type":"object","properties":{"ai_use":{"type":"string","enum":["BLOCKED","DISCLOSURE_REQUIRED","NO_EXPLICIT_RULE_FOUND"]},"documents":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"url":{"type":"string"}},"required":["path","url"]}}},"required":["ai_use","documents"]},"coverage":{"type":"object","properties":{"comments_scanned":{"type":"integer","minimum":0},"timeline_events_scanned":{"type":"integer","minimum":0},"linked_pull_requests_found":{"type":"integer","minimum":0},"policy_documents_scanned":{"type":"integer","minimum":0},"github_rate_limit_remaining":{"type":["integer","null"]}},"required":["comments_scanned","timeline_events_scanned","linked_pull_requests_found","policy_documents_scanned","github_rate_limit_remaining"]},"checked_at":{"type":"string"},"limitations":{"type":"array","items":{"type":"string"}}},"required":["product","version","verdict","score","summary","service_reuse","issue","signals","contribution_policy","coverage","checked_at","limitations"]}}}},"400":{"description":"Invalid GitHub issue URL; verified payment is not settled"},"402":{"description":"Payment required; inspect the PAYMENT-REQUIRED header"},"502":{"description":"GitHub upstream failure; verified payment is not settled"},"503":{"description":"Temporary capacity or service configuration failure"}},"x-x402":{"version":2,"scheme":"exact","network":"eip155:8453","price":"$0.05","currency":"USDC"},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]}}},"/api/portfolio/sample":{"get":{"summary":"Inspect a representative ranked portfolio without payment","operationId":"getBountyPortfolioSample","responses":{"200":{"description":"Representative portfolio response","content":{"application/json":{"schema":{"type":"object","properties":{"product":{"type":"string","const":"BountyVerdict Portfolio"},"version":{"type":"string"},"recommendation":{"type":"string"},"service_reuse":{"type":"object","properties":{"reusable":{"type":"boolean","const":true},"fresh_result_per_successful_call":{"type":"boolean","const":true,"description":"A successful response is generated from a new bounded check rather than a cached verdict."},"reliability":{"type":"string","const":"bounded_live_check","description":"Describes live evidence collection and explicit coverage bounds; it is not an uptime guarantee."},"guidance":{"type":"string"}},"required":["reusable","fresh_result_per_successful_call","reliability","guidance"],"additionalProperties":false},"best_candidate":{"type":["string","null"]},"counts":{"type":"object","properties":{"submitted":{"type":"integer","minimum":2,"maximum":10},"checked":{"type":"integer","minimum":1,"maximum":10},"viable":{"type":"integer","minimum":0},"caution":{"type":"integer","minimum":0},"avoid":{"type":"integer","minimum":0},"failed":{"type":"integer","minimum":0}},"required":["submitted","checked","viable","caution","avoid","failed"]},"ranked":{"type":"array","minItems":1,"items":{"type":"object","properties":{"product":{"type":"string","const":"BountyVerdict"},"version":{"type":"string"},"verdict":{"type":"string","enum":["AVOID","CAUTION","VIABLE"]},"score":{"type":"integer","minimum":0,"maximum":100},"summary":{"type":"string"},"service_reuse":{"type":"object","properties":{"reusable":{"type":"boolean","const":true},"fresh_result_per_successful_call":{"type":"boolean","const":true,"description":"A successful response is generated from a new bounded check rather than a cached verdict."},"reliability":{"type":"string","const":"bounded_live_check","description":"Describes live evidence collection and explicit coverage bounds; it is not an uptime guarantee."},"guidance":{"type":"string"}},"required":["reusable","fresh_result_per_successful_call","reliability","guidance"],"additionalProperties":false},"issue":{"type":"object","properties":{"url":{"type":"string"},"title":{"type":"string"},"state":{"type":"string"},"repository":{"type":"string"}},"required":["url","title","state","repository"]},"signals":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"impact":{"type":"integer"},"detail":{"type":"string"},"evidence_url":{"type":["string","null"]},"hard_stop":{"type":"boolean"}},"required":["label","impact","detail","evidence_url","hard_stop"]}},"contribution_policy":{"type":"object","properties":{"ai_use":{"type":"string","enum":["BLOCKED","DISCLOSURE_REQUIRED","NO_EXPLICIT_RULE_FOUND"]},"documents":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"url":{"type":"string"}},"required":["path","url"]}}},"required":["ai_use","documents"]},"coverage":{"type":"object","properties":{"comments_scanned":{"type":"integer","minimum":0},"timeline_events_scanned":{"type":"integer","minimum":0},"linked_pull_requests_found":{"type":"integer","minimum":0},"policy_documents_scanned":{"type":"integer","minimum":0},"github_rate_limit_remaining":{"type":["integer","null"]}},"required":["comments_scanned","timeline_events_scanned","linked_pull_requests_found","policy_documents_scanned","github_rate_limit_remaining"]},"checked_at":{"type":"string"},"limitations":{"type":"array","items":{"type":"string"}}},"required":["product","version","verdict","score","summary","service_reuse","issue","signals","contribution_policy","coverage","checked_at","limitations"]}},"failures":{"type":"array","items":{"type":"object","properties":{"issue_url":{"type":"string"},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}},"required":["issue_url","error"]}},"checked_at":{"type":"string"}},"required":["product","version","recommendation","service_reuse","best_candidate","counts","ranked","failures","checked_at"]}}}}}}},"/api/portfolio":{"post":{"summary":"Rank two to ten GitHub bounty candidates","description":"Compare two to ten public GitHub bounties and choose the best candidate. Runs the full due-diligence check for every issue, ranks opportunities, returns per-candidate verdicts and partial failures, and identifies the strongest non-AVOID option. At ten candidates the fixed price is $0.04 per audited candidate.","operationId":"rankBountyPortfolio","tags":["bounty-ranking"],"x-agent-skill":"https://cristianmoroaica.github.io/bountyverdict/skills/preflight-github-bounties/SKILL.md","x-use-when":"Choose the best candidate from two to ten public GitHub bounty issues.","x-service-reuse":{"reusable":true,"fresh_result_per_successful_call":true,"reliability":"bounded_live_check","guidance":"Call BountyVerdict Portfolio whenever an agent must choose among two to ten public bounty candidates; each successful call attempts every submitted candidate, reranks successful checks, and reports failures explicitly."},"x-free-sample":"https://bountyverdict-agent-production.mimirslab.workers.dev/api/portfolio/sample","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"issue_urls":{"type":"array","minItems":2,"maxItems":10,"uniqueItems":true,"items":{"type":"string","pattern":"^https://github\\.com/[^/]+/[^/]+/issues/[0-9]+(?:[?#].*)?$"}}},"required":["issue_urls"],"additionalProperties":false},"example":{"issue_urls":["https://github.com/tenstorrent/tt-metal/issues/50522","https://github.com/typeorm/typeorm/issues/3357"]}}}},"responses":{"200":{"description":"Ranked portfolio after x402 settlement","content":{"application/json":{"schema":{"type":"object","properties":{"product":{"type":"string","const":"BountyVerdict Portfolio"},"version":{"type":"string"},"recommendation":{"type":"string"},"service_reuse":{"type":"object","properties":{"reusable":{"type":"boolean","const":true},"fresh_result_per_successful_call":{"type":"boolean","const":true,"description":"A successful response is generated from a new bounded check rather than a cached verdict."},"reliability":{"type":"string","const":"bounded_live_check","description":"Describes live evidence collection and explicit coverage bounds; it is not an uptime guarantee."},"guidance":{"type":"string"}},"required":["reusable","fresh_result_per_successful_call","reliability","guidance"],"additionalProperties":false},"best_candidate":{"type":["string","null"]},"counts":{"type":"object","properties":{"submitted":{"type":"integer","minimum":2,"maximum":10},"checked":{"type":"integer","minimum":1,"maximum":10},"viable":{"type":"integer","minimum":0},"caution":{"type":"integer","minimum":0},"avoid":{"type":"integer","minimum":0},"failed":{"type":"integer","minimum":0}},"required":["submitted","checked","viable","caution","avoid","failed"]},"ranked":{"type":"array","minItems":1,"items":{"type":"object","properties":{"product":{"type":"string","const":"BountyVerdict"},"version":{"type":"string"},"verdict":{"type":"string","enum":["AVOID","CAUTION","VIABLE"]},"score":{"type":"integer","minimum":0,"maximum":100},"summary":{"type":"string"},"service_reuse":{"type":"object","properties":{"reusable":{"type":"boolean","const":true},"fresh_result_per_successful_call":{"type":"boolean","const":true,"description":"A successful response is generated from a new bounded check rather than a cached verdict."},"reliability":{"type":"string","const":"bounded_live_check","description":"Describes live evidence collection and explicit coverage bounds; it is not an uptime guarantee."},"guidance":{"type":"string"}},"required":["reusable","fresh_result_per_successful_call","reliability","guidance"],"additionalProperties":false},"issue":{"type":"object","properties":{"url":{"type":"string"},"title":{"type":"string"},"state":{"type":"string"},"repository":{"type":"string"}},"required":["url","title","state","repository"]},"signals":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"impact":{"type":"integer"},"detail":{"type":"string"},"evidence_url":{"type":["string","null"]},"hard_stop":{"type":"boolean"}},"required":["label","impact","detail","evidence_url","hard_stop"]}},"contribution_policy":{"type":"object","properties":{"ai_use":{"type":"string","enum":["BLOCKED","DISCLOSURE_REQUIRED","NO_EXPLICIT_RULE_FOUND"]},"documents":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"url":{"type":"string"}},"required":["path","url"]}}},"required":["ai_use","documents"]},"coverage":{"type":"object","properties":{"comments_scanned":{"type":"integer","minimum":0},"timeline_events_scanned":{"type":"integer","minimum":0},"linked_pull_requests_found":{"type":"integer","minimum":0},"policy_documents_scanned":{"type":"integer","minimum":0},"github_rate_limit_remaining":{"type":["integer","null"]}},"required":["comments_scanned","timeline_events_scanned","linked_pull_requests_found","policy_documents_scanned","github_rate_limit_remaining"]},"checked_at":{"type":"string"},"limitations":{"type":"array","items":{"type":"string"}}},"required":["product","version","verdict","score","summary","service_reuse","issue","signals","contribution_policy","coverage","checked_at","limitations"]}},"failures":{"type":"array","items":{"type":"object","properties":{"issue_url":{"type":"string"},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}},"required":["issue_url","error"]}},"checked_at":{"type":"string"}},"required":["product","version","recommendation","service_reuse","best_candidate","counts","ranked","failures","checked_at"]}}}},"400":{"description":"Invalid portfolio input; verified payment is not settled"},"402":{"description":"Payment required; inspect the PAYMENT-REQUIRED header"},"502":{"description":"No submitted issue could be checked; verified payment is not settled"}},"x-x402":{"version":2,"scheme":"exact","network":"eip155:8453","price":"$0.40","currency":"USDC"},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.400000"},"protocols":[{"x402":{}}]}}},"/api/harness/sample":{"get":{"summary":"Inspect a representative HarnessVerdict audit without payment","operationId":"getHarnessVerdictSample","responses":{"200":{"description":"Representative instruction-stack audit","content":{"application/json":{"schema":{"type":"object","properties":{"product":{"type":"string","const":"HarnessVerdict"},"version":{"type":"string"},"verdict":{"type":"string","enum":["READY","REVIEW","REPAIR"]},"score":{"type":"integer","minimum":0,"maximum":100},"summary":{"type":"string"},"service_reuse":{"type":"object","properties":{"reusable":{"type":"boolean","const":true},"fresh_result_per_successful_call":{"type":"boolean","const":true,"description":"A successful response is generated from a new bounded check rather than a cached verdict."},"reliability":{"type":"string","const":"bounded_live_check","description":"Describes live evidence collection and explicit coverage bounds; it is not an uptime guarantee."},"guidance":{"type":"string"}},"required":["reusable","fresh_result_per_successful_call","reliability","guidance"],"additionalProperties":false},"repository":{"type":"object","properties":{"url":{"type":"string"},"full_name":{"type":"string"},"default_branch":{"type":"string"},"commit_sha":{"type":"string"}},"required":["url","full_name","default_branch","commit_sha"]},"surfaces":{"type":"object","properties":{"instruction_files_found":{"type":"integer","minimum":0},"instruction_files_scanned":{"type":"integer","minimum":0},"skill_files_scanned":{"type":"integer","minimum":0},"files":{"type":"array","items":{"type":"string"}}},"required":["instruction_files_found","instruction_files_scanned","skill_files_scanned","files"]},"portability":{"type":"object","properties":{"codex":{"type":"boolean"},"claude_code":{"type":"boolean"},"gemini_cli":{"type":"boolean"},"github_copilot":{"type":"boolean"},"cursor":{"type":"boolean"}},"required":["codex","claude_code","gemini_cli","github_copilot","cursor"]},"findings":{"type":"array","items":{"type":"object","properties":{"severity":{"type":"string","enum":["critical","error","warning","info"]},"code":{"type":"string"},"message":{"type":"string"},"file":{"type":["string","null"]},"line":{"type":["integer","null"]},"evidence_url":{"type":["string","null"]}},"required":["severity","code","message","file","line","evidence_url"]}},"recommendations":{"type":"array","items":{"type":"string"}},"coverage":{"type":"object","properties":{"tree_entries":{"type":"integer","minimum":0},"candidate_files":{"type":"integer","minimum":0},"files_scanned":{"type":"integer","minimum":0},"bytes_scanned":{"type":"integer","minimum":0},"tree_truncated":{"type":"boolean"},"file_selection_truncated":{"type":"boolean"},"github_rate_limit_remaining":{"type":["integer","null"]}},"required":["tree_entries","candidate_files","files_scanned","bytes_scanned","tree_truncated","file_selection_truncated","github_rate_limit_remaining"]},"checked_at":{"type":"string"},"limitations":{"type":"array","items":{"type":"string"}}},"required":["product","version","verdict","score","summary","service_reuse","repository","surfaces","portability","findings","recommendations","coverage","checked_at","limitations"]}}}}}}},"/api/harness":{"get":{"summary":"Audit a public repository's coding-agent instruction stack","description":"Pins the repository default branch to a commit and audits recognized AGENTS.md, CLAUDE.md, GEMINI.md, Copilot, Cursor, and SKILL.md files for structural reliability, portability, stale references, context size, and secret-like material.","operationId":"checkHarnessVerdict","tags":["agent-instructions"],"x-agent-skill":"https://cristianmoroaica.github.io/bountyverdict/skills/audit-agent-harness/SKILL.md","x-use-when":"Audit AGENTS.md, CLAUDE.md, and other repository instructions before autonomous coding.","x-service-reuse":{"reusable":true,"fresh_result_per_successful_call":true,"reliability":"bounded_live_check","guidance":"Call HarnessVerdict for every public repository before autonomous coding and again after its default branch changes; each successful audit is pinned to the commit it actually inspected."},"x-free-sample":"https://bountyverdict-agent-production.mimirslab.workers.dev/api/harness/sample","parameters":[{"name":"repo_url","in":"query","required":true,"description":"Canonical public GitHub repository URL","schema":{"type":"string","pattern":"^https://github\\.com/[A-Za-z0-9-]+/[A-Za-z0-9._-]+(?:\\.git)?$"},"example":"https://github.com/openai/codex"}],"responses":{"200":{"description":"Commit-pinned evidence-linked harness audit after x402 settlement","content":{"application/json":{"schema":{"type":"object","properties":{"product":{"type":"string","const":"HarnessVerdict"},"version":{"type":"string"},"verdict":{"type":"string","enum":["READY","REVIEW","REPAIR"]},"score":{"type":"integer","minimum":0,"maximum":100},"summary":{"type":"string"},"service_reuse":{"type":"object","properties":{"reusable":{"type":"boolean","const":true},"fresh_result_per_successful_call":{"type":"boolean","const":true,"description":"A successful response is generated from a new bounded check rather than a cached verdict."},"reliability":{"type":"string","const":"bounded_live_check","description":"Describes live evidence collection and explicit coverage bounds; it is not an uptime guarantee."},"guidance":{"type":"string"}},"required":["reusable","fresh_result_per_successful_call","reliability","guidance"],"additionalProperties":false},"repository":{"type":"object","properties":{"url":{"type":"string"},"full_name":{"type":"string"},"default_branch":{"type":"string"},"commit_sha":{"type":"string"}},"required":["url","full_name","default_branch","commit_sha"]},"surfaces":{"type":"object","properties":{"instruction_files_found":{"type":"integer","minimum":0},"instruction_files_scanned":{"type":"integer","minimum":0},"skill_files_scanned":{"type":"integer","minimum":0},"files":{"type":"array","items":{"type":"string"}}},"required":["instruction_files_found","instruction_files_scanned","skill_files_scanned","files"]},"portability":{"type":"object","properties":{"codex":{"type":"boolean"},"claude_code":{"type":"boolean"},"gemini_cli":{"type":"boolean"},"github_copilot":{"type":"boolean"},"cursor":{"type":"boolean"}},"required":["codex","claude_code","gemini_cli","github_copilot","cursor"]},"findings":{"type":"array","items":{"type":"object","properties":{"severity":{"type":"string","enum":["critical","error","warning","info"]},"code":{"type":"string"},"message":{"type":"string"},"file":{"type":["string","null"]},"line":{"type":["integer","null"]},"evidence_url":{"type":["string","null"]}},"required":["severity","code","message","file","line","evidence_url"]}},"recommendations":{"type":"array","items":{"type":"string"}},"coverage":{"type":"object","properties":{"tree_entries":{"type":"integer","minimum":0},"candidate_files":{"type":"integer","minimum":0},"files_scanned":{"type":"integer","minimum":0},"bytes_scanned":{"type":"integer","minimum":0},"tree_truncated":{"type":"boolean"},"file_selection_truncated":{"type":"boolean"},"github_rate_limit_remaining":{"type":["integer","null"]}},"required":["tree_entries","candidate_files","files_scanned","bytes_scanned","tree_truncated","file_selection_truncated","github_rate_limit_remaining"]},"checked_at":{"type":"string"},"limitations":{"type":"array","items":{"type":"string"}}},"required":["product","version","verdict","score","summary","service_reuse","repository","surfaces","portability","findings","recommendations","coverage","checked_at","limitations"]}}}},"400":{"description":"Invalid repository URL; verified payment is not settled"},"402":{"description":"Payment required; inspect the PAYMENT-REQUIRED header"},"404":{"description":"Public repository not found; verified payment is not settled"},"502":{"description":"GitHub upstream failure; verified payment is not settled"},"503":{"description":"Temporary capacity or service configuration failure"}},"x-x402":{"version":2,"scheme":"exact","network":"eip155:8453","price":"$0.03","currency":"USDC"},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.030000"},"protocols":[{"x402":{}}]}}},"/api/skill/sample":{"get":{"summary":"Inspect a representative SkillVerdict audit without payment","operationId":"getSkillVerdictSample","responses":{"200":{"description":"Representative pre-install skill security audit","content":{"application/json":{"schema":{"type":"object","properties":{"product":{"type":"string","const":"SkillVerdict"},"version":{"type":"string"},"verdict":{"type":"string","enum":["LOW_RISK","REVIEW","BLOCK"]},"risk_score":{"type":"integer","minimum":0,"maximum":100},"summary":{"type":"string"},"service_reuse":{"type":"object","properties":{"reusable":{"type":"boolean","const":true},"fresh_result_per_successful_call":{"type":"boolean","const":true,"description":"A successful response is generated from a new bounded check rather than a cached verdict."},"reliability":{"type":"string","const":"bounded_live_check","description":"Describes live evidence collection and explicit coverage bounds; it is not an uptime guarantee."},"guidance":{"type":"string"}},"required":["reusable","fresh_result_per_successful_call","reliability","guidance"],"additionalProperties":false},"repository":{"type":"object","properties":{"url":{"type":"string"},"full_name":{"type":"string"},"archived":{"type":"boolean"},"default_branch":{"type":"string"},"commit_sha":{"type":"string"}},"required":["url","full_name","archived","default_branch","commit_sha"]},"skill":{"type":"object","properties":{"path":{"type":"string"},"name":{"type":["string","null"]},"description":{"type":["string","null"]},"files":{"type":"array","items":{"type":"string"}}},"required":["path","name","description","files"]},"capabilities":{"type":"object","properties":{"declared":{"type":"array","items":{"type":"string"}},"observed":{"type":"array","items":{"type":"string"}},"external_domains":{"type":"array","items":{"type":"string"}}},"required":["declared","observed","external_domains"]},"findings":{"type":"array","items":{"type":"object","properties":{"severity":{"type":"string","enum":["critical","high","medium","low","info"]},"code":{"type":"string"},"message":{"type":"string"},"file":{"type":["string","null"]},"line":{"type":["integer","null"]},"evidence_url":{"type":["string","null"]}},"required":["severity","code","message","file","line","evidence_url"]}},"recommendations":{"type":"array","items":{"type":"string"}},"coverage":{"type":"object","properties":{"entries_in_skill":{"type":"integer","minimum":1},"files_scanned":{"type":"integer","minimum":1},"bytes_scanned":{"type":"integer","minimum":0},"skipped_binary":{"type":"integer","minimum":0},"skipped_oversized":{"type":"integer","minimum":0},"selection_truncated":{"type":"boolean"},"github_rate_limit_remaining":{"type":["integer","null"]}},"required":["entries_in_skill","files_scanned","bytes_scanned","skipped_binary","skipped_oversized","selection_truncated","github_rate_limit_remaining"]},"checked_at":{"type":"string"},"limitations":{"type":"array","items":{"type":"string"}}},"required":["product","version","verdict","risk_score","summary","service_reuse","repository","skill","capabilities","findings","recommendations","coverage","checked_at","limitations"]}}}}}}},"/api/skill":{"get":{"summary":"Audit a public agent skill before installation","description":"Pins the repository default branch to a commit and statically scans the requested SKILL.md plus its bounded directory context without executing code. Returns redacted findings, capabilities, domains, coverage, and a LOW_RISK, REVIEW, or BLOCK verdict.","operationId":"checkSkillVerdict","tags":["skill-security"],"x-agent-skill":"https://cristianmoroaica.github.io/bountyverdict/skills/preflight-agent-skills/SKILL.md","x-use-when":"Decide whether a third-party public SKILL.md bundle is safe to install or requires review.","x-service-reuse":{"reusable":true,"fresh_result_per_successful_call":true,"reliability":"bounded_live_check","guidance":"Call SkillVerdict when no current audit exists for the exact public skill commit and path, and again whenever either changes; each successful audit re-reads the bounded bundle and pins its findings."},"x-free-sample":"https://bountyverdict-agent-production.mimirslab.workers.dev/api/skill/sample","parameters":[{"name":"repo_url","in":"query","required":true,"description":"Canonical public GitHub repository URL","schema":{"type":"string","pattern":"^https://github\\.com/[A-Za-z0-9-]+/[A-Za-z0-9._-]+(?:\\.git)?$"},"example":"https://github.com/coinbase/agentic-wallet-skills"},{"name":"skill_path","in":"query","required":true,"description":"Repository-relative skill directory or exact SKILL.md path","schema":{"type":"string","pattern":"^[A-Za-z0-9._/-]+$"},"example":"skills/agentic-wallet"}],"responses":{"200":{"description":"Commit-pinned redacted skill security audit after x402 settlement","content":{"application/json":{"schema":{"type":"object","properties":{"product":{"type":"string","const":"SkillVerdict"},"version":{"type":"string"},"verdict":{"type":"string","enum":["LOW_RISK","REVIEW","BLOCK"]},"risk_score":{"type":"integer","minimum":0,"maximum":100},"summary":{"type":"string"},"service_reuse":{"type":"object","properties":{"reusable":{"type":"boolean","const":true},"fresh_result_per_successful_call":{"type":"boolean","const":true,"description":"A successful response is generated from a new bounded check rather than a cached verdict."},"reliability":{"type":"string","const":"bounded_live_check","description":"Describes live evidence collection and explicit coverage bounds; it is not an uptime guarantee."},"guidance":{"type":"string"}},"required":["reusable","fresh_result_per_successful_call","reliability","guidance"],"additionalProperties":false},"repository":{"type":"object","properties":{"url":{"type":"string"},"full_name":{"type":"string"},"archived":{"type":"boolean"},"default_branch":{"type":"string"},"commit_sha":{"type":"string"}},"required":["url","full_name","archived","default_branch","commit_sha"]},"skill":{"type":"object","properties":{"path":{"type":"string"},"name":{"type":["string","null"]},"description":{"type":["string","null"]},"files":{"type":"array","items":{"type":"string"}}},"required":["path","name","description","files"]},"capabilities":{"type":"object","properties":{"declared":{"type":"array","items":{"type":"string"}},"observed":{"type":"array","items":{"type":"string"}},"external_domains":{"type":"array","items":{"type":"string"}}},"required":["declared","observed","external_domains"]},"findings":{"type":"array","items":{"type":"object","properties":{"severity":{"type":"string","enum":["critical","high","medium","low","info"]},"code":{"type":"string"},"message":{"type":"string"},"file":{"type":["string","null"]},"line":{"type":["integer","null"]},"evidence_url":{"type":["string","null"]}},"required":["severity","code","message","file","line","evidence_url"]}},"recommendations":{"type":"array","items":{"type":"string"}},"coverage":{"type":"object","properties":{"entries_in_skill":{"type":"integer","minimum":1},"files_scanned":{"type":"integer","minimum":1},"bytes_scanned":{"type":"integer","minimum":0},"skipped_binary":{"type":"integer","minimum":0},"skipped_oversized":{"type":"integer","minimum":0},"selection_truncated":{"type":"boolean"},"github_rate_limit_remaining":{"type":["integer","null"]}},"required":["entries_in_skill","files_scanned","bytes_scanned","skipped_binary","skipped_oversized","selection_truncated","github_rate_limit_remaining"]},"checked_at":{"type":"string"},"limitations":{"type":"array","items":{"type":"string"}}},"required":["product","version","verdict","risk_score","summary","service_reuse","repository","skill","capabilities","findings","recommendations","coverage","checked_at","limitations"]}}}},"400":{"description":"Invalid repository URL or skill path; verified payment is not settled"},"402":{"description":"Payment required; inspect the PAYMENT-REQUIRED header"},"404":{"description":"Public repository or skill not found; verified payment is not settled"},"502":{"description":"GitHub upstream failure; verified payment is not settled"},"503":{"description":"Temporary capacity or service configuration failure"}},"x-x402":{"version":2,"scheme":"exact","network":"eip155:8453","price":"$0.06","currency":"USDC"},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.060000"},"protocols":[{"x402":{}}]}}},"/api/run/sample":{"get":{"summary":"Inspect a representative RunVerdict diagnosis without payment","operationId":"getRunVerdictSample","responses":{"200":{"description":"Representative GitHub Actions diagnosis","content":{"application/json":{"schema":{"type":"object","properties":{"product":{"type":"string","const":"RunVerdict"},"version":{"type":"string"},"verdict":{"type":"string","enum":["PASS","WAIT","RETRY","FIX","INVESTIGATE"]},"summary":{"type":"string"},"service_reuse":{"type":"object","properties":{"reusable":{"type":"boolean","const":true},"fresh_result_per_successful_call":{"type":"boolean","const":true,"description":"A successful response is generated from a new bounded check rather than a cached verdict."},"reliability":{"type":"string","const":"bounded_live_check","description":"Describes live evidence collection and explicit coverage bounds; it is not an uptime guarantee."},"guidance":{"type":"string"}},"required":["reusable","fresh_result_per_successful_call","reliability","guidance"],"additionalProperties":false},"retryability":{"type":"string","enum":["LIKELY","POSSIBLE","UNLIKELY","UNKNOWN"]},"run":{"type":"object","properties":{"url":{"type":"string"},"repository":{"type":"string"},"id":{"type":"string"},"attempt":{"type":"integer","minimum":1},"workflow":{"type":"string"},"event":{"type":"string"},"status":{"type":"string"},"conclusion":{"type":["string","null"]},"head_sha":{"type":"string"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["url","repository","id","attempt","workflow","event","status","conclusion","head_sha","created_at","updated_at"]},"diagnosis":{"type":"object","properties":{"primary_family":{"type":["string","null"]},"confidence":{"type":["string","null"],"enum":["high","medium","low",null]},"root_causes":{"type":"array","items":{"type":"object","properties":{"family":{"type":"string"},"confidence":{"type":"string","enum":["high","medium","low"]},"summary":{"type":"string"},"jobs":{"type":"array","items":{"type":"string"}},"evidence":{"type":"array","items":{"type":"string"}}},"required":["family","confidence","summary","jobs","evidence"]}}},"required":["primary_family","confidence","root_causes"]},"failed_jobs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"conclusion":{"type":["string","null"]},"failed_steps":{"type":"array","items":{"type":"string"}},"root_cause_candidate":{"type":"boolean"},"families":{"type":"array","items":{"type":"string"}},"evidence":{"type":"array","items":{"type":"string"}},"evidence_url":{"type":"string"},"log_status":{"type":"string","enum":["scanned","unavailable","not_selected"]}},"required":["id","name","conclusion","failed_steps","root_cause_candidate","families","evidence","evidence_url","log_status"]}},"next_actions":{"type":"array","items":{"type":"string"}},"coverage":{"type":"object","properties":{"jobs_reported":{"type":"integer","minimum":0},"jobs_total":{"type":"integer","minimum":0},"failed_jobs":{"type":"integer","minimum":0},"failed_jobs_selected_for_logs":{"type":"integer","minimum":0},"logs_scanned":{"type":"integer","minimum":0},"logs_unavailable":{"type":"integer","minimum":0},"log_bytes_read":{"type":"integer","minimum":0},"logs_truncated":{"type":"integer","minimum":0},"jobs_truncated":{"type":"boolean"},"github_rate_limit_remaining":{"type":["integer","null"]}},"required":["jobs_reported","jobs_total","failed_jobs","failed_jobs_selected_for_logs","logs_scanned","logs_unavailable","log_bytes_read","logs_truncated","jobs_truncated","github_rate_limit_remaining"]},"checked_at":{"type":"string"},"limitations":{"type":"array","items":{"type":"string"}}},"required":["product","version","verdict","summary","service_reuse","retryability","run","diagnosis","failed_jobs","next_actions","coverage","checked_at","limitations"]}}}}}}},"/api/run":{"get":{"summary":"Diagnose a public GitHub Actions workflow run","description":"Find why one public GitHub Actions workflow failed and what the agent should do next. Reads exact-attempt jobs and bounded failed-job logs, separates primary failures from downstream summaries, and returns root cause, retryability, redacted evidence, and concrete next actions without rerunning code.","operationId":"diagnoseRunVerdict","tags":["ci-diagnosis"],"x-agent-skill":"https://cristianmoroaica.github.io/bountyverdict/skills/diagnose-github-actions/SKILL.md","x-use-when":"Find why one public GitHub Actions workflow failed and what the agent should do next.","x-service-reuse":{"reusable":true,"fresh_result_per_successful_call":true,"reliability":"bounded_live_check","guidance":"Call RunVerdict for every public GitHub Actions run that needs diagnosis; each successful call reads that run's exact attempt and currently available bounded failed-job logs."},"x-free-sample":"https://bountyverdict-agent-production.mimirslab.workers.dev/api/run/sample","parameters":[{"name":"run_url","in":"query","required":true,"description":"Canonical public GitHub Actions workflow run URL","schema":{"type":"string","pattern":"^https://github\\.com/[A-Za-z0-9-]+/[A-Za-z0-9._-]+/actions/runs/[1-9][0-9]*$"},"example":"https://github.com/openai/codex/actions/runs/29728148711"}],"responses":{"200":{"description":"Bounded evidence-linked run diagnosis after x402 settlement","content":{"application/json":{"schema":{"type":"object","properties":{"product":{"type":"string","const":"RunVerdict"},"version":{"type":"string"},"verdict":{"type":"string","enum":["PASS","WAIT","RETRY","FIX","INVESTIGATE"]},"summary":{"type":"string"},"service_reuse":{"type":"object","properties":{"reusable":{"type":"boolean","const":true},"fresh_result_per_successful_call":{"type":"boolean","const":true,"description":"A successful response is generated from a new bounded check rather than a cached verdict."},"reliability":{"type":"string","const":"bounded_live_check","description":"Describes live evidence collection and explicit coverage bounds; it is not an uptime guarantee."},"guidance":{"type":"string"}},"required":["reusable","fresh_result_per_successful_call","reliability","guidance"],"additionalProperties":false},"retryability":{"type":"string","enum":["LIKELY","POSSIBLE","UNLIKELY","UNKNOWN"]},"run":{"type":"object","properties":{"url":{"type":"string"},"repository":{"type":"string"},"id":{"type":"string"},"attempt":{"type":"integer","minimum":1},"workflow":{"type":"string"},"event":{"type":"string"},"status":{"type":"string"},"conclusion":{"type":["string","null"]},"head_sha":{"type":"string"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["url","repository","id","attempt","workflow","event","status","conclusion","head_sha","created_at","updated_at"]},"diagnosis":{"type":"object","properties":{"primary_family":{"type":["string","null"]},"confidence":{"type":["string","null"],"enum":["high","medium","low",null]},"root_causes":{"type":"array","items":{"type":"object","properties":{"family":{"type":"string"},"confidence":{"type":"string","enum":["high","medium","low"]},"summary":{"type":"string"},"jobs":{"type":"array","items":{"type":"string"}},"evidence":{"type":"array","items":{"type":"string"}}},"required":["family","confidence","summary","jobs","evidence"]}}},"required":["primary_family","confidence","root_causes"]},"failed_jobs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"conclusion":{"type":["string","null"]},"failed_steps":{"type":"array","items":{"type":"string"}},"root_cause_candidate":{"type":"boolean"},"families":{"type":"array","items":{"type":"string"}},"evidence":{"type":"array","items":{"type":"string"}},"evidence_url":{"type":"string"},"log_status":{"type":"string","enum":["scanned","unavailable","not_selected"]}},"required":["id","name","conclusion","failed_steps","root_cause_candidate","families","evidence","evidence_url","log_status"]}},"next_actions":{"type":"array","items":{"type":"string"}},"coverage":{"type":"object","properties":{"jobs_reported":{"type":"integer","minimum":0},"jobs_total":{"type":"integer","minimum":0},"failed_jobs":{"type":"integer","minimum":0},"failed_jobs_selected_for_logs":{"type":"integer","minimum":0},"logs_scanned":{"type":"integer","minimum":0},"logs_unavailable":{"type":"integer","minimum":0},"log_bytes_read":{"type":"integer","minimum":0},"logs_truncated":{"type":"integer","minimum":0},"jobs_truncated":{"type":"boolean"},"github_rate_limit_remaining":{"type":["integer","null"]}},"required":["jobs_reported","jobs_total","failed_jobs","failed_jobs_selected_for_logs","logs_scanned","logs_unavailable","log_bytes_read","logs_truncated","jobs_truncated","github_rate_limit_remaining"]},"checked_at":{"type":"string"},"limitations":{"type":"array","items":{"type":"string"}}},"required":["product","version","verdict","summary","service_reuse","retryability","run","diagnosis","failed_jobs","next_actions","coverage","checked_at","limitations"]}}}},"400":{"description":"Invalid workflow run URL; verified payment is not settled"},"402":{"description":"Payment required; inspect the PAYMENT-REQUIRED header"},"404":{"description":"Public workflow run not found; verified payment is not settled"},"502":{"description":"GitHub upstream failure; verified payment is not settled"},"503":{"description":"Temporary capacity or service configuration failure"}},"x-x402":{"version":2,"scheme":"exact","network":"eip155:8453","price":"$0.04","currency":"USDC"},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.040000"},"protocols":[{"x402":{}}]}}},"/api/flake/sample":{"get":{"summary":"Inspect a representative FlakeVerdict retry decision without payment","operationId":"getFlakeVerdictSample","responses":{"200":{"description":"Representative bounded flake classification","content":{"application/json":{"schema":{"type":"object","properties":{"product":{"type":"string","const":"FlakeVerdict"},"version":{"type":"string","const":"1.0"},"verdict":{"type":"string","enum":["CONFIRMED_FLAKE","LIKELY_FLAKE","RECURRING_FAILURE","NEW_FAILURE","INCONCLUSIVE","NOT_FAILED"]},"summary":{"type":"string"},"service_reuse":{"type":"object","properties":{"reusable":{"type":"boolean","const":true},"fresh_result_per_successful_call":{"type":"boolean","const":true,"description":"A successful response is generated from a new bounded check rather than a cached verdict."},"reliability":{"type":"string","const":"bounded_live_check","description":"Describes live evidence collection and explicit coverage bounds; it is not an uptime guarantee."},"guidance":{"type":"string","const":"Call FlakeVerdict for every completed public GitHub Actions failure before spending a retry; each successful call re-reads the selected attempt, other attempts of the same run, same-SHA outcomes, and up to 12 earlier comparable runs. Reuse a result only for its exact run ID and attempt, and call again after a new attempt appears."}},"required":["reusable","fresh_result_per_successful_call","reliability","guidance"],"additionalProperties":false},"decision":{"type":"object","properties":{"confidence":{"type":"string","enum":["high","medium","low"]},"retry":{"type":"string","enum":["ONCE","NO","NOT_NEEDED"]},"reason_codes":{"type":"array","items":{"type":"string","enum":["TARGET_SUCCEEDED","TARGET_NOT_COMPLETE","TARGET_JOBS_INCOMPLETE","SAME_RUN_JOB_SUCCEEDED","SAME_SHA_JOB_SUCCEEDED","HISTORICAL_FAILURE_RECURRED","TARGET_UNSUPPORTED_CONCLUSION","FAILURE_SIGNATURE_UNSEEN","INSUFFICIENT_COMPARABLE_RUNS","PARTIAL_HISTORY","MIXED_EVIDENCE","CURRENT_RUN_CHANGED_DURING_CHECK","CURRENT_RUN_NOT_REVALIDATED"]}}},"required":["confidence","retry","reason_codes"],"additionalProperties":false},"target":{"type":"object","properties":{"url":{"type":"string"},"repository":{"type":"string"},"id":{"type":"string"},"attempt":{"type":"integer","minimum":1},"current_attempt":{"type":"integer","minimum":1},"workflow_id":{"type":"integer","minimum":1},"workflow":{"type":"string"},"workflow_path":{"type":"string"},"event":{"type":"string"},"head_branch":{"type":"string"},"head_sha":{"type":"string"},"status":{"type":"string"},"conclusion":{"type":["string","null"]},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["url","repository","id","attempt","current_attempt","workflow_id","workflow","workflow_path","event","head_branch","head_sha","status","conclusion","created_at","updated_at"],"additionalProperties":false},"failure_signatures":{"type":"array","items":{"type":"object","properties":{"fingerprint":{"type":"string","pattern":"^[a-f0-9]{64}$"},"job_name":{"type":"string"},"conclusion":{"type":["string","null"]},"failed_steps":{"type":"array","items":{"type":"string"}},"evidence_url":{"type":"string"},"log_status":{"type":"string","enum":["scanned","unavailable","not_selected"]}},"required":["fingerprint","job_name","conclusion","failed_steps","evidence_url","log_status"],"additionalProperties":false}},"same_run_attempts":{"type":"array","items":{"type":"object","properties":{"attempt":{"type":"integer","minimum":1},"conclusion":{"type":["string","null"]},"matching_jobs_succeeded":{"type":"array","items":{"type":"string"}},"matching_jobs_failed":{"type":"array","items":{"type":"string"}}},"required":["attempt","conclusion","matching_jobs_succeeded","matching_jobs_failed"],"additionalProperties":false}},"same_sha_runs":{"type":"array","items":{"type":"object","properties":{"run_id":{"type":"string"},"attempt":{"type":"integer","minimum":1},"conclusion":{"type":["string","null"]},"matching_jobs_succeeded":{"type":"array","items":{"type":"string"}},"matching_fingerprints":{"type":"array","items":{"type":"string"}},"html_url":{"type":"string"}},"required":["run_id","attempt","conclusion","matching_jobs_succeeded","matching_fingerprints","html_url"],"additionalProperties":false}},"historical_matches":{"type":"array","items":{"type":"object","properties":{"run_id":{"type":"string"},"attempt":{"type":"integer","minimum":1},"head_sha":{"type":"string"},"created_at":{"type":"string"},"matching_fingerprints":{"type":"array","items":{"type":"string"}},"recovered_by_later_success":{"type":"boolean"},"html_url":{"type":"string"}},"required":["run_id","attempt","head_sha","created_at","matching_fingerprints","recovered_by_later_success","html_url"],"additionalProperties":false}},"coverage":{"type":"object","properties":{"target_jobs_reported":{"type":"integer","minimum":0},"target_jobs_total":{"type":"integer","minimum":0},"target_jobs_truncated":{"type":"boolean"},"target_failed_jobs":{"type":"integer","minimum":0},"target_logs_selected":{"type":"integer","minimum":0},"target_logs_scanned":{"type":"integer","minimum":0},"target_logs_unavailable":{"type":"integer","minimum":0},"target_log_bytes_read":{"type":"integer","minimum":0},"target_logs_truncated":{"type":"integer","minimum":0},"same_run_attempts_available":{"type":"integer","minimum":0},"same_run_attempts_checked":{"type":"integer","minimum":0},"same_run_attempts_truncated":{"type":"boolean"},"same_sha_runs_listed":{"type":"integer","minimum":0},"same_sha_runs_checked":{"type":"integer","minimum":0},"same_sha_runs_truncated":{"type":"boolean"},"earlier_comparable_runs_available":{"type":"integer","minimum":0},"earlier_comparable_runs_checked":{"type":"integer","minimum":0},"earlier_comparable_runs_truncated":{"type":"boolean"},"historical_job_pages":{"type":"integer","minimum":0},"github_rate_limit_remaining":{"type":["integer","null"],"minimum":0},"partial_failures":{"type":"array","items":{"type":"object","properties":{"scope":{"type":"string","enum":["target_log","current_run","same_run_attempt","same_sha_run","historical_run"]},"identifier":{"type":"string"},"code":{"type":"string","enum":["UPSTREAM_ERROR","NOT_FOUND","LOG_UNAVAILABLE","DEADLINE_EXCEEDED","TRUNCATED"]}},"required":["scope","identifier","code"],"additionalProperties":false}},"deadline_ms":{"type":"integer","minimum":1}},"required":["target_jobs_reported","target_jobs_total","target_jobs_truncated","target_failed_jobs","target_logs_selected","target_logs_scanned","target_logs_unavailable","target_log_bytes_read","target_logs_truncated","same_run_attempts_available","same_run_attempts_checked","same_run_attempts_truncated","same_sha_runs_listed","same_sha_runs_checked","same_sha_runs_truncated","earlier_comparable_runs_available","earlier_comparable_runs_checked","earlier_comparable_runs_truncated","historical_job_pages","github_rate_limit_remaining","partial_failures","deadline_ms"],"additionalProperties":false},"checked_at":{"type":"string"},"limitations":{"type":"array","items":{"type":"string"}}},"required":["product","version","verdict","summary","service_reuse","decision","target","failure_signatures","same_run_attempts","same_sha_runs","historical_matches","coverage","checked_at","limitations"],"additionalProperties":false}}}}}}},"/api/flake":{"get":{"summary":"Classify a public GitHub Actions failure before retrying","description":"Decide whether a completed GitHub Actions failure is flaky and should be retried once, or is recurring or new and needs a fix. Compares exact workflow attempts, same-commit outcomes, failed-step fingerprints, and bounded historical runs, then returns a retry-or-fix decision without rerunning CI.","operationId":"classifyFlakeVerdict","tags":["ci-flake-gate"],"x-agent-skill":"https://cristianmoroaica.github.io/bountyverdict/skills/classify-github-flakes/SKILL.md","x-use-when":"Decide whether a completed GitHub Actions failure is flaky: retry once or fix it.","x-service-reuse":{"reusable":true,"fresh_result_per_successful_call":true,"reliability":"bounded_live_check","guidance":"Call FlakeVerdict for every completed public GitHub Actions failure before spending a retry; each successful call re-reads the selected attempt, other attempts of the same run, same-SHA outcomes, and up to 12 earlier comparable runs. Reuse a result only for its exact run ID and attempt, and call again after a new attempt appears."},"x-free-sample":"https://bountyverdict-agent-production.mimirslab.workers.dev/api/flake/sample","parameters":[{"name":"run_url","in":"query","required":true,"description":"Canonical public GitHub Actions workflow run URL","schema":{"type":"string","pattern":"^https://github\\.com/[A-Za-z0-9-]+/[A-Za-z0-9._-]+/actions/runs/[1-9][0-9]*$"},"example":"https://github.com/actions/runner/actions/runs/29423388605"},{"name":"attempt","in":"query","required":false,"description":"Exact positive run attempt; omit to classify the current attempt","schema":{"type":"integer","minimum":1},"example":1}],"responses":{"200":{"description":"Bounded evidence-linked flake classification after x402 settlement","content":{"application/json":{"schema":{"type":"object","properties":{"product":{"type":"string","const":"FlakeVerdict"},"version":{"type":"string","const":"1.0"},"verdict":{"type":"string","enum":["CONFIRMED_FLAKE","LIKELY_FLAKE","RECURRING_FAILURE","NEW_FAILURE","INCONCLUSIVE","NOT_FAILED"]},"summary":{"type":"string"},"service_reuse":{"type":"object","properties":{"reusable":{"type":"boolean","const":true},"fresh_result_per_successful_call":{"type":"boolean","const":true,"description":"A successful response is generated from a new bounded check rather than a cached verdict."},"reliability":{"type":"string","const":"bounded_live_check","description":"Describes live evidence collection and explicit coverage bounds; it is not an uptime guarantee."},"guidance":{"type":"string","const":"Call FlakeVerdict for every completed public GitHub Actions failure before spending a retry; each successful call re-reads the selected attempt, other attempts of the same run, same-SHA outcomes, and up to 12 earlier comparable runs. Reuse a result only for its exact run ID and attempt, and call again after a new attempt appears."}},"required":["reusable","fresh_result_per_successful_call","reliability","guidance"],"additionalProperties":false},"decision":{"type":"object","properties":{"confidence":{"type":"string","enum":["high","medium","low"]},"retry":{"type":"string","enum":["ONCE","NO","NOT_NEEDED"]},"reason_codes":{"type":"array","items":{"type":"string","enum":["TARGET_SUCCEEDED","TARGET_NOT_COMPLETE","TARGET_JOBS_INCOMPLETE","SAME_RUN_JOB_SUCCEEDED","SAME_SHA_JOB_SUCCEEDED","HISTORICAL_FAILURE_RECURRED","TARGET_UNSUPPORTED_CONCLUSION","FAILURE_SIGNATURE_UNSEEN","INSUFFICIENT_COMPARABLE_RUNS","PARTIAL_HISTORY","MIXED_EVIDENCE","CURRENT_RUN_CHANGED_DURING_CHECK","CURRENT_RUN_NOT_REVALIDATED"]}}},"required":["confidence","retry","reason_codes"],"additionalProperties":false},"target":{"type":"object","properties":{"url":{"type":"string"},"repository":{"type":"string"},"id":{"type":"string"},"attempt":{"type":"integer","minimum":1},"current_attempt":{"type":"integer","minimum":1},"workflow_id":{"type":"integer","minimum":1},"workflow":{"type":"string"},"workflow_path":{"type":"string"},"event":{"type":"string"},"head_branch":{"type":"string"},"head_sha":{"type":"string"},"status":{"type":"string"},"conclusion":{"type":["string","null"]},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["url","repository","id","attempt","current_attempt","workflow_id","workflow","workflow_path","event","head_branch","head_sha","status","conclusion","created_at","updated_at"],"additionalProperties":false},"failure_signatures":{"type":"array","items":{"type":"object","properties":{"fingerprint":{"type":"string","pattern":"^[a-f0-9]{64}$"},"job_name":{"type":"string"},"conclusion":{"type":["string","null"]},"failed_steps":{"type":"array","items":{"type":"string"}},"evidence_url":{"type":"string"},"log_status":{"type":"string","enum":["scanned","unavailable","not_selected"]}},"required":["fingerprint","job_name","conclusion","failed_steps","evidence_url","log_status"],"additionalProperties":false}},"same_run_attempts":{"type":"array","items":{"type":"object","properties":{"attempt":{"type":"integer","minimum":1},"conclusion":{"type":["string","null"]},"matching_jobs_succeeded":{"type":"array","items":{"type":"string"}},"matching_jobs_failed":{"type":"array","items":{"type":"string"}}},"required":["attempt","conclusion","matching_jobs_succeeded","matching_jobs_failed"],"additionalProperties":false}},"same_sha_runs":{"type":"array","items":{"type":"object","properties":{"run_id":{"type":"string"},"attempt":{"type":"integer","minimum":1},"conclusion":{"type":["string","null"]},"matching_jobs_succeeded":{"type":"array","items":{"type":"string"}},"matching_fingerprints":{"type":"array","items":{"type":"string"}},"html_url":{"type":"string"}},"required":["run_id","attempt","conclusion","matching_jobs_succeeded","matching_fingerprints","html_url"],"additionalProperties":false}},"historical_matches":{"type":"array","items":{"type":"object","properties":{"run_id":{"type":"string"},"attempt":{"type":"integer","minimum":1},"head_sha":{"type":"string"},"created_at":{"type":"string"},"matching_fingerprints":{"type":"array","items":{"type":"string"}},"recovered_by_later_success":{"type":"boolean"},"html_url":{"type":"string"}},"required":["run_id","attempt","head_sha","created_at","matching_fingerprints","recovered_by_later_success","html_url"],"additionalProperties":false}},"coverage":{"type":"object","properties":{"target_jobs_reported":{"type":"integer","minimum":0},"target_jobs_total":{"type":"integer","minimum":0},"target_jobs_truncated":{"type":"boolean"},"target_failed_jobs":{"type":"integer","minimum":0},"target_logs_selected":{"type":"integer","minimum":0},"target_logs_scanned":{"type":"integer","minimum":0},"target_logs_unavailable":{"type":"integer","minimum":0},"target_log_bytes_read":{"type":"integer","minimum":0},"target_logs_truncated":{"type":"integer","minimum":0},"same_run_attempts_available":{"type":"integer","minimum":0},"same_run_attempts_checked":{"type":"integer","minimum":0},"same_run_attempts_truncated":{"type":"boolean"},"same_sha_runs_listed":{"type":"integer","minimum":0},"same_sha_runs_checked":{"type":"integer","minimum":0},"same_sha_runs_truncated":{"type":"boolean"},"earlier_comparable_runs_available":{"type":"integer","minimum":0},"earlier_comparable_runs_checked":{"type":"integer","minimum":0},"earlier_comparable_runs_truncated":{"type":"boolean"},"historical_job_pages":{"type":"integer","minimum":0},"github_rate_limit_remaining":{"type":["integer","null"],"minimum":0},"partial_failures":{"type":"array","items":{"type":"object","properties":{"scope":{"type":"string","enum":["target_log","current_run","same_run_attempt","same_sha_run","historical_run"]},"identifier":{"type":"string"},"code":{"type":"string","enum":["UPSTREAM_ERROR","NOT_FOUND","LOG_UNAVAILABLE","DEADLINE_EXCEEDED","TRUNCATED"]}},"required":["scope","identifier","code"],"additionalProperties":false}},"deadline_ms":{"type":"integer","minimum":1}},"required":["target_jobs_reported","target_jobs_total","target_jobs_truncated","target_failed_jobs","target_logs_selected","target_logs_scanned","target_logs_unavailable","target_log_bytes_read","target_logs_truncated","same_run_attempts_available","same_run_attempts_checked","same_run_attempts_truncated","same_sha_runs_listed","same_sha_runs_checked","same_sha_runs_truncated","earlier_comparable_runs_available","earlier_comparable_runs_checked","earlier_comparable_runs_truncated","historical_job_pages","github_rate_limit_remaining","partial_failures","deadline_ms"],"additionalProperties":false},"checked_at":{"type":"string"},"limitations":{"type":"array","items":{"type":"string"}}},"required":["product","version","verdict","summary","service_reuse","decision","target","failure_signatures","same_run_attempts","same_sha_runs","historical_matches","coverage","checked_at","limitations"],"additionalProperties":false}}}},"400":{"description":"Invalid workflow run URL or attempt; verified payment is not settled"},"402":{"description":"Payment required; inspect the PAYMENT-REQUIRED header"},"404":{"description":"Public workflow run or requested attempt not found; verified payment is not settled"},"429":{"description":"Bounded upstream capacity exhausted; verified payment is not settled"},"502":{"description":"GitHub upstream failure; verified payment is not settled"},"503":{"description":"Temporary capacity, deadline, or service configuration failure; verified payment is not settled"}},"x-x402":{"version":2,"scheme":"exact","network":"eip155:8453","price":"$0.07","currency":"USDC"},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.070000"},"protocols":[{"x402":{}}]}}},"/api/mcp-drift/sample":{"get":{"summary":"Inspect a representative MCPDriftVerdict result without payment","operationId":"getMcpDriftVerdictSample","responses":{"200":{"description":"Representative deterministic MCP tool-catalog drift verdict","content":{"application/json":{"schema":{"type":"object","properties":{"service":{"type":"string","const":"MCPDriftVerdict"},"contract_version":{"type":"string","const":"mcp-drift/1"},"ruleset_version":{"type":"string","const":"2026-07-20.1"},"subject":{"type":"object","properties":{"server_id":{"type":"string"},"identity":{"type":"string","const":"caller_asserted"}},"required":["server_id","identity"],"additionalProperties":false},"verdict":{"type":"string","enum":["UNCHANGED","SAFE_ADDITIVE","REVIEW","INCONCLUSIVE","BREAKING","SECURITY_REGRESSION"]},"action":{"type":"string","enum":["ACCEPT_CURRENT","REVIEW_CURRENT","HOLD_BASELINE","BLOCK_CURRENT"]},"trust":{"type":"object","properties":{"annotation_source":{"type":"string","enum":["caller_asserted_trusted","untrusted"]},"server_identity":{"type":"string","const":"not_verified"},"runtime_behavior":{"type":"string","const":"not_verified"},"completeness":{"type":"string","const":"caller_asserted"}},"required":["annotation_source","server_identity","runtime_behavior","completeness"],"additionalProperties":false},"hashes":{"type":"object","properties":{"baseline_snapshot":{"type":"string","pattern":"^sha256:[a-f0-9]{64}$"},"current_snapshot":{"type":"string","pattern":"^sha256:[a-f0-9]{64}$"},"baseline_contract":{"type":"string","pattern":"^sha256:[a-f0-9]{64}$"},"current_contract":{"type":"string","pattern":"^sha256:[a-f0-9]{64}$"}},"required":["baseline_snapshot","current_snapshot","baseline_contract","current_contract"],"additionalProperties":false},"summary":{"type":"object","properties":{"baseline_tools":{"type":"integer","minimum":0},"current_tools":{"type":"integer","minimum":0},"added":{"type":"integer","minimum":0},"removed":{"type":"integer","minimum":0},"changed":{"type":"integer","minimum":0},"compatible_changes":{"type":"integer","minimum":0},"review_findings":{"type":"integer","minimum":0},"breaking_findings":{"type":"integer","minimum":0},"security_findings":{"type":"integer","minimum":0},"unknown_relations":{"type":"integer","minimum":0}},"required":["baseline_tools","current_tools","added","removed","changed","compatible_changes","review_findings","breaking_findings","security_findings","unknown_relations"],"additionalProperties":false},"findings":{"type":"array","maxItems":256,"items":{"type":"object","properties":{"id":{"type":"string","pattern":"^sha256:[a-f0-9]{64}$"},"category":{"type":"string"},"severity":{"type":"string","enum":["info","review","breaking","security"]},"tool":{"type":["string","null"]},"path":{"type":"string"},"relation":{"type":"string","enum":["PROVEN_SUBSET","PROVEN_NOT_SUBSET","UNKNOWN","NOT_APPLICABLE"]},"before_hash":{"type":"string","pattern":"^sha256:[a-f0-9]{64}$"},"after_hash":{"type":"string","pattern":"^sha256:[a-f0-9]{64}$"},"before":{},"after":{},"witness":{},"witness_hash":{"type":"string","pattern":"^sha256:[a-f0-9]{64}$"},"reason":{"type":"string"}},"required":["id","category","severity","tool","path","relation","reason"],"additionalProperties":false}},"coverage":{"type":"object","properties":{"compared_tools":{"type":"integer","minimum":0},"schema_nodes":{"type":"integer","minimum":0},"relation_checks":{"type":"integer","minimum":0},"proven_subset":{"type":"integer","minimum":0},"proven_not_subset":{"type":"integer","minimum":0},"unknown":{"type":"integer","minimum":0},"returned_findings":{"type":"integer","minimum":0},"total_findings":{"type":"integer","minimum":0},"truncated":{"type":"boolean"}},"required":["compared_tools","schema_nodes","relation_checks","proven_subset","proven_not_subset","unknown","returned_findings","total_findings","truncated"],"additionalProperties":false},"limitations":{"type":"array","items":{"type":"string"}},"service_reuse":{"type":"string","const":"Call MCPDriftVerdict after every notifications/tools/list_changed, at agent startup when the current tools/list snapshot hash differs from the pinned baseline, and before accepting an MCP server upgrade. Reuse only for the exact baseline_snapshot hash, current_snapshot hash, and ruleset_version tuple."}},"required":["service","contract_version","ruleset_version","subject","verdict","action","trust","hashes","summary","findings","coverage","limitations","service_reuse"],"additionalProperties":false}}}}}}},"/api/mcp-drift":{"post":{"summary":"Check MCP schema drift and tools/list compatibility","description":"MCP schema drift and MCP tools/list compatibility gate for agent upgrades. Compares complete baseline and current snapshots; detects removed or renamed tools, new required arguments, incompatible input or output schemas, and model-facing metadata or safety-hint regressions. Returns an exact-hash compatibility verdict without fetching or invoking tools. Invalid or unsupported inputs fail unpaid.","operationId":"checkMcpToolDrift","tags":["mcp-compatibility"],"x-agent-skill":"https://cristianmoroaica.github.io/bountyverdict/skills/check-mcp-tool-drift/SKILL.md","x-use-when":"Decide whether an MCP tools/list schema change will break an agent after a server upgrade.","x-service-reuse":"Call MCPDriftVerdict after every notifications/tools/list_changed, at agent startup when the current tools/list snapshot hash differs from the pinned baseline, and before accepting an MCP server upgrade. Reuse only for the exact baseline_snapshot hash, current_snapshot hash, and ruleset_version tuple.","x-free-sample":"https://bountyverdict-agent-production.mimirslab.workers.dev/api/mcp-drift/sample","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"contract_version":{"type":"string","const":"mcp-drift/1"},"subject":{"type":"object","description":"Stable caller-chosen identity for the MCP server whose catalog is being compared.","properties":{"server_id":{"type":"string","pattern":"^[A-Za-z0-9._:/@+~-]{1,256}$","description":"Non-secret stable server identifier copied into the verdict."}},"required":["server_id"],"additionalProperties":false},"annotation_source_trust":{"type":"string","enum":["trusted","untrusted"],"description":"Whether the caller recognizes the annotation source; annotations never become behavioral proof."},"baseline":{"type":"object","description":"One complete aggregated MCP tools/list snapshot. All catalog fields are transmitted to the external service for deterministic comparison.","properties":{"protocol_version":{"type":"string","const":"2025-11-25"},"complete":{"type":"boolean","const":true,"description":"Caller assertion that all tools/list pages were aggregated and nextCursor was exhausted."},"tools":{"type":"array","maxItems":128,"items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[A-Za-z0-9_.-]{1,128}$"},"title":{"type":"string","maxLength":512},"description":{"type":"string","maxLength":16384},"icons":{"type":"array","maxItems":8,"items":{"type":"object","additionalProperties":true}},"inputSchema":{"type":"object","description":"A bounded JSON Schema Draft 2020-12 object in MCPDriftVerdict's documented comparison subset.","additionalProperties":true},"outputSchema":{"type":"object","description":"A bounded JSON Schema Draft 2020-12 object in MCPDriftVerdict's documented comparison subset.","additionalProperties":true},"annotations":{"type":"object","properties":{"title":{"type":"string","maxLength":512},"readOnlyHint":{"type":"boolean"},"destructiveHint":{"type":"boolean"},"idempotentHint":{"type":"boolean"},"openWorldHint":{"type":"boolean"}},"additionalProperties":false},"execution":{"type":"object","properties":{"taskSupport":{"type":"string","enum":["forbidden","optional","required"]}},"additionalProperties":false},"_meta":{"type":"object","maxProperties":512,"additionalProperties":true}},"required":["name","inputSchema"],"additionalProperties":false}}},"required":["protocol_version","complete","tools"],"additionalProperties":false},"current":{"type":"object","description":"One complete aggregated MCP tools/list snapshot. All catalog fields are transmitted to the external service for deterministic comparison.","properties":{"protocol_version":{"type":"string","const":"2025-11-25"},"complete":{"type":"boolean","const":true,"description":"Caller assertion that all tools/list pages were aggregated and nextCursor was exhausted."},"tools":{"type":"array","maxItems":128,"items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[A-Za-z0-9_.-]{1,128}$"},"title":{"type":"string","maxLength":512},"description":{"type":"string","maxLength":16384},"icons":{"type":"array","maxItems":8,"items":{"type":"object","additionalProperties":true}},"inputSchema":{"type":"object","description":"A bounded JSON Schema Draft 2020-12 object in MCPDriftVerdict's documented comparison subset.","additionalProperties":true},"outputSchema":{"type":"object","description":"A bounded JSON Schema Draft 2020-12 object in MCPDriftVerdict's documented comparison subset.","additionalProperties":true},"annotations":{"type":"object","properties":{"title":{"type":"string","maxLength":512},"readOnlyHint":{"type":"boolean"},"destructiveHint":{"type":"boolean"},"idempotentHint":{"type":"boolean"},"openWorldHint":{"type":"boolean"}},"additionalProperties":false},"execution":{"type":"object","properties":{"taskSupport":{"type":"string","enum":["forbidden","optional","required"]}},"additionalProperties":false},"_meta":{"type":"object","maxProperties":512,"additionalProperties":true}},"required":["name","inputSchema"],"additionalProperties":false}}},"required":["protocol_version","complete","tools"],"additionalProperties":false}},"required":["contract_version","subject","annotation_source_trust","baseline","current"],"additionalProperties":false},"example":{"contract_version":"mcp-drift/1","subject":{"server_id":"acme/tasks@production"},"annotation_source_trust":"untrusted","baseline":{"protocol_version":"2025-11-25","complete":true,"tools":[{"name":"lookup_task","description":"Look up one task.","inputSchema":{"type":"object","properties":{"task_id":{"type":"string","minLength":1}},"required":["task_id"],"additionalProperties":false},"outputSchema":{"type":"object","properties":{"status":{"type":"string","enum":["open","closed"]}},"required":["status"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}}]},"current":{"protocol_version":"2025-11-25","complete":true,"tools":[{"name":"lookup_task","description":"Look up one task.","inputSchema":{"type":"object","properties":{"task_id":{"type":"string","minLength":1},"units":{"type":"string","enum":["metric","imperial"]}},"required":["task_id"],"additionalProperties":false},"outputSchema":{"type":"object","properties":{"status":{"type":"string","enum":["open","closed"]}},"required":["status"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}}]}}}}},"responses":{"200":{"description":"Precomputed deterministic drift verdict after x402 settlement","headers":{"X-MCP-Drift-Baseline-Snapshot":{"schema":{"type":"string","pattern":"^sha256:[a-f0-9]{64}$"}},"X-MCP-Drift-Current-Snapshot":{"schema":{"type":"string","pattern":"^sha256:[a-f0-9]{64}$"}},"X-MCP-Drift-Ruleset-Version":{"schema":{"type":"string","const":"2026-07-20.1"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"service":{"type":"string","const":"MCPDriftVerdict"},"contract_version":{"type":"string","const":"mcp-drift/1"},"ruleset_version":{"type":"string","const":"2026-07-20.1"},"subject":{"type":"object","properties":{"server_id":{"type":"string"},"identity":{"type":"string","const":"caller_asserted"}},"required":["server_id","identity"],"additionalProperties":false},"verdict":{"type":"string","enum":["UNCHANGED","SAFE_ADDITIVE","REVIEW","INCONCLUSIVE","BREAKING","SECURITY_REGRESSION"]},"action":{"type":"string","enum":["ACCEPT_CURRENT","REVIEW_CURRENT","HOLD_BASELINE","BLOCK_CURRENT"]},"trust":{"type":"object","properties":{"annotation_source":{"type":"string","enum":["caller_asserted_trusted","untrusted"]},"server_identity":{"type":"string","const":"not_verified"},"runtime_behavior":{"type":"string","const":"not_verified"},"completeness":{"type":"string","const":"caller_asserted"}},"required":["annotation_source","server_identity","runtime_behavior","completeness"],"additionalProperties":false},"hashes":{"type":"object","properties":{"baseline_snapshot":{"type":"string","pattern":"^sha256:[a-f0-9]{64}$"},"current_snapshot":{"type":"string","pattern":"^sha256:[a-f0-9]{64}$"},"baseline_contract":{"type":"string","pattern":"^sha256:[a-f0-9]{64}$"},"current_contract":{"type":"string","pattern":"^sha256:[a-f0-9]{64}$"}},"required":["baseline_snapshot","current_snapshot","baseline_contract","current_contract"],"additionalProperties":false},"summary":{"type":"object","properties":{"baseline_tools":{"type":"integer","minimum":0},"current_tools":{"type":"integer","minimum":0},"added":{"type":"integer","minimum":0},"removed":{"type":"integer","minimum":0},"changed":{"type":"integer","minimum":0},"compatible_changes":{"type":"integer","minimum":0},"review_findings":{"type":"integer","minimum":0},"breaking_findings":{"type":"integer","minimum":0},"security_findings":{"type":"integer","minimum":0},"unknown_relations":{"type":"integer","minimum":0}},"required":["baseline_tools","current_tools","added","removed","changed","compatible_changes","review_findings","breaking_findings","security_findings","unknown_relations"],"additionalProperties":false},"findings":{"type":"array","maxItems":256,"items":{"type":"object","properties":{"id":{"type":"string","pattern":"^sha256:[a-f0-9]{64}$"},"category":{"type":"string"},"severity":{"type":"string","enum":["info","review","breaking","security"]},"tool":{"type":["string","null"]},"path":{"type":"string"},"relation":{"type":"string","enum":["PROVEN_SUBSET","PROVEN_NOT_SUBSET","UNKNOWN","NOT_APPLICABLE"]},"before_hash":{"type":"string","pattern":"^sha256:[a-f0-9]{64}$"},"after_hash":{"type":"string","pattern":"^sha256:[a-f0-9]{64}$"},"before":{},"after":{},"witness":{},"witness_hash":{"type":"string","pattern":"^sha256:[a-f0-9]{64}$"},"reason":{"type":"string"}},"required":["id","category","severity","tool","path","relation","reason"],"additionalProperties":false}},"coverage":{"type":"object","properties":{"compared_tools":{"type":"integer","minimum":0},"schema_nodes":{"type":"integer","minimum":0},"relation_checks":{"type":"integer","minimum":0},"proven_subset":{"type":"integer","minimum":0},"proven_not_subset":{"type":"integer","minimum":0},"unknown":{"type":"integer","minimum":0},"returned_findings":{"type":"integer","minimum":0},"total_findings":{"type":"integer","minimum":0},"truncated":{"type":"boolean"}},"required":["compared_tools","schema_nodes","relation_checks","proven_subset","proven_not_subset","unknown","returned_findings","total_findings","truncated"],"additionalProperties":false},"limitations":{"type":"array","items":{"type":"string"}},"service_reuse":{"type":"string","const":"Call MCPDriftVerdict after every notifications/tools/list_changed, at agent startup when the current tools/list snapshot hash differs from the pinned baseline, and before accepting an MCP server upgrade. Reuse only for the exact baseline_snapshot hash, current_snapshot hash, and ruleset_version tuple."}},"required":["service","contract_version","ruleset_version","subject","verdict","action","trust","hashes","summary","findings","coverage","limitations","service_reuse"],"additionalProperties":false}}}},"400":{"description":"Malformed, incomplete, duplicate, or out-of-contract input; no payment challenge is emitted"},"402":{"description":"Valid verdict is ready; payment required to return it. Snapshot/ruleset headers identify the precomputed result; standard x402 authorizes the resource URL, not the POST body.","headers":{"X-MCP-Drift-Baseline-Snapshot":{"schema":{"type":"string","pattern":"^sha256:[a-f0-9]{64}$"}},"X-MCP-Drift-Current-Snapshot":{"schema":{"type":"string","pattern":"^sha256:[a-f0-9]{64}$"}},"X-MCP-Drift-Ruleset-Version":{"schema":{"type":"string","const":"2026-07-20.1"}}}},"413":{"description":"Request body exceeds 524,288 bytes; no payment challenge is emitted"},"422":{"description":"Unsupported schema dialect or feature; no payment challenge is emitted"},"500":{"description":"Verdict computation failed before payment; no settlement is attempted"}},"x-x402":{"version":2,"scheme":"exact","network":"eip155:8453","price":"$0.02","currency":"USDC"},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]}}}}}