{"openapi":"3.1.0","info":{"title":"Veridu API","version":"0.1.0","description":"Hosted multi-reviewer code review for GitHub pull requests. Two AI reviewers run in parallel on a change-impact evidence pack, findings are reconciled cross-vendor. See https://veridu.io/docs for the four surfaces (web / CLI / MCP / GitHub App).","contact":{"email":"hello@veridu.io","url":"https://veridu.io/contact"}},"servers":[{"url":"https://api.veridu.io","description":"Production"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"veridu_..."}},"schemas":{"Review":{"type":"object","properties":{"review_id":{"type":"string","format":"uuid","description":"Public UUID for the review — enumeration-safe."},"status":{"type":"string","enum":["queued","running","completed","failed","stale"]},"repo_full_name":{"type":"string","example":"octocat/hello-world"},"pr_number":{"type":"integer"},"pr_url":{"type":"string","format":"uri"},"verdict":{"type":"object","nullable":true,"properties":{"level":{"type":"string","enum":["PASS","REVIEW_OPTIONAL","HUMAN_REVIEW_REQUIRED","CONTEXT"]},"reason":{"type":"string","nullable":true}}},"agreements":{"type":"array","items":{"type":"object"}},"disputes":{"type":"array","items":{"type":"object"}},"models":{"type":"array","items":{"type":"string"},"nullable":true},"created_at":{"type":"string"},"completed_at":{"type":"string","nullable":true}}},"CreateReviewRequest":{"type":"object","required":["pr_url"],"properties":{"pr_url":{"type":"string","format":"uri","example":"https://github.com/octocat/hello-world/pull/42"},"models":{"type":"array","items":{"type":"string"},"nullable":true,"description":"Optional reviewer panel — catalog ids. Must span 2+ vendors. See https://veridu.io/models."},"github_token":{"type":"string","nullable":true,"description":"Reserved. Ignored for public repos."}}},"Error":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string","nullable":true}}}}},"security":[{"bearerAuth":[]}],"paths":{"/health":{"get":{"summary":"Health probe (no auth)","security":[],"responses":{"200":{"description":"API is up","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"}}}}}}}}},"/status/probe":{"get":{"summary":"Public status probe — cached 30s. Backs veridu.io/status.","security":[],"responses":{"200":{"description":"Subsystem status rollup"}}}},"/reviews":{"post":{"summary":"Enqueue a review of a public GitHub PR (or private if the repo is linked at /repos)","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateReviewRequest"}}}},"responses":{"201":{"description":"Review enqueued (or existing review returned on idempotent replay).","content":{"application/json":{"schema":{"type":"object","properties":{"review_id":{"type":"string","format":"uuid"},"status":{"type":"string"},"created":{"type":"boolean"},"models":{"type":"array","items":{"type":"string"}},"remaining":{"type":"integer","nullable":true}}}}}},"400":{"description":"invalid_pr_url | invalid_panel | private_repo_not_linked | private_repo_local_only","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"missing_authorization | invalid_token"},"402":{"description":"quota_exhausted"},"403":{"description":"account_suspended | insufficient_scope"}}}},"/reviews/{uuid}":{"get":{"summary":"Retrieve a review by its UUID","security":[{"bearerAuth":[]}],"parameters":[{"name":"uuid","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Review status + reconciled result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Review"}}}},"401":{"description":"unauthenticated"},"404":{"description":"not_found"}}}},"/auth/me":{"get":{"summary":"Current bearer's account (id, email, tier, role, free_reviews_remaining, verified_at)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Account summary"}}}},"/auth/tokens":{"get":{"summary":"List active bearer tokens on the calling account","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Tokens (no plaintext returned)"}}},"post":{"summary":"Issue a new bearer token — plaintext returned once","security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"label":{"type":"string","nullable":true},"scope":{"type":"string","enum":["full","reviews_only","webhooks_only"],"default":"full"}}}}}},"responses":{"201":{"description":"Token minted"}}}},"/account/webhooks":{"get":{"summary":"List outbound webhook targets for the calling account","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Webhook targets"}}},"post":{"summary":"Register an outbound webhook target — secret returned once","security":[{"bearerAuth":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"},"event_types":{"type":"array","items":{"type":"string"},"nullable":true,"description":"Omit or empty array for all events. Available: review.completed."}}}}}},"responses":{"201":{"description":"Target created + signing secret returned"}}}},"/account/webhooks/deliveries":{"get":{"summary":"Recent delivery attempts (status, attempts, last error)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Delivery log"}}}}}}