{"openapi":"3.1.0","info":{"title":"wcagc Developer API","description":"Stable REST API for starting accessibility checks and reading structured results.\n\n**Authentication:** this API does not use the email/password `/api/auth/login` endpoint.\nThat endpoint creates a browser cookie session and is intentionally absent here. Create a\nscoped key in [Settings → Developer API](https://wcagc.com/settings/developer-api), click\n**Authorize** in Swagger, and paste the complete `wcagc_…` key. Clients send it as\n`Authorization: Bearer wcagc_…`.\n\nKeys are organization-scoped, shown once, and should be stored in a secret manager. Most\nroutes require the Developer API plan feature plus the scope named in the operation. The\n`ci:check` scope has its own plan quota. A successful create call returns `202 Accepted` and\na `Location` header; poll that resource until it reaches a terminal state before reading findings.\n\nErrors use `application/problem+json` and include a stable `code`, a `traceId`, and a\n`timestamp`. A `429` response includes `Retry-After`. Automated testing covers only part of\nWCAG and EN 301 549; API results are evidence from automated checks, not a compliance verdict.\n","version":"1.0.0"},"externalDocs":{"description":"Developer guide, quickstart, scopes and error handling","url":"https://wcagc.com/integrations/api"},"servers":[{"url":"https://api.wcagc.com","description":"Production"}],"security":[{"bearerAuth":[]}],"tags":[{"name":"Sites","description":"Discover registered sites in the credential's organization."},{"name":"Single-page scans","description":"Queue one page and read its status and findings."},{"name":"Full-site scans","description":"Queue a crawl and read run-level progress, findings and root causes."},{"name":"CI checks","description":"Run bounded multi-URL checks with a `ci:check` credential."},{"name":"Journeys","description":"Discover saved journeys and run them with server-stored steps and credentials."},{"name":"Site insights","description":"Read trends and tracked remediation work for a site."},{"name":"Fix verification","description":"Queue and read targeted automated re-checks."}],"paths":{"/api/v1/scans":{"post":{"tags":["Single-page scans"],"summary":"Start single-page scan","description":"Queues a scan for a URL on a registered site. Requires scans:write.","operationId":"createScan","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1CreateScanRequest"}}},"required":true},"responses":{"202":{"description":"Accepted","headers":{"Location":{"description":"Relative URL of the queued resource to poll until it reaches a terminal state.","schema":{"type":"string","format":"uri"}}},"content":{"*/*":{"schema":{"$ref":"#/components/schemas/V1ScanAcceptedResponse"}}}},"401":{"description":"API_KEY_INVALID","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"API_KEY_SCOPE_MISSING or FEATURE_NOT_IN_PLAN","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"404":{"description":"SITE_NOT_FOUND","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"409":{"description":"SCAN_ALREADY_RUNNING","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"422":{"description":"INVALID_URL or VALIDATION_FAILED","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"429":{"description":"RATE_LIMITED","headers":{"Retry-After":{"description":"Seconds to wait before retrying this credential.","schema":{"type":"integer","format":"int32","minimum":0}}},"content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}}}}},"/api/v1/scan-runs":{"post":{"tags":["Full-site scans"],"summary":"Start full-site scan run","description":"Queues a full-site run for a registered site. Requires scans:write.","operationId":"createRun","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1CreateScanRunRequest"}}},"required":true},"responses":{"202":{"description":"Accepted","headers":{"Location":{"description":"Relative URL of the queued resource to poll until it reaches a terminal state.","schema":{"type":"string","format":"uri"}}},"content":{"*/*":{"schema":{"$ref":"#/components/schemas/V1ScanAcceptedResponse"}}}},"401":{"description":"API_KEY_INVALID","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"API_KEY_SCOPE_MISSING or FEATURE_NOT_IN_PLAN","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"404":{"description":"SITE_NOT_FOUND","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"409":{"description":"SCAN_ALREADY_RUNNING","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"429":{"description":"RATE_LIMITED","headers":{"Retry-After":{"description":"Seconds to wait before retrying this credential.","schema":{"type":"integer","format":"int32","minimum":0}}},"content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}}}}},"/api/v1/remediation-items/{id}/verifications":{"post":{"tags":["Fix verification"],"summary":"Queue a targeted fix verification","description":"Requires scans:write, API_ACCESS and remediation tracking.","operationId":"verifyFix","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"202":{"description":"Accepted","headers":{"Location":{"description":"Relative URL of the queued resource to poll until it reaches a terminal state.","schema":{"type":"string","format":"uri"}}},"content":{"*/*":{"schema":{"$ref":"#/components/schemas/V1FixVerificationAcceptedResponse"}}}},"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"$ref":"#/components/schemas/V1FixVerificationAcceptedResponse"}}}},"403":{"description":"Forbidden","content":{"*/*":{"schema":{"$ref":"#/components/schemas/V1FixVerificationAcceptedResponse"}}}},"404":{"description":"Not Found","content":{"*/*":{"schema":{"$ref":"#/components/schemas/V1FixVerificationAcceptedResponse"}}}},"409":{"description":"Conflict","content":{"*/*":{"schema":{"$ref":"#/components/schemas/V1FixVerificationAcceptedResponse"}}}},"422":{"description":"Unprocessable Content","content":{"*/*":{"schema":{"$ref":"#/components/schemas/V1FixVerificationAcceptedResponse"}}}},"429":{"description":"Too Many Requests","headers":{"Retry-After":{"description":"Seconds to wait before retrying this credential.","schema":{"type":"integer","format":"int32","minimum":0}}},"content":{"*/*":{"schema":{"$ref":"#/components/schemas/V1FixVerificationAcceptedResponse"}}}}}}},"/api/v1/journeys/{id}/runs":{"post":{"tags":["Journeys"],"summary":"Start a journey run","description":"Queues the journey's saved steps against its Site — credentials, when the journey uses auth, always come from the Site's saved auth profile, never from this request. Requires scans:write; the journey's own JOURNEYS (and AUTHENTICATED_SCANS, when applicable) gate still applies.","operationId":"startJourneyRun","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"202":{"description":"Accepted","headers":{"Location":{"description":"Relative URL of the queued resource to poll until it reaches a terminal state.","schema":{"type":"string","format":"uri"}}},"content":{"*/*":{"schema":{"$ref":"#/components/schemas/V1JourneyRunResponse"}}}},"401":{"description":"API_KEY_INVALID","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"API_KEY_SCOPE_MISSING or FEATURE_NOT_IN_PLAN","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"404":{"description":"JOURNEY_NOT_FOUND","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"409":{"description":"JOURNEY_ALREADY_RUNNING","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"422":{"description":"SITE_AUTH_NOT_CONFIGURED","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"429":{"description":"RATE_LIMITED — retry after the number of seconds in `Retry-After`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying this credential.","schema":{"type":"integer","format":"int32","minimum":0}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}}}}},"/api/v1/ci/checks":{"post":{"tags":["CI checks"],"summary":"Start CI accessibility check","description":"Queues URLs on one verified site. Requires ci:check; Free accepts up to 5 URLs per check and paid plans up to 20.","operationId":"createCiCheck","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/V1CreateCiCheckRequest"}}},"required":true},"responses":{"202":{"description":"Accepted","headers":{"Location":{"description":"Relative URL of the queued resource to poll until it reaches a terminal state.","schema":{"type":"string","format":"uri"}}},"content":{"*/*":{"schema":{"$ref":"#/components/schemas/V1CiCheckAcceptedResponse"}}}},"401":{"description":"API_KEY_INVALID","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"API_KEY_SCOPE_MISSING or FEATURE_NOT_IN_PLAN","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"409":{"description":"DOMAIN_NOT_VERIFIED","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"404":{"description":"SITE_NOT_FOUND","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"422":{"description":"INVALID_URL or VALIDATION_FAILED","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"429":{"description":"RATE_LIMITED","headers":{"Retry-After":{"description":"Seconds to wait before retrying this credential.","schema":{"type":"integer","format":"int32","minimum":0}}},"content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}}}}},"/api/v1/sites":{"get":{"tags":["Sites"],"summary":"List sites","description":"Requires sites:read and API_ACCESS.","operationId":"sites","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/V1SiteResponse"}}}}},"401":{"description":"API_KEY_INVALID","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"API_KEY_SCOPE_MISSING or FEATURE_NOT_IN_PLAN","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"429":{"description":"RATE_LIMITED","headers":{"Retry-After":{"description":"Seconds to wait before retrying this credential.","schema":{"type":"integer","format":"int32","minimum":0}}},"content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}}}}},"/api/v1/sites/{id}/trend":{"get":{"tags":["Site insights"],"summary":"Get a site's violation-count trend","description":"Chronological, no score. Requires scans:read and TREND_HISTORY (Pro+).","operationId":"trend","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/V1SiteTrendResponse"}}}},"401":{"description":"API_KEY_INVALID","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"API_KEY_SCOPE_MISSING or FEATURE_NOT_IN_PLAN","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"404":{"description":"SITE_NOT_FOUND","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"429":{"description":"RATE_LIMITED — retry after the number of seconds in `Retry-After`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying this credential.","schema":{"type":"integer","format":"int32","minimum":0}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}}}}},"/api/v1/sites/{id}/journeys":{"get":{"tags":["Journeys"],"summary":"List a site's journeys","description":"Requires sites:read and API_ACCESS.","operationId":"siteJourneys","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/V1JourneyResponse"}}}}},"401":{"description":"API_KEY_INVALID","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"API_KEY_SCOPE_MISSING or FEATURE_NOT_IN_PLAN","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"404":{"description":"SITE_NOT_FOUND","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"429":{"description":"RATE_LIMITED — retry after the number of seconds in `Retry-After`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying this credential.","schema":{"type":"integer","format":"int32","minimum":0}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}}}}},"/api/v1/sites/{id}/fixes":{"get":{"tags":["Site insights"],"summary":"List tracked fixes for a site","description":"Requires sites:read and API_ACCESS.","operationId":"fixes","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/V1FixResponse"}}}}},"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/V1FixResponse"}}}}},"403":{"description":"Forbidden","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/V1FixResponse"}}}}},"404":{"description":"Not Found","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/V1FixResponse"}}}}},"429":{"description":"RATE_LIMITED — retry after the number of seconds in `Retry-After`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying this credential.","schema":{"type":"integer","format":"int32","minimum":0}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}}}}},"/api/v1/scans/{id}":{"get":{"tags":["Single-page scans"],"summary":"Get scan","description":"Returns status, severity counts and terminal failure reason. Requires scans:read.","operationId":"scan","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/V1ScanResponse"}}}},"401":{"description":"API_KEY_INVALID","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"API_KEY_SCOPE_MISSING or FEATURE_NOT_IN_PLAN","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"404":{"description":"SCAN_NOT_FOUND","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"429":{"description":"RATE_LIMITED","headers":{"Retry-After":{"description":"Seconds to wait before retrying this credential.","schema":{"type":"integer","format":"int32","minimum":0}}},"content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}}}}},"/api/v1/scans/{id}/violations":{"get":{"tags":["Single-page scans"],"summary":"List scan violations","description":"Returns stable flat finding records. Requires scans:read.","operationId":"scanViolations","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/V1ViolationResponse"}}}}},"401":{"description":"API_KEY_INVALID","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"API_KEY_SCOPE_MISSING or FEATURE_NOT_IN_PLAN","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"404":{"description":"SCAN_NOT_FOUND","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"429":{"description":"RATE_LIMITED","headers":{"Retry-After":{"description":"Seconds to wait before retrying this credential.","schema":{"type":"integer","format":"int32","minimum":0}}},"content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}}}}},"/api/v1/scan-runs/{id}":{"get":{"tags":["Full-site scans"],"summary":"Get scan run","description":"Returns progress, severity counts and terminal failure reason. Requires scans:read.","operationId":"run","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/V1ScanRunResponse"}}}},"401":{"description":"API_KEY_INVALID","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"API_KEY_SCOPE_MISSING or FEATURE_NOT_IN_PLAN","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"404":{"description":"SCAN_NOT_FOUND","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"429":{"description":"RATE_LIMITED","headers":{"Retry-After":{"description":"Seconds to wait before retrying this credential.","schema":{"type":"integer","format":"int32","minimum":0}}},"content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}}}}},"/api/v1/scan-runs/{id}/violations":{"get":{"tags":["Full-site scans"],"summary":"List scan-run violations","description":"Returns run-level rule-deduplicated findings. Requires scans:read.","operationId":"runViolations","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/V1ViolationResponse"}}}}},"401":{"description":"API_KEY_INVALID","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"API_KEY_SCOPE_MISSING or FEATURE_NOT_IN_PLAN","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"404":{"description":"SCAN_NOT_FOUND","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"429":{"description":"RATE_LIMITED","headers":{"Retry-After":{"description":"Seconds to wait before retrying this credential.","schema":{"type":"integer","format":"int32","minimum":0}}},"content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}}}}},"/api/v1/scan-runs/{id}/root-causes":{"get":{"tags":["Full-site scans"],"summary":"List a scan run's deterministic root causes","description":"Returns factual blast-radius counts and an explicit automation-coverage disclaimer. Requires scans:read.","operationId":"runRootCauses","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/V1RootCauseResponse"}}}},"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"API_KEY_SCOPE_MISSING or FEATURE_NOT_IN_PLAN","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"404":{"description":"Not Found","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"429":{"description":"RATE_LIMITED — retry after the number of seconds in `Retry-After`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying this credential.","schema":{"type":"integer","format":"int32","minimum":0}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}}}}},"/api/v1/journey-runs/{id}":{"get":{"tags":["Journeys"],"summary":"Get a journey run","description":"Requires scans:read.","operationId":"journeyRun","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/V1JourneyRunResponse"}}}},"401":{"description":"API_KEY_INVALID","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"API_KEY_SCOPE_MISSING or FEATURE_NOT_IN_PLAN","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"429":{"description":"RATE_LIMITED — retry after the number of seconds in `Retry-After`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying this credential.","schema":{"type":"integer","format":"int32","minimum":0}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}}}}},"/api/v1/fix-verifications/{id}":{"get":{"tags":["Fix verification"],"summary":"Get targeted fix-verification progress and outcome","description":"Requires scans:read and API_ACCESS.","operationId":"fixVerification","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/V1FixVerificationResponse"}}}},"401":{"description":"Unauthorized","content":{"*/*":{"schema":{"$ref":"#/components/schemas/V1FixVerificationResponse"}}}},"403":{"description":"Forbidden","content":{"*/*":{"schema":{"$ref":"#/components/schemas/V1FixVerificationResponse"}}}},"404":{"description":"Not Found","content":{"*/*":{"schema":{"$ref":"#/components/schemas/V1FixVerificationResponse"}}}},"429":{"description":"RATE_LIMITED — retry after the number of seconds in `Retry-After`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying this credential.","schema":{"type":"integer","format":"int32","minimum":0}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}}}}},"/api/v1/ci/checks/{id}":{"get":{"tags":["CI checks"],"summary":"Get CI check","description":"Returns progress, baseline delta and verdict. Requires ci:check.","operationId":"ciCheck","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/V1CiCheckResponse"}}}},"401":{"description":"API_KEY_INVALID","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"API_KEY_SCOPE_MISSING or FEATURE_NOT_IN_PLAN","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"404":{"description":"CI_CHECK_NOT_FOUND","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"429":{"description":"RATE_LIMITED","headers":{"Retry-After":{"description":"Seconds to wait before retrying this credential.","schema":{"type":"integer","format":"int32","minimum":0}}},"content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}}}}},"/api/v1/ci/checks/{id}/violations":{"get":{"tags":["CI checks"],"summary":"List CI check findings","description":"Returns URL-level findings with stable fingerprints and baseline isNew markers. Requires ci:check.","operationId":"ciCheckViolations","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/V1CiViolationResponse"}}}}},"401":{"description":"API_KEY_INVALID","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"API_KEY_SCOPE_MISSING or FEATURE_NOT_IN_PLAN","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"404":{"description":"CI_CHECK_NOT_FOUND","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"429":{"description":"RATE_LIMITED","headers":{"Retry-After":{"description":"Seconds to wait before retrying this credential.","schema":{"type":"integer","format":"int32","minimum":0}}},"content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}}}}}},"components":{"schemas":{"V1CreateScanRequest":{"type":"object","description":"Starts a single-page check. The URL must belong to a site already registered in this organization.","properties":{"url":{"type":"string","description":"Absolute HTTP(S) page URL on a registered site.","example":"https://example.com/checkout","maxLength":2048,"minLength":0}},"required":["url"]},"V1ScanAcceptedResponse":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string"}}},"ProblemDetail":{"type":"object","description":"RFC 7807 problem details with stable wcagc error metadata.","properties":{"type":{"type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer","format":"int32"},"detail":{"type":"string"},"instance":{"type":"string","format":"uri"},"code":{"type":"string","description":"Stable machine-readable code. Branch on this value, not on `detail`.","example":"API_KEY_SCOPE_MISSING"},"traceId":{"type":"string","format":"uuid","description":"Request correlation identifier for support and logs.","example":"019c1234-5678-7abc-8def-0123456789ab"},"timestamp":{"type":"string","format":"date-time","description":"UTC time at which the API produced the problem response."}}},"V1CreateScanRunRequest":{"type":"object","description":"Starts a full-site crawl for a registered site.","properties":{"siteId":{"type":"string","format":"uuid","description":"Site UUID returned by `GET /api/v1/sites`.","example":"019c1234-5678-7abc-8def-0123456789ab"}},"required":["siteId"]},"V1FixVerificationAcceptedResponse":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string"}}},"Checkpoint":{"type":"object","properties":{"scanId":{"type":"string"},"label":{"type":"string"},"url":{"type":"string"},"status":{"type":"string"}}},"V1JourneyRunResponse":{"type":"object","properties":{"id":{"type":"string"},"journeyId":{"type":"string"},"siteId":{"type":"string"},"status":{"type":"string"},"failedStepIndex":{"type":"integer","format":"int32"},"failureReasonCode":{"type":"string"},"failureReasonText":{"type":"string"},"checkpoints":{"type":"array","items":{"$ref":"#/components/schemas/Checkpoint"}},"startedAt":{"type":"string","format":"date-time"},"finishedAt":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"}}},"V1CreateCiCheckRequest":{"type":"object","description":"Starts a bounded CI check. Every URL must belong to the same verified site.","properties":{"urls":{"type":"array","description":"One to twenty absolute URLs on the same verified site.","example":["https://example.com/","https://example.com/checkout"],"items":{"type":"string","maxLength":2048,"minLength":0},"maxItems":20,"minItems":0},"failOn":{"type":"string","description":"Minimum impact that makes the check fail. Omit to use the service default.","enum":["NEW_CRITICAL","ANY_CRITICAL","SERIOUS_OR_WORSE","NONE"],"example":"SERIOUS"},"setBaseline":{"type":"boolean","description":"When true, save this completed check as the future comparison baseline.","example":false},"context":{"type":"object","additionalProperties":{},"description":"Optional caller metadata such as repository, branch, commit or pull-request identifiers.","example":{"commit":"abc123","repository":"acme/storefront"}}},"required":["urls"]},"V1CiCheckAcceptedResponse":{"type":"object","properties":{"id":{"type":"string","format":"uuid"}}},"V1SiteResponse":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"rootUrl":{"type":"string"},"normalizedHost":{"type":"string"},"verified":{"type":"boolean"}}},"Point":{"type":"object","properties":{"scanRunId":{"type":"string"},"finishedAt":{"type":"string","format":"date-time"},"status":{"type":"string"},"pagesScanned":{"type":"integer","format":"int32"},"truncated":{"type":"boolean"},"totalViolations":{"type":"integer","format":"int32"},"bySeverity":{"$ref":"#/components/schemas/V1SeverityCounts"},"addedCount":{"type":"integer","format":"int32"},"resolvedCount":{"type":"integer","format":"int32"}}},"V1SeverityCounts":{"type":"object","properties":{"critical":{"type":"integer","format":"int32"},"serious":{"type":"integer","format":"int32"},"moderate":{"type":"integer","format":"int32"},"minor":{"type":"integer","format":"int32"}}},"V1SiteTrendResponse":{"type":"object","properties":{"siteId":{"type":"string"},"standard":{"type":"string"},"points":{"type":"array","items":{"$ref":"#/components/schemas/Point"}}}},"V1JourneyResponse":{"type":"object","properties":{"id":{"type":"string"},"siteId":{"type":"string"},"name":{"type":"string"},"usesAuth":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"}}},"V1FixResponse":{"type":"object","properties":{"id":{"type":"string"},"siteId":{"type":"string"},"ruleId":{"type":"string"},"impact":{"type":"string"},"rootCauseKey":{"type":"string"},"componentLabel":{"type":"string"},"status":{"type":"string"},"verifiedScope":{"type":"string"},"verifiedAt":{"type":"string","format":"date-time"},"verifiedPagesCount":{"type":"integer","format":"int32"},"nodesCountAtTracking":{"type":"integer","format":"int32"},"pagesCountAtTracking":{"type":"integer","format":"int32"},"verifiable":{"type":"boolean"}}},"FailureReason":{"type":"object","properties":{"code":{"type":"string"},"reason":{"type":"string"}}},"V1ScanResponse":{"type":"object","properties":{"id":{"type":"string"},"siteId":{"type":"string"},"status":{"type":"string"},"requestedUrl":{"type":"string"},"counts":{"$ref":"#/components/schemas/V1SeverityCounts"},"totalViolations":{"type":"integer","format":"int32"},"failureReason":{"$ref":"#/components/schemas/FailureReason"}}},"V1ViolationResponse":{"type":"object","properties":{"ruleId":{"type":"string"},"impact":{"type":"string"},"wcagSc":{"type":"array","items":{"type":"string"}},"url":{"type":"string"},"helpUrl":{"type":"string"},"target":{"type":"string"},"htmlSnippet":{"type":"string"},"failureSummary":{"type":"string"}}},"V1ScanRunResponse":{"type":"object","properties":{"id":{"type":"string"},"siteId":{"type":"string"},"status":{"type":"string"},"pagesTotal":{"type":"integer","format":"int32"},"pagesDone":{"type":"integer","format":"int32"},"counts":{"$ref":"#/components/schemas/V1SeverityCounts"},"totalViolations":{"type":"integer","format":"int32"},"failureReason":{"$ref":"#/components/schemas/FailureReason"}}},"Cluster":{"type":"object","properties":{"key":{"type":"string"},"ruleId":{"type":"string"},"impact":{"type":"string"},"wcagSc":{"type":"array","items":{"type":"string"}},"pattern":{"type":"string"},"selectorSignature":{"type":"string"},"component":{"$ref":"#/components/schemas/RootCauseComponent"},"nodesCount":{"type":"integer","format":"int32"},"pagesCount":{"type":"integer","format":"int32"},"samplePages":{"type":"array","items":{"type":"string"}},"sampleSelectors":{"type":"array","items":{"type":"string"}},"guidance":{"type":"string"},"exampleFix":{"type":"string"},"helpUrl":{"type":"string"}}},"RootCauseComponent":{"type":"object","properties":{"label":{"type":"string"},"source":{"type":"string"},"platform":{"type":"string"}}},"RootCauseSummary":{"type":"object","properties":{"findingsTotal":{"type":"integer","format":"int64"},"analyzedFindings":{"type":"integer","format":"int32"},"clustersTotal":{"type":"integer","format":"int32"},"clusteredFindings":{"type":"integer","format":"int32"},"pagesTotal":{"type":"integer","format":"int32"}}},"V1RootCauseResponse":{"type":"object","properties":{"scope":{"type":"string"},"status":{"type":"string"},"signatureVersion":{"type":"string"},"summary":{"$ref":"#/components/schemas/RootCauseSummary"},"truncated":{"type":"boolean"},"clusters":{"type":"array","items":{"$ref":"#/components/schemas/Cluster"}},"coverageDisclaimer":{"type":"string"}}},"Page":{"type":"object","properties":{"url":{"type":"string"},"status":{"type":"string","enum":["QUEUED","RUNNING","DONE","TIMEOUT","UNREACHABLE","ERROR"]},"counts":{"$ref":"#/components/schemas/V1SeverityCounts"}}},"V1FixVerificationResponse":{"type":"object","properties":{"id":{"type":"string"},"remediationItemId":{"type":"string"},"siteId":{"type":"string"},"status":{"type":"string"},"outcome":{"type":"string"},"source":{"type":"string"},"scopeGranularity":{"type":"string"},"rootCauseKey":{"type":"string"},"pagesRequested":{"type":"integer","format":"int32"},"pagesScanned":{"type":"integer","format":"int32"},"pagesFailed":{"type":"integer","format":"int32"},"nodesFound":{"type":"integer","format":"int32"},"ruleNodesFound":{"type":"integer","format":"int32"},"pages":{"type":"array","items":{"$ref":"#/components/schemas/Page"}},"failureReasonCode":{"type":"string"},"startedAt":{"type":"string","format":"date-time"},"finishedAt":{"type":"string","format":"date-time"}}},"V1CiCheckResponse":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["QUEUED","RUNNING","COMPLETED","FAILED"]},"verdict":{"type":"string","enum":["PASS","FAIL"]},"failOn":{"type":"string","enum":["NEW_CRITICAL","ANY_CRITICAL","SERIOUS_OR_WORSE","NONE"]},"baselineMissing":{"type":"boolean"},"counts":{"$ref":"#/components/schemas/V1SeverityCounts"},"newCounts":{"$ref":"#/components/schemas/V1SeverityCounts"},"fixedCount":{"type":"integer","format":"int32"},"unchangedCount":{"type":"integer","format":"int32"},"baselineCheckId":{"type":"string","format":"uuid"},"pages":{"type":"array","items":{"$ref":"#/components/schemas/Page"}},"appUrl":{"type":"string"},"failureReason":{"type":"string"}}},"V1CiViolationResponse":{"type":"object","properties":{"ruleId":{"type":"string"},"impact":{"type":"string"},"wcagSc":{"type":"array","items":{"type":"string"}},"url":{"type":"string"},"helpUrl":{"type":"string"},"target":{"type":"string"},"failureSummary":{"type":"string"},"fingerprint":{"type":"string"},"isNew":{"type":"boolean"}}}},"securitySchemes":{"bearerAuth":{"type":"http","description":"Paste the complete `wcagc_…` key created in Settings → Developer API. Swagger adds the `Bearer` prefix automatically.","scheme":"bearer","bearerFormat":"wcagc API key"}}}}