{
  "openapi": "3.0.1",
  "info": {
    "title": "Website Audit: Accessibility, SEO & Speed + Evidence",
    "description": "Audit public web pages for accessibility (WCAG 2.2), SEO basics and speed in a real browser, and see each problem boxed on a full-page screenshot, with close-up crops and a SHA-256 evidence record. Repeat runs show only new and fixed issues. Failed and blocked pages are free.",
    "version": "0.1",
    "x-build-id": "eWR9mXCfIzXb1T0qk"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/fetchgrove~page-audit-evidence/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-fetchgrove-page-audit-evidence",
        "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/fetchgrove~page-audit-evidence/runs": {
      "post": {
        "operationId": "runs-sync-fetchgrove-page-audit-evidence",
        "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/fetchgrove~page-audit-evidence/run-sync": {
      "post": {
        "operationId": "run-sync-fetchgrove-page-audit-evidence",
        "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",
        "properties": {
          "urls": {
            "title": "Pages to audit",
            "type": "array",
            "description": "Public web pages, one per line. A missing https:// is added for you, and the same address twice is audited (and charged) once. Addresses with a user name or password (\"name:password@\") are refused: logging in is not supported. Only the pages listed are opened; links are never followed. Each site's robots.txt is respected: a page it closes to automated visitors (or a redirect to one) gets an error row and is not charged. If the list is empty, the run audits one example page made with known accessibility problems.",
            "items": {
              "type": "string"
            }
          },
          "checks": {
            "title": "Checks",
            "type": "array",
            "description": "What to check on each page. Accessibility: rules for the WCAG 2.2 level chosen below. SEO: title, description, canonical, robots, headings, image alt text, language alternates, structured data, social sharing tags, viewport, https, redirects and mixed content. Speed: lab estimates from the browser's performance metrics on a cold load (largest content, layout shift, blocking time, first content, page weight). Empty means all three. The price is the same for any choice.",
            "items": {
              "type": "string",
              "enum": [
                "accessibility",
                "seo",
                "performance"
              ],
              "enumTitles": [
                "Accessibility",
                "SEO",
                "Speed"
              ]
            },
            "default": [
              "accessibility",
              "seo",
              "performance"
            ]
          },
          "device": {
            "title": "Device",
            "enum": [
              "desktop",
              "iphone-15",
              "pixel-8",
              "ipad"
            ],
            "type": "string",
            "description": "Audit the page as a desktop browser or as a phone or tablet shows it: that device's screen size, pixel density, mobile layout, touch input and browser identity. Desktop: 1280 x 800. iPhone 15: 393 x 659 at 3x. Pixel 8: 412 x 839 at 2.625x. iPad: 834 x 1194 at 2x (iPad Pro 11 inch, portrait).",
            "default": "desktop"
          },
          "wcagLevel": {
            "title": "WCAG level",
            "enum": [
              "A",
              "AA",
              "AAA"
            ],
            "type": "string",
            "description": "Accessibility rules up to this conformance level of WCAG 2.0, 2.1 and 2.2. AA is what most laws and policies ask for (including the European Accessibility Act through EN 301 549). Automated rules find many problems, not all: a page with no issues here still needs a manual review to conform.",
            "default": "AA"
          },
          "includeBestPractices": {
            "title": "Include recommended practices",
            "type": "boolean",
            "description": "Also report accessibility practices that are recommended but not WCAG requirements, such as landmarks and one main heading. They are marked as best practice in each issue, and they count in the accessibility score, so scores with and without this option are not comparable.",
            "default": false
          },
          "maxIssuesPerPage": {
            "title": "Issues listed per page",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "How many issues each row lists, worst first (1 to 200). Counts and scores always cover every issue found. Within one impact level, different rules take turns, so one rule that fails on hundreds of elements does not hide the others.",
            "default": 50
          },
          "issueCrops": {
            "title": "Close-up crop per issue",
            "type": "boolean",
            "description": "Save a cropped close-up image of each listed issue that has a box on the screenshot (the top 20 per page), with a link from the issue. Charged once per page when at least one crop is saved.",
            "default": true
          },
          "maxCaptureHeight": {
            "title": "Screenshot height limit",
            "minimum": 2000,
            "maximum": 60000,
            "type": "integer",
            "description": "How far down each page the annotated screenshot and the close-ups go, in CSS pixels from the top (2,000 to 60,000). The checks still cover the whole page: issues further down are listed with their selector and position but without a box on the screenshot (offImageReason \"below-capture\"), and the row says truncated. Screenshots also stop at 16,383 image pixels tall: 16,383 CSS pixels on desktop, 5,461 on iPhone 15 (3x), 6,241 on Pixel 8, 8,191 on iPad. Set it lower for smaller screenshot files of very long pages; the price stays the same.",
            "default": 10000
          },
          "onlyChanges": {
            "title": "Only new and fixed issues",
            "type": "boolean",
            "description": "For scheduled runs: each row lists only issues that are new since the last run with the same settings, and names the issues that were fixed. The first run is the baseline and lists everything. Scores and counts still cover the whole page. Baselines are kept per page, per settings and per saved task, in a storage in your own account.",
            "default": false
          },
          "hideCookieBanners": {
            "title": "Hide cookie banners",
            "type": "boolean",
            "description": "Hide common cookie consent banners before checking and capturing, so they do not cover the page. Banners are only hidden, never accepted. Turn this off to check the banner itself.",
            "default": true
          },
          "parallelPages": {
            "title": "Pages at the same time",
            "minimum": 1,
            "maximum": 4,
            "type": "integer",
            "description": "How many pages are audited at the same time (1 to 4). Leave empty for the default: 1 when Speed is among the checks, so pages do not slow each other down and speed numbers stay comparable between runs, and 2 without it. Never more than one page per 1,024 MB of run memory."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}