{
  "openapi": "3.0.1",
  "info": {
    "title": "US Government Title II ADA Accessibility Audit",
    "description": "WCAG 2.1 AA audit for US state/local government sites, with a Title II (28 CFR Part 35) legal report: deadline, all five scoping exceptions, and the affirmative defense. Real selectors, screenshots, executive summary. Automated scan, not legal advice. No charge on failures.",
    "version": "0.0",
    "x-build-id": "mTKOVEdOo1zmK4DoT"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/elab~us-gov-title-ii-ada-accessibility-audit/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-elab-us-gov-title-ii-ada-accessibility-audit",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/elab~us-gov-title-ii-ada-accessibility-audit/runs": {
      "post": {
        "operationId": "runs-sync-elab-us-gov-title-ii-ada-accessibility-audit",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/elab~us-gov-title-ii-ada-accessibility-audit/run-sync": {
      "post": {
        "operationId": "run-sync-elab-us-gov-title-ii-ada-accessibility-audit",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "urls"
        ],
        "properties": {
          "urls": {
            "title": "URLs to audit",
            "type": "array",
            "description": "Public page URLs to audit. Each URL produces one audit. This tool only checks the pages you provide - it does not crawl or discover other pages itself. Up to 100 URLs per run (useful for a COG or state municipal league auditing many member-city sites in one batch - see 'Issues recurring across multiple sites').",
            "default": [
              "https://www.usa.gov"
            ],
            "items": {
              "type": "string"
            }
          },
          "wcagLevel": {
            "title": "WCAG level",
            "enum": [
              "wcag2a",
              "wcag2aa",
              "wcag21a",
              "wcag21aa",
              "wcag22aa"
            ],
            "type": "string",
            "description": "WCAG level/version to check against. 'wcag21aa' (default) is the exact minimum 28 CFR 35.200(b)(1)-(2) requires for covered public entities. wcag22aa is an extended superset that also meets this minimum and additionally covers newer criteria relevant to mobile.",
            "default": "wcag21aa"
          },
          "entityPopulationTier": {
            "title": "Public entity population tier",
            "enum": [
              "50000_or_more",
              "under_50000_or_special_district",
              "unknown"
            ],
            "type": "string",
            "description": "Population tier of the public entity that owns the audited site(s) - used only to state the correct Title II compliance deadline in the legal report (see dropdown options for exact dates, current per the DOJ's April 2026 Interim Final Rule, doc 2026-07663, amending 28 CFR 35.200). Leave 'unknown' (default) to have the report state both deadlines with a prompt to confirm classification - this Actor never infers population from a URL.",
            "default": "unknown"
          },
          "entityName": {
            "title": "Entity name (optional)",
            "type": "string",
            "description": "Optional name of the public entity (e.g. 'City of Example') to print on the legal report's executive-summary cover page. Purely cosmetic - never used to look up or infer anything about the entity.",
            "default": ""
          },
          "viewport": {
            "title": "Viewport",
            "enum": [
              "desktop",
              "tablet",
              "mobile",
              "custom"
            ],
            "type": "string",
            "description": "Screen resolution used for the audit. 'mobile' catches mobile-relevant violations (e.g. the WCAG 2.2 Target Size rule) that a desktop-only check would miss.",
            "default": "desktop"
          },
          "viewportWidth": {
            "title": "Custom viewport width",
            "minimum": 200,
            "maximum": 4000,
            "type": "integer",
            "description": "Used only when Viewport is set to 'custom'.",
            "default": 1280
          },
          "viewportHeight": {
            "title": "Custom viewport height",
            "minimum": 200,
            "maximum": 4000,
            "type": "integer",
            "description": "Used only when Viewport is set to 'custom'.",
            "default": 800
          },
          "includeScreenshots": {
            "title": "Include screenshots",
            "type": "boolean",
            "description": "A focused screenshot for each violation, plus a full-page screenshot for each URL. Included in the 'page-audited' event price - no extra charge.",
            "default": true
          },
          "includeIncomplete": {
            "title": "Include checks that need human review",
            "type": "boolean",
            "description": "Also include axe-core 'incomplete' checks that need human review, alongside confirmed violations. The 'status' field in each row distinguishes 'violation' (confirmed) from 'incomplete' (needs review) - they are never merged.",
            "default": true
          },
          "includePasses": {
            "title": "Include rules that passed",
            "type": "boolean",
            "description": "Also return the count of rules that passed. Off by default to keep output focused on actionable findings.",
            "default": false
          },
          "outputMode": {
            "title": "Output mode",
            "enum": [
              "perPage",
              "flat",
              "both"
            ],
            "type": "string",
            "description": "'perPage' returns one page row per URL with a violationsByImpact summary. 'flat' returns one page row per URL plus one violation row per individual finding (suited to spreadsheets and ticketing systems). 'both' returns the same rows as 'flat', tagged by the 'rowType' field. Failed URLs get an error page row in every mode, never charged.",
            "default": "both"
          },
          "generateLegalReport": {
            "title": "Generate Title II legal-citation report",
            "type": "boolean",
            "description": "Generate one Title II legal-citation PDF per run: executive summary, compliance deadline, the WCAG 2.1 AA requirement (28 CFR 35.200), all five scoping exceptions (28 CFR 35.201), the undue-burden affirmative defense (28 CFR 35.204), violations mapped to WCAG criteria, screenshots, and a batch rollup incl. issues recurring across sites. Core differentiator, on by default. Automated scan only, not legal advice (see README). Charged as 'legal-report-generated', only on success.",
            "default": true
          },
          "generatePdfReport": {
            "title": "Generate plain PDF report (WCAG only, no legal citation)",
            "type": "boolean",
            "description": "Generate an additional plain PDF report without the Title II legal context, for buyers who want a pure WCAG report. Charged separately as 'report-generated', only when generation succeeds. Off by default; the Title II legal report above is the recommended report for this Actor's target audience.",
            "default": false
          },
          "waitForSelector": {
            "title": "Wait for selector",
            "type": "string",
            "description": "Optional CSS selector to wait for before auditing (for SPAs and client-rendered content). If the selector does not appear within the time budget, the page is still audited and 'waitForSelectorTimedOut' is set to true instead of failing.",
            "default": ""
          },
          "waitUntil": {
            "title": "Wait until",
            "enum": [
              "load",
              "domcontentloaded",
              "networkidle"
            ],
            "type": "string",
            "description": "When to start the audit. 'load' (default, recommended) is reliable even on complex government sites with continuous ad/analytics/agenda-widget network activity. 'networkidle' waits for the network to go quiet - more thorough for slow-loading content, but often never happens on many real sites and causes timeouts. 'domcontentloaded' is fastest but may run before late-loading content appears.",
            "default": "load"
          },
          "timeoutSecs": {
            "title": "Time budget (seconds)",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "Maximum seconds for navigation, axe-core checks and screenshot combined, before a URL is marked as a timeout error (not charged).",
            "default": 30
          },
          "proxyConfiguration": {
            "title": "Proxy settings",
            "type": "object",
            "description": "Apify Proxy settings for the audit request.",
            "default": {
              "useApifyProxy": true
            }
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum number of pages audited in parallel within a single run.",
            "default": 5
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}