{
  "openapi": "3.1.0",
  "info": {
    "title": "Page Lookout API",
    "version": "1.2.0",
    "description": "Start scans and read their results with an organization API key, and receive signed webhook events when a scan finishes. Every operation is scoped to one organization: {organizationId} is your organization id, shown on the Integrations screen of the dashboard next to the API base URL. Send the key as `Authorization: Bearer <key>`. Every request may send an `x-correlation-id` header (1-128 characters of `A-Z a-z 0-9 . _ : -`); every response returns the id in the same header, and every failure also as correlationId in the error body - quote it when you contact support. The guides (getting started, errors and limits, webhooks, versioning, changelog) are published next to this reference."
  },
  "servers": [
    {
      "url": "{apiBaseUrl}",
      "description": "Your Page Lookout API",
      "variables": {
        "apiBaseUrl": {
          "default": "https://api.example.invalid",
          "description": "The API base URL shown on the Integrations screen of the dashboard."
        }
      }
    }
  ],
  "tags": [
    {
      "name": "Sites",
      "description": "The sites your organization scans. The paths call a site a domain: {domainId} is a site id."
    },
    {
      "name": "Scans",
      "description": "Starting a scan of a site, and following a run: its status, its tasks and what changed since the previous scan of the same site."
    },
    {
      "name": "Findings",
      "description": "What the scans observed: findings, the issues they group into, the rules behind them and the summaries the dashboard shows."
    },
    {
      "name": "Consent inventory",
      "description": "The third parties, cookies and storage keys the consent scans found on a site, merged over the pages of one scan run: a summary with the runs to pick from, and a list of each kind with filters, sorting and paging."
    },
    {
      "name": "Consent approvals",
      "description": "The third parties your organization has said it expects on its sites, as a list of registrable domains for the whole organization or for one site: whether the list is on, its entries, and the list one site is judged against. Read-only for an API key."
    },
    {
      "name": "Consent classifications",
      "description": "What your organization has said a cookie or a storage key is for, as a list of entries for the whole organization or for one site, and the set one site’s next scan would use. Read-only for an API key."
    },
    {
      "name": "Reports",
      "description": "The report a finished scan run is frozen into, and its PDF: where the PDF stands and a short-lived download reference to it."
    },
    {
      "name": "Artifacts",
      "description": "The bytes of a stored report, for the download reference that points at this API."
    },
    {
      "name": "Webhook events",
      "description": "What Page Lookout sends to your own HTTPS endpoints: the events, their bodies and the headers that sign them. These are requests to you, not operations you call."
    }
  ],
  "security": [
    {
      "apiCredential": []
    }
  ],
  "paths": {
    "/organizations/{organizationId}/domains": {
      "get": {
        "operationId": "listDomains",
        "summary": "Every site of this organization",
        "description": "Ordered by creation. An organization owns many sites; there is no pagination yet. Each site carries its tags (tags: id, name and colour, by name, case-insensitive). Tags are read-only through the API. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Sites"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The sites.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DomainListResponse"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/domains/{domainId}": {
      "get": {
        "operationId": "readDomain",
        "summary": "One site",
        "description": "A site of another organization than the API key’s answers 404, exactly as an id that names nothing. The site carries its tags (id, name and colour, by name). Tags are read-only through the API. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Sites"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "domainId",
            "in": "path",
            "required": true,
            "description": "A site owned by that organization.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The site.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Domain"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/consent-approvals": {
      "get": {
        "operationId": "readConsentApprovals",
        "summary": "Whether the approved third-party list is on, and what it holds",
        "description": "The switch (enabled, off by default), the list’s version and the number of entries, split into organization-wide allows, site allows and site exclusions. The version goes up by one with every change to the list or to the switch; a scan keeps the version it was judged with. While the list is off no scan result is judged against it. The counts cover the entries the caller may see. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Consent approvals"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The settings.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConsentApprovalSettings"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/consent-approvals/trackers": {
      "get": {
        "operationId": "listApprovedTrackers",
        "summary": "The approved third-party list, by domain",
        "description": "One entry per third-party registrable domain and place: the whole organization (scope organization) or one site (scope site, with its domainId). An allow says the domain is expected there; an exclude says it is expected everywhere except on that site. In order of domain, then id, in keyset pages: pass nextCursor back as cursor until it is null. A caller limited to some sites is given the organization-wide entries and the entries of the sites they can see. Entries name no person: createdByKind is user or unknown. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Consent approvals"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "domainId",
            "in": "query",
            "required": false,
            "description": "Only the entries of this site (not the organization-wide ones). A site that is not one the caller can see, or not this organization’s, matches nothing: an empty page. Not combinable with scope.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "scope",
            "in": "query",
            "required": false,
            "description": "organization: only the organization-wide entries. Not combinable with domainId, nor with effect=exclude (an organization-wide entry is never an exclusion).",
            "schema": {
              "type": "string",
              "enum": [
                "organization"
              ]
            }
          },
          {
            "name": "effect",
            "in": "query",
            "required": false,
            "description": "allow: domains the organization expects. exclude: domains it expects everywhere except on one site.",
            "schema": {
              "type": "string",
              "enum": [
                "allow",
                "exclude"
              ]
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "A case-insensitive substring of the domain. Never a pattern.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many entries to return, 1-200. Defaults to 50.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 50
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "The nextCursor of the previous page. Opaque: hand back what was given, nothing else.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 256
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A page of entries.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApprovedTrackerListResponse"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid, or a query parameter is not accepted - including scope=organization together with effect=exclude, which can never match.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/domains/{domainId}/consent-approvals/effective": {
      "get": {
        "operationId": "readDomainConsentApprovalsEffective",
        "summary": "The approved third parties one site is judged against",
        "description": "The organization-wide allows plus the site’s own allows, minus the site’s exclusions, sorted by domain, each with its source (organization or site). excludedDomains are the organization-wide domains this site opted out of. effectiveHash is a SHA-256 of the domains: two scans with the same hash were judged against the same set. enabled and listVersion are the organization’s. A site the caller cannot see answers 404. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Consent approvals"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "domainId",
            "in": "path",
            "required": true,
            "description": "A site owned by that organization.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The effective list.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EffectiveApprovedTrackersResponse"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s; or no such site - an unknown id and a site of another organization get the same answer.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/consent-classifications": {
      "get": {
        "operationId": "listOrganizationConsentClassifications",
        "summary": "The organization’s own cookie and storage-key classifications",
        "description": "One entry per cookie or storage key the organization has classified, for the whole organization (scope organization) or for one site (scope site, with its domainId): the kind (cookie or storage_key), the match (exact: the whole name; prefix: names that start with it), the name, for a cookie the optional domain that must have set it, the category, whether it is essential, the vendor and a private note. A site’s entry wins over an organization-wide one, and the most specific match wins inside each. Scans of the organization use the entries from each site’s next scan; findings already raised are not changed. In order of kind, name, then id, in keyset pages: pass nextCursor back as cursor until it is null. counts holds the number of entries the caller may see (the organization holds at most 500) and siteBytesUsedMax, the size in bytes of the largest set one site’s scan would carry, against the 65536 a scan can take. createdBy and updatedBy say that a person in the organization decided; their id and displayName are null for an API key, and the whole actor is null when that person is no longer a member, or was Page Lookout staff acting for the organization. A caller limited to some sites is given the organization-wide entries and the entries of the sites they can see. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Consent classifications"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "description": "Only cookies, or only storage keys.",
            "schema": {
              "type": "string",
              "enum": [
                "cookie",
                "storage_key"
              ]
            }
          },
          {
            "name": "domainId",
            "in": "query",
            "required": false,
            "description": "Only the classifications of this site (not the organization-wide ones). A site that is not one the caller can see, or not this organization’s, matches nothing: an empty page. Not combinable with scope.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "scope",
            "in": "query",
            "required": false,
            "description": "organization: only the organization-wide classifications. site: only those of a site (of every site the caller can see). Not combinable with domainId.",
            "schema": {
              "type": "string",
              "enum": [
                "site",
                "organization"
              ]
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "A case-insensitive substring of the name. Never a pattern.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many classifications to return, 1-200. Defaults to 50.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 50
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "The nextCursor of the previous page. Opaque: hand back what was given, nothing else.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 512
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A page of classifications, and the counts.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConsentOrganizationClassificationListResponse"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid, or a query parameter is not accepted - including scope together with domainId.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/consent-classifications/{entryId}": {
      "get": {
        "operationId": "readOrganizationConsentClassification",
        "summary": "One classification of the organization",
        "description": "The same entry the list returns, read by its id: the kind, match, name, the optional cookie domain, the scope (organization or site, with its domainId), category, essential, vendor, the private note and who last changed it and when. An entry of a site the caller cannot see answers 404, the same as an id that names nothing. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Consent classifications"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "entryId",
            "in": "path",
            "required": true,
            "description": "A classification of that organization’s own cookies and storage keys.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The classification.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConsentOrganizationClassification"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s; or no such classification - an unknown id and a classification of another organization get the same answer.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/domains/{domainId}/consent-classifications/effective": {
      "get": {
        "operationId": "readDomainConsentClassificationsEffective",
        "summary": "The classifications one site’s next scan would use",
        "description": "The organization-wide classifications and the site’s own, as the next scan of the site would receive them: block has two lists, site (read first) and organization, each sorted, and version identifies exactly this content - two scans with the same version were judged with the same classifications. block and version are null when no classification applies. entryCount and bytesUsed are the block’s, bytesLimit is what one scan can take. A site the caller cannot see answers 404. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Consent classifications"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "domainId",
            "in": "path",
            "required": true,
            "description": "A site owned by that organization.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The effective classifications.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConsentOrganizationClassificationEffectiveResponse"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s; or no such site - an unknown id and a site of another organization get the same answer.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/domains/{domainId}/scans": {
      "post": {
        "operationId": "createScanRun",
        "summary": "Start a scan of one site",
        "description": "Takes no body: the run is created from the site’s stored scan policy, a copy of which is returned as policySnapshot. The new run comes back queued, with dispatch.state \"pending\", which becomes \"published\" once its work has been handed to the scanners. Requires an API key with the `scans:write` scope.",
        "tags": [
          "Scans"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "domainId",
            "in": "path",
            "required": true,
            "description": "A site owned by that organization.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "The queued run.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ScanRun"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "A scan of this site is already queued or running. details.activeScanRunId names it. Two requests racing to start one get exactly one run and one 409.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Scanning is disabled for this site, the site is paused, or the organization has reached its limit of concurrent scans or of scans this month; or the site’s policy names only modules that are not available yet (no details.reason).",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      },
      "get": {
        "operationId": "listDomainScanRuns",
        "summary": "The scan history of one site",
        "description": "Newest first, bounded by limit. There is no cursor yet. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Scans"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "domainId",
            "in": "path",
            "required": true,
            "description": "A site owned by that organization.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many runs to return, 1-100. Defaults to 20.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 20
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The runs.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ScanRunListResponse"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/scans": {
      "get": {
        "operationId": "listScanRuns",
        "summary": "Every recent scan of this organization",
        "description": "Across all of its sites, newest first, bounded by limit. Each item carries its domainId, its taskCounts and its findingCounts. Both filters are optional and are applied before the limit, so ?status=failed cannot answer \"nothing failed\" because the newest twenty runs all succeeded. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Scans"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many runs to return, 1-100. Defaults to 20.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 20
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "Only runs in this status. Absent means every status.",
            "schema": {
              "type": "string",
              "enum": [
                "queued",
                "running",
                "completed",
                "partially_completed",
                "failed"
              ]
            }
          },
          {
            "name": "domainId",
            "in": "query",
            "required": false,
            "description": "Only runs of this site. A site id of another organization matches nothing and answers an empty list. Absent means every site.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The runs.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ScanRunListResponse"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/scans/{scanRunId}": {
      "get": {
        "operationId": "readScanRun",
        "summary": "One scan run",
        "description": "Status, timestamps and dispatch state. A run of another organization answers 404, exactly as an id that names nothing. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Scans"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "scanRunId",
            "in": "path",
            "required": true,
            "description": "A scan run owned by that organization.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The run.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ScanRun"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/scans/{scanRunId}/tasks": {
      "get": {
        "operationId": "listScanTasks",
        "summary": "The tasks of one scan run",
        "description": "One task per discovered URL per scan module, plus the run’s own domain-level discovery task. Its own endpoint rather than an array on the run, because a run of a 500-page site with five modules is 2500 tasks - the run carries taskCounts, which is what a progress bar needs. Oldest first; both filters are optional. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Scans"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "scanRunId",
            "in": "path",
            "required": true,
            "description": "A scan run owned by that organization.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many tasks to return, 1-500. Defaults to 100.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 500,
              "default": 100
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "Only tasks in this status. Absent means every status.",
            "schema": {
              "type": "string",
              "enum": [
                "queued",
                "running",
                "completed",
                "failed",
                "cancelled"
              ]
            }
          },
          {
            "name": "module",
            "in": "query",
            "required": false,
            "description": "Only tasks of this module, discovery included. Absent means every module.",
            "schema": {
              "type": "string",
              "enum": [
                "discovery",
                "security_baseline",
                "performance",
                "seo",
                "accessibility",
                "consent",
                "visual",
                "geo"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The tasks.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ScanTaskListResponse"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/scans/{scanRunId}/findings": {
      "get": {
        "operationId": "listScanRunFindings",
        "summary": "What one scan run found",
        "description": "The findings this run produced, worst first, bounded by limit. The run also carries findingCounts, which is what a result badge needs; this is the list behind it. All four filters are optional and severity is repeatable. Each finding carries organizationClassification: for a consent finding that an organization’s own entry judged, the entry as of the scan - which list it was in, how it matched, its name, and when and by whom it was last changed (an API key is not told who) - and null for every other finding. Requires an API key with the `findings:read` scope.",
        "tags": [
          "Findings"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "scanRunId",
            "in": "path",
            "required": true,
            "description": "A scan run owned by that organization.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many findings to return, 1-200. Defaults to 50.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "How many findings to skip. Defaults to 0. An offset past the end of the list is an empty items array with the real total beside it, not a 400 - a filter that narrowed the list between two requests is an ordinary thing to happen.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "severity",
            "in": "query",
            "required": false,
            "description": "Only findings of these severities. Repeatable - ?severity=critical&severity=high. Absent means every severity.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "info",
                  "low",
                  "medium",
                  "high",
                  "critical"
                ]
              }
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "Only findings in this workflow state. Absent means every state.",
            "schema": {
              "type": "string",
              "enum": [
                "open",
                "resolved",
                "suppressed"
              ]
            }
          },
          {
            "name": "module",
            "in": "query",
            "required": false,
            "description": "Only findings produced by this module. Absent means every module.",
            "schema": {
              "type": "string",
              "enum": [
                "discovery",
                "security_baseline",
                "performance",
                "seo",
                "accessibility",
                "consent",
                "visual",
                "geo"
              ]
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Only findings seen on this page. The value is canonicalized before it is looked up, so https://example.com and https://example.com/ are the same page; a URL this site has never shown answers an empty list.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ruleId",
            "in": "query",
            "required": false,
            "description": "Only findings this rule produced, e.g. sec.headers.hsts_missing. The same spelling the issues list takes it in. A rule nothing in scope has reported answers an empty list.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128
            }
          },
          {
            "name": "comparisonStatus",
            "in": "query",
            "required": false,
            "description": "Only findings the run-over-run comparison placed in this bucket. resolved here is the comparison’s verdict and not the workflow status filter above - the two are different columns. unscanned and incomparable are the cases where the comparison could not make a statement: absence that was never observed, and a finding the baseline could not have reported. A run with no comparison answers an empty list for every value.",
            "schema": {
              "type": "string",
              "enum": [
                "new",
                "persistent",
                "changed",
                "resolved",
                "unscanned",
                "incomparable"
              ]
            }
          },
          {
            "name": "wcag",
            "in": "query",
            "required": false,
            "description": "Only findings that cite this WCAG 2.2 criterion, e.g. 1.4.3. Repeatable: a finding that cites any of the criteria matches. A check can relate to more than one criterion, and its findings are found by each. A value that is not a WCAG 2.2 criterion number is a 400; a criterion with no findings answers an empty list. With wcagLevel, the level narrows the criteria: a finding matches when it cites a criterion that is one of the numbers and of one of the levels.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "pattern": "^[1-4]\\.\\d\\.\\d{1,2}$"
              }
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "wcagLevel",
            "in": "query",
            "required": false,
            "description": "Only findings that cite a criterion of this level (the level WCAG gives the criterion). Repeatable: any of the levels matches. A value that is not A, AA or AAA is a 400. With wcag, the level narrows the criteria: wcag=1.4.3&wcagLevel=A answers an empty list, because 1.4.3 is level AA.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "A",
                  "AA",
                  "AAA"
                ]
              }
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "pageId",
            "in": "query",
            "required": false,
            "description": "Only findings seen on this page, by its id - what the pages inventory returns. It is the other spelling of url above, for a caller that already holds the identity rather than the address. A filter rather than a scope: a page id this organization does not own matches nothing and answers an empty list. Sending pageId and url together is a 400 - they are two ways of naming one page, and intersecting them would answer an empty list for a mismatched pair that looks exactly like a clean page.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The findings.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FindingListResponse"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/scans/{scanRunId}/comparison": {
      "get": {
        "operationId": "readScanRunComparison",
        "summary": "What changed since the previous scan of this site",
        "description": "This run against the previous successful run of the same site: how many findings are new, still present, changed, resolved - plus the two cases the comparison refuses to guess at, unscanned and incomparable. The baseline is the previous run of the SAME site with a status of completed or partially_completed; a failed run is never a baseline. byModule carries the per-module comparability and both scanner configurations, so a performance run taken under a different device profile is reported as incomparable with both profiles named rather than subtracted. An own run with no comparison answers 200 with state pending (still running) or unavailable (finished, nothing stored) - never 404, which would mean the scan does not exist. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Scans"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "scanRunId",
            "in": "path",
            "required": true,
            "description": "A scan run owned by that organization.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The comparison.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ScanRunComparison"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/scans/{scanRunId}/comparison/closed-findings": {
      "get": {
        "operationId": "listScanRunClosedFindings",
        "summary": "What one scan run closed",
        "description": "The findings that were in the baseline and are not in this run. Its own endpoint rather than a filter on the findings list, because these have no row in this run - that is what closed means. Each row is a copy of the baseline finding rather than a reference to it, so the list stays readable after the baseline run has been swept. Worst first, then by rule; both filters are optional. Requires an API key with the `findings:read` scope.",
        "tags": [
          "Findings"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "scanRunId",
            "in": "path",
            "required": true,
            "description": "A scan run owned by that organization.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many closed findings to return, 1-200. Defaults to 50.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 50
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "resolved - this run scanned that module on that page and the rule did not fire. unscanned - this run did not look, so nothing can be concluded. Absent means both.",
            "schema": {
              "type": "string",
              "enum": [
                "resolved",
                "unscanned"
              ]
            }
          },
          {
            "name": "module",
            "in": "query",
            "required": false,
            "description": "Only findings closed for this module. Absent means every module.",
            "schema": {
              "type": "string",
              "enum": [
                "discovery",
                "security_baseline",
                "performance",
                "seo",
                "accessibility",
                "consent",
                "visual",
                "geo"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The closed findings.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClosedFindingListResponse"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/scans/{scanRunId}/report-snapshot": {
      "get": {
        "operationId": "readScanRunReportSnapshot",
        "summary": "One finished scan run, frozen for a report",
        "description": "The report.snapshot/1 document this run left behind: scan and site metadata, which modules were observed and which were not (and why), findings by severity and module, the top issues, the comparison with the previous relevant scan exactly as it was stored, the alerts raised, and four fixed statements about what a scan can and cannot observe. Written once, in the transaction that ended the run, and never rewritten - so a report rendered from it later says what it said the day the scan finished. generatedAt is when it was stored, by the database clock; contentSha256 is SHA-256 over its canonical JSON (keys sorted). An own run with no snapshot answers 200 with state pending (still running) or unavailable (finished before snapshots existed, or its snapshot could not be built) - never 404, which would mean the scan does not exist. Requires an API key with the `reports:read` scope.",
        "tags": [
          "Reports"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "scanRunId",
            "in": "path",
            "required": true,
            "description": "A scan run owned by that organization.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The report snapshot.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReportSnapshotEnvelope"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/report-documents": {
      "get": {
        "operationId": "listReportDocuments",
        "summary": "Every PDF report of this organization",
        "description": "Newest request first, across every site and every scan, bounded by limit. One row per scan run that has a report document, in the four states the per-run report-document route answers - derived by the same rule, so a row and the run never disagree. renderedAt, pageCount and sizeBytes are set only while the report is rendered, errorCode only when it failed, and expiresAt (its retention date) is null for a failed one. No artifact id, URL or storage path: the bytes are handed out only by the report/download route of the run, which records every reference it issues. Requires an API key with the `reports:read` scope.",
        "tags": [
          "Reports"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many reports to return, 1-100. Defaults to 20.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 20
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "How many reports to skip. Defaults to 0. An offset past the end of the list is an empty items array with the real total beside it, not a 400.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "domainId",
            "in": "query",
            "required": false,
            "description": "Only the reports about this site. A site id of another organization matches nothing and answers an empty list. Absent means every site of this organization.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "state",
            "in": "query",
            "required": false,
            "description": "Only the reports in this state - the state the per-run report-document route answers, not the stored status: unavailable includes a rendered document past its retention date or whose file retention has removed. Absent means every state.",
            "schema": {
              "type": "string",
              "enum": [
                "pending",
                "rendered",
                "failed",
                "unavailable"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The reports.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReportDocumentListResponse"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/scans/{scanRunId}/report-document": {
      "get": {
        "operationId": "readScanRunReportDocument",
        "summary": "Where a finished scan run’s PDF report stands",
        "description": "The PDF rendered from this run’s report snapshot. It is rendered asynchronously, after the run has finished, by a separate worker - so this answers a state rather than the bytes: pending (the run is still going, or the document is being rendered, including a retry), rendered (artifactId names the stored document; download it through the report/download route), failed (every attempt failed; errorCode says why) or unavailable (no document will appear: the run finished before reports were rendered, its snapshot could not be built, rendering is switched off, or the document is past its retention date or has been removed by retention). A render that fails never changes the scan it describes. requestedAt is the database clock and the instant the document says it was rendered at; expiresAt is its retention date; version names the snapshot format, the renderer build and the browser that printed it. Never 404 for an own run. Requires an API key with the `reports:read` scope.",
        "tags": [
          "Reports"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "scanRunId",
            "in": "path",
            "required": true,
            "description": "A scan run owned by that organization.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Where the rendered report stands.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReportDocumentEnvelope"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/scans/{scanRunId}/report/download": {
      "get": {
        "operationId": "downloadScanRunReport",
        "summary": "A short-lived download reference to a scan run’s PDF report",
        "description": "Answers JSON, never the bytes and never a redirect. kind signed_url is a signed URL the client fetches straight from storage without the API key, with Content-Disposition attachment and fileName signed into it; kind api_proxy is this API’s own content route (downloadArtifact), fetched with the API key. The url is a bearer credential until expiresAt: do not store or share it. fileName is `<host>-report-<YYYY-MM-DD>-<run8>.pdf`; sha256 and sizeBytes let a client verify what it received. The object is checked before the reference is issued. Cache-Control: no-store. Requires an API key with the `reports:read` scope.",
        "tags": [
          "Reports"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "scanRunId",
            "in": "path",
            "required": true,
            "description": "A scan run owned by that organization.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The download reference.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReportDownloadReference"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "The report is not ready (details.state pending: the scan or its render is still going) or could not be generated (details.state failed; the report-document route says why).",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "410": {
            "description": "There is no report to download and there will not be one (details.state unavailable): none was rendered for this scan, it is past its retention date, or its file is no longer in storage.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/artifacts/{artifactId}/content": {
      "get": {
        "operationId": "downloadArtifact",
        "summary": "The bytes of one stored object",
        "description": "Streams the object with its Content-Type, Content-Length, an ETag of its SHA-256 and Content-Disposition: attachment - always an attachment, because an artifact is bytes a scanned site influenced and rendering one inline on this origin would be stored XSS. An artifact past its retention period answers 410 (details.state expired), before the store is asked; one whose object is missing for any other reason answers 404. Requires an API key with the `reports:read` scope.",
        "tags": [
          "Artifacts"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "artifactId",
            "in": "path",
            "required": true,
            "description": "A stored object owned by that organization.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The object.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "410": {
            "description": "The artifact is past its retention period: its object was deleted, or is about to be. details.state is expired and details.expiredAt says when.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/domains/{domainId}/findings": {
      "get": {
        "operationId": "listDomainFindings",
        "summary": "Every finding of one site",
        "description": "Across every scan this site has had, newest first, bounded by limit. Same filters as the run-scoped list; the ordering differs because this one spans months of history while a single run’s findings were all written seconds apart. Each finding carries organizationClassification: for a consent finding that an organization’s own entry judged, the entry as of the scan - which list it was in, how it matched, its name, and when and by whom it was last changed (an API key is not told who) - and null for every other finding. Requires an API key with the `findings:read` scope.",
        "tags": [
          "Findings"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "domainId",
            "in": "path",
            "required": true,
            "description": "A site owned by that organization.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many findings to return, 1-200. Defaults to 50.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "How many findings to skip. Defaults to 0. An offset past the end of the list is an empty items array with the real total beside it, not a 400 - a filter that narrowed the list between two requests is an ordinary thing to happen.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "severity",
            "in": "query",
            "required": false,
            "description": "Only findings of these severities. Repeatable - ?severity=critical&severity=high. Absent means every severity.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "info",
                  "low",
                  "medium",
                  "high",
                  "critical"
                ]
              }
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "Only findings in this workflow state. Absent means every state.",
            "schema": {
              "type": "string",
              "enum": [
                "open",
                "resolved",
                "suppressed"
              ]
            }
          },
          {
            "name": "module",
            "in": "query",
            "required": false,
            "description": "Only findings produced by this module. Absent means every module.",
            "schema": {
              "type": "string",
              "enum": [
                "discovery",
                "security_baseline",
                "performance",
                "seo",
                "accessibility",
                "consent",
                "visual",
                "geo"
              ]
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Only findings seen on this page. The value is canonicalized before it is looked up, so https://example.com and https://example.com/ are the same page; a URL this site has never shown answers an empty list.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ruleId",
            "in": "query",
            "required": false,
            "description": "Only findings this rule produced, e.g. sec.headers.hsts_missing. The same spelling the issues list takes it in. A rule nothing in scope has reported answers an empty list.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128
            }
          },
          {
            "name": "comparisonStatus",
            "in": "query",
            "required": false,
            "description": "Only findings the run-over-run comparison placed in this bucket. resolved here is the comparison’s verdict and not the workflow status filter above - the two are different columns. unscanned and incomparable are the cases where the comparison could not make a statement: absence that was never observed, and a finding the baseline could not have reported. A run with no comparison answers an empty list for every value.",
            "schema": {
              "type": "string",
              "enum": [
                "new",
                "persistent",
                "changed",
                "resolved",
                "unscanned",
                "incomparable"
              ]
            }
          },
          {
            "name": "wcag",
            "in": "query",
            "required": false,
            "description": "Only findings that cite this WCAG 2.2 criterion, e.g. 1.4.3. Repeatable: a finding that cites any of the criteria matches. A check can relate to more than one criterion, and its findings are found by each. A value that is not a WCAG 2.2 criterion number is a 400; a criterion with no findings answers an empty list. With wcagLevel, the level narrows the criteria: a finding matches when it cites a criterion that is one of the numbers and of one of the levels.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "pattern": "^[1-4]\\.\\d\\.\\d{1,2}$"
              }
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "wcagLevel",
            "in": "query",
            "required": false,
            "description": "Only findings that cite a criterion of this level (the level WCAG gives the criterion). Repeatable: any of the levels matches. A value that is not A, AA or AAA is a 400. With wcag, the level narrows the criteria: wcag=1.4.3&wcagLevel=A answers an empty list, because 1.4.3 is level AA.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "A",
                  "AA",
                  "AAA"
                ]
              }
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "pageId",
            "in": "query",
            "required": false,
            "description": "Only findings seen on this page, by its id - what the pages inventory returns. It is the other spelling of url above, for a caller that already holds the identity rather than the address. A filter rather than a scope: a page id this organization does not own matches nothing and answers an empty list. Sending pageId and url together is a 400 - they are two ways of naming one page, and intersecting them would answer an empty list for a mismatched pair that looks exactly like a clean page.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The findings.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FindingListResponse"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/domains/{domainId}/issues": {
      "get": {
        "operationId": "listDomainIssues",
        "summary": "Every issue of one site",
        "description": "A findings list is one row per page a rule fired on, which is the right unit for the database and the wrong one for a person: a template missing a header produces one row per crawled page. An issue is one rule-and-instance position, with affectedPages counted across every run of the site. Issues are computed on read and have no id - ruleId and discriminator are the identity, which is what the pages route addresses them by. For a site-scoped rule (the TLS handshake, HSTS, the plaintext redirect) one finding is stored per run whatever the crawl visited, so read scope rather than affectedPages. comparisonStatus is what the site’s latest completed scan said - not the latest scan this issue appeared in, which could never report a fix: an issue that run closed reads resolved, with resolvedAt set. Every filter below narrows the findings before they are grouped, and the verdict is computed over the same members. Worst severity first, then last seen. Requires an API key with the `findings:read` scope.",
        "tags": [
          "Findings"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "domainId",
            "in": "path",
            "required": true,
            "description": "A site owned by that organization.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many issues to return, 1-200. Defaults to 50.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "How many issues to skip. Defaults to 0.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "severity",
            "in": "query",
            "required": false,
            "description": "Only issues with a finding of these severities. Repeatable. Every filter here applies to the findings before they are grouped, so an issue’s counts - and the comparison verdict, which is computed over the same members - are of its matching findings.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "info",
                  "low",
                  "medium",
                  "high",
                  "critical"
                ]
              }
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "Only findings in this workflow state, before grouping.",
            "schema": {
              "type": "string",
              "enum": [
                "open",
                "resolved",
                "suppressed"
              ]
            }
          },
          {
            "name": "state",
            "in": "query",
            "required": false,
            "description": "Only issues whose own status is this, after the latest scan’s closures are applied and before limit and offset (total counts them). Unlike status, which narrows the findings before grouping, this narrows the issues: ?state=open leaves out an issue the latest scan closed, whose findings are still stored as open. resolved is an issue a scan closed; suppressed is the roll-up of the findings’ own status, with no closure involved. At most 5,000 issues of the site are considered; when the site has more, the response carries stateLimited: true and total and items are a floor. Combined with status, both apply: the findings are narrowed first, then the issues. Absent means every issue.",
            "schema": {
              "type": "string",
              "enum": [
                "open",
                "resolved",
                "suppressed"
              ]
            }
          },
          {
            "name": "module",
            "in": "query",
            "required": false,
            "description": "Only issues produced by this module. Absent means every module.",
            "schema": {
              "type": "string",
              "enum": [
                "discovery",
                "security_baseline",
                "performance",
                "seo",
                "accessibility",
                "consent",
                "visual",
                "geo"
              ]
            }
          },
          {
            "name": "ruleId",
            "in": "query",
            "required": false,
            "description": "Only issues of this rule. Absent means every rule.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128
            }
          },
          {
            "name": "wcag",
            "in": "query",
            "required": false,
            "description": "Only issues that cite this WCAG 2.2 criterion, e.g. 1.4.3. Repeatable: a issue that cites any of the criteria matches. A check can relate to more than one criterion, and its issues are found by each. A value that is not a WCAG 2.2 criterion number is a 400; a criterion with no issues answers an empty list. With wcagLevel, the level narrows the criteria: a issue matches when it cites a criterion that is one of the numbers and of one of the levels. Like severity, it narrows the findings before they are grouped, so an issue’s counts, pages and dates describe only its matching findings.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "pattern": "^[1-4]\\.\\d\\.\\d{1,2}$"
              }
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "wcagLevel",
            "in": "query",
            "required": false,
            "description": "Only issues that cite a criterion of this level (the level WCAG gives the criterion). Repeatable: any of the levels matches. A value that is not A, AA or AAA is a 400. With wcag, the level narrows the criteria: wcag=1.4.3&wcagLevel=A answers an empty list, because 1.4.3 is level AA.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "A",
                  "AA",
                  "AAA"
                ]
              }
            },
            "style": "form",
            "explode": true
          }
        ],
        "responses": {
          "200": {
            "description": "The issues.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssueListResponse"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/domains/{domainId}/issues/{ruleId}/pages": {
      "get": {
        "operationId": "listDomainIssuePages",
        "summary": "The pages behind one issue",
        "description": "Where this rule has fired on this site, newest first, one row per page with the severity, workflow state and comparison verdict it last had there. total counts pages rather than findings; truncated says whether the read bound was reached, in which case total is a floor. Pass ?discriminator= when the issue names an instance - a cookie name, a header name - and pass it back exactly as the issues list gave it; absent means the issue with no named instance, which is most of them. A ruleId this site has never reported answers an empty list rather than a 404: nothing was found there is the true answer. Requires an API key with the `findings:read` scope.",
        "tags": [
          "Findings"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "domainId",
            "in": "path",
            "required": true,
            "description": "A site owned by that organization.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "ruleId",
            "in": "path",
            "required": true,
            "description": "The rule an issue is about, e.g. sec.headers.hsts_missing.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128
            }
          },
          {
            "name": "discriminator",
            "in": "query",
            "required": false,
            "description": "Which instance of the rule, when it names one. Absent means the issue with no named instance - an empty value and an absent one are the same issue here.",
            "schema": {
              "type": "string",
              "maxLength": 256
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many pages to return, 1-200. Defaults to 50.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "How many pages to skip. Defaults to 0.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The pages.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssuePageListResponse"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/domains/{domainId}/consent-inventory": {
      "get": {
        "operationId": "readDomainConsentInventory",
        "summary": "The consent inventory of one site",
        "description": "What the consent scans found on this site in one scan run - how many third parties, cookies and storage keys, how many of them nobody has classified, how many are new or gone since the previous inventory run, and how complete the picture is: the pages observed of the pages planned, what each page’s bounds cut (pageTruncatedRows), what producers dropped as invalid or unsafe (redactedRows) and what the per-run caps cut (truncatedRows) - any of them above zero is a partial inventory. The run is the newest one with an inventory, or the one the scanRunId query parameter names; runs lists up to 20 of the site’s inventory runs, newest first, to pick from. inventory is null when the site has none yet (or the requested run has none), and runs then still lists the older ones. newCounts, goneCounts and samePageSet compare with previousScanRunId and are null together with it when there is no previous inventory run. samePageSet says whether the two runs observed the same pages; after the stored page data of the previous run has expired it is reconstructed from that run’s completed consent tasks and is approximate, so read a false as a caution rather than a claim. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Consent inventory"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "domainId",
            "in": "path",
            "required": true,
            "description": "A site owned by that organization.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "scanRunId",
            "in": "query",
            "required": false,
            "description": "An earlier scan run of this site that has an inventory, from the runs the summary lists. Absent means the newest one. A run that is no inventory run of this site - another site’s, one that did not check consent, one that does not exist - answers as a site with no inventory: inventory is null on the summary and scanRunId is null on a list.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The summary.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConsentInventorySummaryResponse"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid, or a query parameter is not accepted - including a category together with the opposite classified state.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/domains/{domainId}/consent-inventory/trackers": {
      "get": {
        "operationId": "listDomainConsentInventoryTrackers",
        "summary": "The third parties a site contacts",
        "description": "One row per third-party registrable domain. Merged over the pages of one scan run, which scanRunId names: the newest run of the site with an inventory, or the one the scanRunId query parameter picks. A site with no inventory yet, or a scanRunId that is no inventory run of this site, answers 200 with scanRunId null and an empty items array. total counts the rows the filters matched. examplePageIds are page ids, as the pages inventory returns them; an id whose page no longer exists is left out. Rows carry names only - never a cookie or storage value, a URL or a path. requestCount, the resource types, setCookieCount, beaconCount and pixelCount are sums over pages; loadedByTagManager is null when it could not be determined, which is not false. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Consent inventory"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "domainId",
            "in": "path",
            "required": true,
            "description": "A site owned by that organization.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "scanRunId",
            "in": "query",
            "required": false,
            "description": "An earlier scan run of this site that has an inventory, from the runs the summary lists. Absent means the newest one. A run that is no inventory run of this site - another site’s, one that did not check consent, one that does not exist - answers as a site with no inventory: inventory is null on the summary and scanRunId is null on a list.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "scenario",
            "in": "query",
            "required": false,
            "description": "Only rows seen in this scenario: initial (before any choice), reject_all or accept_all.",
            "schema": {
              "type": "string",
              "enum": [
                "initial",
                "reject_all",
                "accept_all"
              ]
            }
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "Only rows of this consent category, or unclassified for the rows nobody has classified. classified=false means the same as category=unclassified; asking for a category and the opposite classified state is a 400 rather than an empty list.",
            "schema": {
              "type": "string",
              "enum": [
                "analytics",
                "advertising",
                "social",
                "personalization",
                "functional",
                "security",
                "infrastructure",
                "consent_management",
                "unclassified"
              ]
            }
          },
          {
            "name": "classified",
            "in": "query",
            "required": false,
            "description": "true keeps the classified rows, false the unclassified ones. See category for how the two relate.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "new",
            "in": "query",
            "required": false,
            "description": "An exact match on newSincePrevious: true keeps the rows that were not in the previous inventory run of the site, false the rows that were. A row with no comparison (newSincePrevious null, because the run has no previous inventory run) matches neither: both answer an empty list with total 0.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "A case-insensitive substring of the row’s name, domain, host or vendor. Never a pattern.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many rows to return, 1-200. Defaults to 50.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "How many rows to skip, 0-100000. Defaults to 0. An offset past the end is an empty items array with the real total beside it, not a 400.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 100000,
              "default": 0
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "The order. Counts are largest first and names A to Z; every order ends on the row’s own key, so a page boundary never repeats or skips a row. Defaults to requests.",
            "schema": {
              "type": "string",
              "enum": [
                "requests",
                "pages",
                "name"
              ],
              "default": "requests"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The third parties.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConsentInventoryTrackerListResponse"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid, or a query parameter is not accepted - including a category together with the opposite classified state.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/domains/{domainId}/consent-inventory/cookies": {
      "get": {
        "operationId": "listDomainConsentInventoryCookies",
        "summary": "The cookies a site sets",
        "description": "One row per cookie name and domain. Merged over the pages of one scan run, which scanRunId names: the newest run of the site with an inventory, or the one the scanRunId query parameter picks. A site with no inventory yet, or a scanRunId that is no inventory run of this site, answers 200 with scanRunId null and an empty items array. total counts the rows the filters matched. examplePageIds are page ids, as the pages inventory returns them; an id whose page no longer exists is left out. Rows carry names only - never a cookie or storage value, a URL or a path. setBy says what set it (http, script, or unknown), lifetime is the bucket of maxLifetimeDays, and a cookie that ends with the visit has maxLifetimeDays null. organizationClassification is the organization’s own entry for the row, as the entries are now: applied (the last scan used it), pending (an entry matches that the last scan did not use, so it applies from the next scan; shown for the newest run only, and only while the feature is on), removed (the last scan used an entry that no longer exists), or null when none applies. An entry names the person who last changed it and when; an API key is told that a member decided but not who. These are the organization’s classifications, written by its administrators, and are never presented as Page Lookout’s. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Consent inventory"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "domainId",
            "in": "path",
            "required": true,
            "description": "A site owned by that organization.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "scanRunId",
            "in": "query",
            "required": false,
            "description": "An earlier scan run of this site that has an inventory, from the runs the summary lists. Absent means the newest one. A run that is no inventory run of this site - another site’s, one that did not check consent, one that does not exist - answers as a site with no inventory: inventory is null on the summary and scanRunId is null on a list.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "scenario",
            "in": "query",
            "required": false,
            "description": "Only rows seen in this scenario: initial (before any choice), reject_all or accept_all.",
            "schema": {
              "type": "string",
              "enum": [
                "initial",
                "reject_all",
                "accept_all"
              ]
            }
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "Only rows of this consent category, or unclassified for the rows nobody has classified. classified=false means the same as category=unclassified; asking for a category and the opposite classified state is a 400 rather than an empty list.",
            "schema": {
              "type": "string",
              "enum": [
                "analytics",
                "advertising",
                "social",
                "personalization",
                "functional",
                "security",
                "infrastructure",
                "consent_management",
                "unclassified"
              ]
            }
          },
          {
            "name": "classified",
            "in": "query",
            "required": false,
            "description": "true keeps the classified rows, false the unclassified ones. See category for how the two relate.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "new",
            "in": "query",
            "required": false,
            "description": "An exact match on newSincePrevious: true keeps the rows that were not in the previous inventory run of the site, false the rows that were. A row with no comparison (newSincePrevious null, because the run has no previous inventory run) matches neither: both answer an empty list with total 0.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "A case-insensitive substring of the row’s name, domain, host or vendor. Never a pattern.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many rows to return, 1-200. Defaults to 50.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "How many rows to skip, 0-100000. Defaults to 0. An offset past the end is an empty items array with the real total beside it, not a 400.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 100000,
              "default": 0
            }
          },
          {
            "name": "party",
            "in": "query",
            "required": false,
            "description": "first keeps the site’s own cookies, third the cookies of other domains.",
            "schema": {
              "type": "string",
              "enum": [
                "first",
                "third"
              ]
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "The order. Counts are largest first and names A to Z; every order ends on the row’s own key, so a page boundary never repeats or skips a row. lifetime puts the longest-lived first and session cookies last. Defaults to pages.",
            "schema": {
              "type": "string",
              "enum": [
                "pages",
                "lifetime",
                "name"
              ],
              "default": "pages"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The cookies.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConsentInventoryCookieListResponse"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid, or a query parameter is not accepted - including a category together with the opposite classified state.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/domains/{domainId}/consent-inventory/storage-keys": {
      "get": {
        "operationId": "listDomainConsentInventoryStorageKeys",
        "summary": "The storage keys a site sets",
        "description": "One row per storage area, origin host and key. Merged over the pages of one scan run, which scanRunId names: the newest run of the site with an inventory, or the one the scanRunId query parameter picks. A site with no inventory yet, or a scanRunId that is no inventory run of this site, answers 200 with scanRunId null and an empty items array. total counts the rows the filters matched. examplePageIds are page ids, as the pages inventory returns them; an id whose page no longer exists is left out. Rows carry names only - never a cookie or storage value, a URL or a path. organizationClassification is the organization’s own entry for the row, as the entries are now: applied (the last scan used it), pending (an entry matches that the last scan did not use, so it applies from the next scan; shown for the newest run only, and only while the feature is on), removed (the last scan used an entry that no longer exists), or null when none applies. An entry names the person who last changed it and when; an API key is told that a member decided but not who. These are the organization’s classifications, written by its administrators, and are never presented as Page Lookout’s. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Consent inventory"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "domainId",
            "in": "path",
            "required": true,
            "description": "A site owned by that organization.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "scanRunId",
            "in": "query",
            "required": false,
            "description": "An earlier scan run of this site that has an inventory, from the runs the summary lists. Absent means the newest one. A run that is no inventory run of this site - another site’s, one that did not check consent, one that does not exist - answers as a site with no inventory: inventory is null on the summary and scanRunId is null on a list.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "scenario",
            "in": "query",
            "required": false,
            "description": "Only rows seen in this scenario: initial (before any choice), reject_all or accept_all.",
            "schema": {
              "type": "string",
              "enum": [
                "initial",
                "reject_all",
                "accept_all"
              ]
            }
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "Only rows of this consent category, or unclassified for the rows nobody has classified. classified=false means the same as category=unclassified; asking for a category and the opposite classified state is a 400 rather than an empty list.",
            "schema": {
              "type": "string",
              "enum": [
                "analytics",
                "advertising",
                "social",
                "personalization",
                "functional",
                "security",
                "infrastructure",
                "consent_management",
                "unclassified"
              ]
            }
          },
          {
            "name": "classified",
            "in": "query",
            "required": false,
            "description": "true keeps the classified rows, false the unclassified ones. See category for how the two relate.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "new",
            "in": "query",
            "required": false,
            "description": "An exact match on newSincePrevious: true keeps the rows that were not in the previous inventory run of the site, false the rows that were. A row with no comparison (newSincePrevious null, because the run has no previous inventory run) matches neither: both answer an empty list with total 0.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "A case-insensitive substring of the row’s name, domain, host or vendor. Never a pattern.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many rows to return, 1-200. Defaults to 50.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "How many rows to skip, 0-100000. Defaults to 0. An offset past the end is an empty items array with the real total beside it, not a 400.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 100000,
              "default": 0
            }
          },
          {
            "name": "area",
            "in": "query",
            "required": false,
            "description": "Only keys of this storage area: local (localStorage) or session (sessionStorage).",
            "schema": {
              "type": "string",
              "enum": [
                "local",
                "session"
              ]
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "The order. Counts are largest first and names A to Z; every order ends on the row’s own key, so a page boundary never repeats or skips a row. Defaults to pages.",
            "schema": {
              "type": "string",
              "enum": [
                "pages",
                "name"
              ],
              "default": "pages"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The storage keys.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConsentInventoryStorageKeyListResponse"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid, or a query parameter is not accepted - including a category together with the opposite classified state.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/domains/{domainId}/consent-inventory/trackers.csv": {
      "get": {
        "operationId": "exportDomainConsentInventoryTrackers",
        "summary": "The third parties a site contacts, as CSV",
        "description": "The same list as a CSV file, with the same filters and sort and no limit or offset (they are ignored): UTF-8 with a byte-order mark, CRLF line ends, a header row of English column names that stays in the same order, booleans as true and false, an empty cell for an unknown, and a text cell that begins with =, +, -, @ or a tab prefixed with an apostrophe so a spreadsheet does not read it as a formula. At most 10000 rows: the X-Rows-Truncated response header is true when the list had more and the file holds the first ones - narrow the filters to get the rest - and false otherwise. The answer is an attachment with a file name, is never cached, and each download is recorded against the organization. An empty list is the header row alone. The list is the one listDomainConsentInventoryTrackers answers. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Consent inventory"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "domainId",
            "in": "path",
            "required": true,
            "description": "A site owned by that organization.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "scanRunId",
            "in": "query",
            "required": false,
            "description": "An earlier scan run of this site that has an inventory, from the runs the summary lists. Absent means the newest one. A run that is no inventory run of this site - another site’s, one that did not check consent, one that does not exist - answers as a site with no inventory: inventory is null on the summary and scanRunId is null on a list.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "scenario",
            "in": "query",
            "required": false,
            "description": "Only rows seen in this scenario: initial (before any choice), reject_all or accept_all.",
            "schema": {
              "type": "string",
              "enum": [
                "initial",
                "reject_all",
                "accept_all"
              ]
            }
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "Only rows of this consent category, or unclassified for the rows nobody has classified. classified=false means the same as category=unclassified; asking for a category and the opposite classified state is a 400 rather than an empty list.",
            "schema": {
              "type": "string",
              "enum": [
                "analytics",
                "advertising",
                "social",
                "personalization",
                "functional",
                "security",
                "infrastructure",
                "consent_management",
                "unclassified"
              ]
            }
          },
          {
            "name": "classified",
            "in": "query",
            "required": false,
            "description": "true keeps the classified rows, false the unclassified ones. See category for how the two relate.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "new",
            "in": "query",
            "required": false,
            "description": "An exact match on newSincePrevious: true keeps the rows that were not in the previous inventory run of the site, false the rows that were. A row with no comparison (newSincePrevious null, because the run has no previous inventory run) matches neither: both answer an empty list with total 0.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "A case-insensitive substring of the row’s name, domain, host or vendor. Never a pattern.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "The order. Counts are largest first and names A to Z; every order ends on the row’s own key, so a page boundary never repeats or skips a row. Defaults to requests.",
            "schema": {
              "type": "string",
              "enum": [
                "requests",
                "pages",
                "name"
              ],
              "default": "requests"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The CSV file.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              },
              "content-disposition": {
                "description": "attachment, with the file name the CSV is saved under.",
                "schema": {
                  "type": "string"
                }
              },
              "x-rows-truncated": {
                "description": "true when the list had more rows than the file may hold and the file carries the first ones; false when it is the whole list.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ]
                }
              }
            },
            "content": {
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid, or a query parameter is not accepted - including a category together with the opposite classified state.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/domains/{domainId}/consent-inventory/cookies.csv": {
      "get": {
        "operationId": "exportDomainConsentInventoryCookies",
        "summary": "The cookies a site sets, as CSV",
        "description": "The same list as a CSV file, with the same filters and sort and no limit or offset (they are ignored): UTF-8 with a byte-order mark, CRLF line ends, a header row of English column names that stays in the same order, booleans as true and false, an empty cell for an unknown, and a text cell that begins with =, +, -, @ or a tab prefixed with an apostrophe so a spreadsheet does not read it as a formula. At most 10000 rows: the X-Rows-Truncated response header is true when the list had more and the file holds the first ones - narrow the filters to get the rest - and false otherwise. The answer is an attachment with a file name, is never cached, and each download is recorded against the organization. An empty list is the header row alone. The file ends with five columns for the organization’s own entry: Organization classification (applied, applies from next scan, removed since this scan, differs by site on the organization file, or empty), Organization category, Organization essential, Organization classified by (a name; empty for an API key, for someone who is no longer a member, or for Page Lookout staff acting for the organization) and Organization classified on (a day). The last four describe the entry as it is now. The list is the one listDomainConsentInventoryCookies answers. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Consent inventory"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "domainId",
            "in": "path",
            "required": true,
            "description": "A site owned by that organization.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "scanRunId",
            "in": "query",
            "required": false,
            "description": "An earlier scan run of this site that has an inventory, from the runs the summary lists. Absent means the newest one. A run that is no inventory run of this site - another site’s, one that did not check consent, one that does not exist - answers as a site with no inventory: inventory is null on the summary and scanRunId is null on a list.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "scenario",
            "in": "query",
            "required": false,
            "description": "Only rows seen in this scenario: initial (before any choice), reject_all or accept_all.",
            "schema": {
              "type": "string",
              "enum": [
                "initial",
                "reject_all",
                "accept_all"
              ]
            }
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "Only rows of this consent category, or unclassified for the rows nobody has classified. classified=false means the same as category=unclassified; asking for a category and the opposite classified state is a 400 rather than an empty list.",
            "schema": {
              "type": "string",
              "enum": [
                "analytics",
                "advertising",
                "social",
                "personalization",
                "functional",
                "security",
                "infrastructure",
                "consent_management",
                "unclassified"
              ]
            }
          },
          {
            "name": "classified",
            "in": "query",
            "required": false,
            "description": "true keeps the classified rows, false the unclassified ones. See category for how the two relate.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "new",
            "in": "query",
            "required": false,
            "description": "An exact match on newSincePrevious: true keeps the rows that were not in the previous inventory run of the site, false the rows that were. A row with no comparison (newSincePrevious null, because the run has no previous inventory run) matches neither: both answer an empty list with total 0.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "A case-insensitive substring of the row’s name, domain, host or vendor. Never a pattern.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128
            }
          },
          {
            "name": "party",
            "in": "query",
            "required": false,
            "description": "first keeps the site’s own cookies, third the cookies of other domains.",
            "schema": {
              "type": "string",
              "enum": [
                "first",
                "third"
              ]
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "The order. Counts are largest first and names A to Z; every order ends on the row’s own key, so a page boundary never repeats or skips a row. lifetime puts the longest-lived first and session cookies last. Defaults to pages.",
            "schema": {
              "type": "string",
              "enum": [
                "pages",
                "lifetime",
                "name"
              ],
              "default": "pages"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The CSV file.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              },
              "content-disposition": {
                "description": "attachment, with the file name the CSV is saved under.",
                "schema": {
                  "type": "string"
                }
              },
              "x-rows-truncated": {
                "description": "true when the list had more rows than the file may hold and the file carries the first ones; false when it is the whole list.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ]
                }
              }
            },
            "content": {
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid, or a query parameter is not accepted - including a category together with the opposite classified state.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/domains/{domainId}/consent-inventory/storage-keys.csv": {
      "get": {
        "operationId": "exportDomainConsentInventoryStorageKeys",
        "summary": "The storage keys a site sets, as CSV",
        "description": "The same list as a CSV file, with the same filters and sort and no limit or offset (they are ignored): UTF-8 with a byte-order mark, CRLF line ends, a header row of English column names that stays in the same order, booleans as true and false, an empty cell for an unknown, and a text cell that begins with =, +, -, @ or a tab prefixed with an apostrophe so a spreadsheet does not read it as a formula. At most 10000 rows: the X-Rows-Truncated response header is true when the list had more and the file holds the first ones - narrow the filters to get the rest - and false otherwise. The answer is an attachment with a file name, is never cached, and each download is recorded against the organization. An empty list is the header row alone. The file ends with five columns for the organization’s own entry: Organization classification (applied, applies from next scan, removed since this scan, differs by site on the organization file, or empty), Organization category, Organization essential, Organization classified by (a name; empty for an API key, for someone who is no longer a member, or for Page Lookout staff acting for the organization) and Organization classified on (a day). The last four describe the entry as it is now. The list is the one listDomainConsentInventoryStorageKeys answers. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Consent inventory"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "domainId",
            "in": "path",
            "required": true,
            "description": "A site owned by that organization.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "scanRunId",
            "in": "query",
            "required": false,
            "description": "An earlier scan run of this site that has an inventory, from the runs the summary lists. Absent means the newest one. A run that is no inventory run of this site - another site’s, one that did not check consent, one that does not exist - answers as a site with no inventory: inventory is null on the summary and scanRunId is null on a list.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "scenario",
            "in": "query",
            "required": false,
            "description": "Only rows seen in this scenario: initial (before any choice), reject_all or accept_all.",
            "schema": {
              "type": "string",
              "enum": [
                "initial",
                "reject_all",
                "accept_all"
              ]
            }
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "Only rows of this consent category, or unclassified for the rows nobody has classified. classified=false means the same as category=unclassified; asking for a category and the opposite classified state is a 400 rather than an empty list.",
            "schema": {
              "type": "string",
              "enum": [
                "analytics",
                "advertising",
                "social",
                "personalization",
                "functional",
                "security",
                "infrastructure",
                "consent_management",
                "unclassified"
              ]
            }
          },
          {
            "name": "classified",
            "in": "query",
            "required": false,
            "description": "true keeps the classified rows, false the unclassified ones. See category for how the two relate.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "new",
            "in": "query",
            "required": false,
            "description": "An exact match on newSincePrevious: true keeps the rows that were not in the previous inventory run of the site, false the rows that were. A row with no comparison (newSincePrevious null, because the run has no previous inventory run) matches neither: both answer an empty list with total 0.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "A case-insensitive substring of the row’s name, domain, host or vendor. Never a pattern.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128
            }
          },
          {
            "name": "area",
            "in": "query",
            "required": false,
            "description": "Only keys of this storage area: local (localStorage) or session (sessionStorage).",
            "schema": {
              "type": "string",
              "enum": [
                "local",
                "session"
              ]
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "The order. Counts are largest first and names A to Z; every order ends on the row’s own key, so a page boundary never repeats or skips a row. Defaults to pages.",
            "schema": {
              "type": "string",
              "enum": [
                "pages",
                "name"
              ],
              "default": "pages"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The CSV file.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              },
              "content-disposition": {
                "description": "attachment, with the file name the CSV is saved under.",
                "schema": {
                  "type": "string"
                }
              },
              "x-rows-truncated": {
                "description": "true when the list had more rows than the file may hold and the file carries the first ones; false when it is the whole list.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ]
                }
              }
            },
            "content": {
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid, or a query parameter is not accepted - including a category together with the opposite classified state.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/consent-inventory/trackers": {
      "get": {
        "operationId": "listOrganizationConsentInventoryTrackers",
        "summary": "The third parties across the organization’s sites",
        "description": "One row per third-party registrable domain. Merged over the latest inventory run of each site the caller may see - a member limited by access groups is answered from their sites alone, and no other site appears in a row, an example, a count or the coverage. siteId and tagId narrow the sites before the merge. sitesCount is on how many sites the row was seen, newOnSitesCount on how many it is new since that site’s previous inventory run (a site with no previous run counts for nothing), requestCount and pagesCount are sums over sites, seen is true for a scenario when any site saw it, and exampleSites names up to five sites in hostname order. classification is the best answer any site gave. sitesCovered is the number of those sites that have an inventory and sitesWithoutInventory the number that do not, so a list that merged three of ten sites says so. sitesWithoutInventoryIds names the first 200 of those sites (hostname order; the count stays the whole truth) and scenarioSitesObserved says, per scenario, on how many of the covered sites the latest inventory run saw at least one page in it - zero means the scenario was not checked, not that nothing showed up. total counts the rows the filters matched. Rows carry names only - never a cookie or storage value, a URL or a path. Sorted by sites, requests, pages or name; defaults to the most widespread first. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Consent inventory"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "scenario",
            "in": "query",
            "required": false,
            "description": "Only rows seen in this scenario: initial (before any choice), reject_all or accept_all.",
            "schema": {
              "type": "string",
              "enum": [
                "initial",
                "reject_all",
                "accept_all"
              ]
            }
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "Only rows of this consent category, or unclassified for the rows nobody has classified. A row is classified when any site classified it, and a category keeps a row when any site gave it that category; the row shows the best answer (an operator table before the built-in one, then the newest version). classified=false means the same as category=unclassified; asking for a category and the opposite classified state is a 400.",
            "schema": {
              "type": "string",
              "enum": [
                "analytics",
                "advertising",
                "social",
                "personalization",
                "functional",
                "security",
                "infrastructure",
                "consent_management",
                "unclassified"
              ]
            }
          },
          {
            "name": "classified",
            "in": "query",
            "required": false,
            "description": "true keeps the classified rows, false the unclassified ones. See category for how the two relate.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "new",
            "in": "query",
            "required": false,
            "description": "true keeps the rows that are new since the previous inventory run on at least one site (newOnSitesCount above 0). false keeps the rows that are new on none and were compared on at least one site; a row seen only on sites that have no previous run has nothing to compare with and matches neither value.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "A case-insensitive substring of the row’s name, domain or vendor. Never a pattern.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128
            }
          },
          {
            "name": "siteId",
            "in": "query",
            "required": false,
            "description": "Only these sites. Repeatable - ?siteId=a&siteId=b, at most 100. Absent means every site the caller may see. A site id that is not one of those matches nothing rather than failing, so the filter cannot be used to learn which ids exist.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "tagId",
            "in": "query",
            "required": false,
            "description": "Only sites that carry this tag. Combined with siteId it is the sites in both. A tag that is not one of this organization’s matches no site.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many rows to return, 1-200. Defaults to 50.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "How many rows to skip, 0-100000. Defaults to 0. An offset past the end is an empty items array with the real total beside it, not a 400.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 100000,
              "default": 0
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "The order. Counts are largest first and names A to Z; every order ends on the row’s own key, so a page boundary never repeats or skips a row. sites orders by the number of sites. Defaults to sites.",
            "schema": {
              "type": "string",
              "enum": [
                "sites",
                "requests",
                "pages",
                "name"
              ],
              "default": "sites"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The third parties.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConsentInventoryOrganizationTrackerListResponse"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid, or a query parameter is not accepted - including a category together with the opposite classified state.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/consent-inventory/cookies": {
      "get": {
        "operationId": "listOrganizationConsentInventoryCookies",
        "summary": "The cookies across the organization’s sites",
        "description": "One row per cookie name, domain and first-party flag. Merged over the latest inventory run of each site the caller may see - a member limited by access groups is answered from their sites alone, and no other site appears in a row, an example, a count or the coverage. siteId and tagId narrow the sites before the merge. sitesCount is on how many sites the row was seen, newOnSitesCount on how many it is new since that site’s previous inventory run (a site with no previous run counts for nothing), requestCount and pagesCount are sums over sites, seen is true for a scenario when any site saw it, and exampleSites names up to five sites in hostname order. classification is the best answer any site gave. sitesCovered is the number of those sites that have an inventory and sitesWithoutInventory the number that do not, so a list that merged three of ten sites says so. sitesWithoutInventoryIds names the first 200 of those sites (hostname order; the count stays the whole truth) and scenarioSitesObserved says, per scenario, on how many of the covered sites the latest inventory run saw at least one page in it - zero means the scenario was not checked, not that nothing showed up. total counts the rows the filters matched. Rows carry names only - never a cookie or storage value, a URL or a path. A cookie that is a site’s own on one site and another party’s on a second is two rows. setBy is the strongest any site saw (http, then script, then unknown) and maxLifetimeDays the longest, with lifetime its bucket; a cookie that ends with the visit everywhere has maxLifetimeDays null. organizationClassification is the organization’s own entry for the row, as the entries are now: applied (the last scan used it), pending (an entry matches that the last scan did not use, so it applies from the next scan; shown for the newest run only, and only while the feature is on), removed (the last scan used an entry that no longer exists), or null when none applies. An entry names the person who last changed it and when; an API key is told that a member decided but not who. These are the organization’s classifications, written by its administrators, and are never presented as Page Lookout’s. Here the field is worked out for each site the row appears on and is the shared answer when they agree; when they do not it is differs_by_site, with the number of sites, and names no entry. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Consent inventory"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "scenario",
            "in": "query",
            "required": false,
            "description": "Only rows seen in this scenario: initial (before any choice), reject_all or accept_all.",
            "schema": {
              "type": "string",
              "enum": [
                "initial",
                "reject_all",
                "accept_all"
              ]
            }
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "Only rows of this consent category, or unclassified for the rows nobody has classified. A row is classified when any site classified it, and a category keeps a row when any site gave it that category; the row shows the best answer (an operator table before the built-in one, then the newest version). classified=false means the same as category=unclassified; asking for a category and the opposite classified state is a 400.",
            "schema": {
              "type": "string",
              "enum": [
                "analytics",
                "advertising",
                "social",
                "personalization",
                "functional",
                "security",
                "infrastructure",
                "consent_management",
                "unclassified"
              ]
            }
          },
          {
            "name": "classified",
            "in": "query",
            "required": false,
            "description": "true keeps the classified rows, false the unclassified ones. See category for how the two relate.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "new",
            "in": "query",
            "required": false,
            "description": "true keeps the rows that are new since the previous inventory run on at least one site (newOnSitesCount above 0). false keeps the rows that are new on none and were compared on at least one site; a row seen only on sites that have no previous run has nothing to compare with and matches neither value.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "A case-insensitive substring of the row’s name, domain or vendor. Never a pattern.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128
            }
          },
          {
            "name": "siteId",
            "in": "query",
            "required": false,
            "description": "Only these sites. Repeatable - ?siteId=a&siteId=b, at most 100. Absent means every site the caller may see. A site id that is not one of those matches nothing rather than failing, so the filter cannot be used to learn which ids exist.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "tagId",
            "in": "query",
            "required": false,
            "description": "Only sites that carry this tag. Combined with siteId it is the sites in both. A tag that is not one of this organization’s matches no site.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many rows to return, 1-200. Defaults to 50.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "How many rows to skip, 0-100000. Defaults to 0. An offset past the end is an empty items array with the real total beside it, not a 400.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 100000,
              "default": 0
            }
          },
          {
            "name": "party",
            "in": "query",
            "required": false,
            "description": "first keeps the site’s own cookies, third the cookies of other domains.",
            "schema": {
              "type": "string",
              "enum": [
                "first",
                "third"
              ]
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "The order. Counts are largest first and names A to Z; every order ends on the row’s own key, so a page boundary never repeats or skips a row. sites orders by the number of sites; lifetime puts the longest-lived first and session cookies last. Defaults to sites.",
            "schema": {
              "type": "string",
              "enum": [
                "sites",
                "pages",
                "lifetime",
                "name"
              ],
              "default": "sites"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The cookies.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConsentInventoryOrganizationCookieListResponse"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid, or a query parameter is not accepted - including a category together with the opposite classified state.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/consent-inventory/trackers.csv": {
      "get": {
        "operationId": "exportOrganizationConsentInventoryTrackers",
        "summary": "The third parties across the organization’s sites, as CSV",
        "description": "The same list as a CSV file, with the same filters and sort and no limit or offset (they are ignored): UTF-8 with a byte-order mark, CRLF line ends, a header row of English column names that stays in the same order, booleans as true and false, an empty cell for an unknown, and a text cell that begins with =, +, -, @ or a tab prefixed with an apostrophe so a spreadsheet does not read it as a formula. At most 10000 rows: the X-Rows-Truncated response header is true when the list had more and the file holds the first ones - narrow the filters to get the rest - and false otherwise. The answer is an attachment with a file name, is never cached, and each download is recorded against the organization. An empty list is the header row alone. The list is the one listOrganizationConsentInventoryTrackers answers, from the sites the caller may see. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Consent inventory"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "scenario",
            "in": "query",
            "required": false,
            "description": "Only rows seen in this scenario: initial (before any choice), reject_all or accept_all.",
            "schema": {
              "type": "string",
              "enum": [
                "initial",
                "reject_all",
                "accept_all"
              ]
            }
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "Only rows of this consent category, or unclassified for the rows nobody has classified. A row is classified when any site classified it, and a category keeps a row when any site gave it that category; the row shows the best answer (an operator table before the built-in one, then the newest version). classified=false means the same as category=unclassified; asking for a category and the opposite classified state is a 400.",
            "schema": {
              "type": "string",
              "enum": [
                "analytics",
                "advertising",
                "social",
                "personalization",
                "functional",
                "security",
                "infrastructure",
                "consent_management",
                "unclassified"
              ]
            }
          },
          {
            "name": "classified",
            "in": "query",
            "required": false,
            "description": "true keeps the classified rows, false the unclassified ones. See category for how the two relate.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "new",
            "in": "query",
            "required": false,
            "description": "true keeps the rows that are new since the previous inventory run on at least one site (newOnSitesCount above 0). false keeps the rows that are new on none and were compared on at least one site; a row seen only on sites that have no previous run has nothing to compare with and matches neither value.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "A case-insensitive substring of the row’s name, domain or vendor. Never a pattern.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128
            }
          },
          {
            "name": "siteId",
            "in": "query",
            "required": false,
            "description": "Only these sites. Repeatable - ?siteId=a&siteId=b, at most 100. Absent means every site the caller may see. A site id that is not one of those matches nothing rather than failing, so the filter cannot be used to learn which ids exist.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "tagId",
            "in": "query",
            "required": false,
            "description": "Only sites that carry this tag. Combined with siteId it is the sites in both. A tag that is not one of this organization’s matches no site.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "The order. Counts are largest first and names A to Z; every order ends on the row’s own key, so a page boundary never repeats or skips a row. sites orders by the number of sites. Defaults to sites.",
            "schema": {
              "type": "string",
              "enum": [
                "sites",
                "requests",
                "pages",
                "name"
              ],
              "default": "sites"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The CSV file.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              },
              "content-disposition": {
                "description": "attachment, with the file name the CSV is saved under.",
                "schema": {
                  "type": "string"
                }
              },
              "x-rows-truncated": {
                "description": "true when the list had more rows than the file may hold and the file carries the first ones; false when it is the whole list.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ]
                }
              }
            },
            "content": {
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid, or a query parameter is not accepted - including a category together with the opposite classified state.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/consent-inventory/cookies.csv": {
      "get": {
        "operationId": "exportOrganizationConsentInventoryCookies",
        "summary": "The cookies across the organization’s sites, as CSV",
        "description": "The same list as a CSV file, with the same filters and sort and no limit or offset (they are ignored): UTF-8 with a byte-order mark, CRLF line ends, a header row of English column names that stays in the same order, booleans as true and false, an empty cell for an unknown, and a text cell that begins with =, +, -, @ or a tab prefixed with an apostrophe so a spreadsheet does not read it as a formula. At most 10000 rows: the X-Rows-Truncated response header is true when the list had more and the file holds the first ones - narrow the filters to get the rest - and false otherwise. The answer is an attachment with a file name, is never cached, and each download is recorded against the organization. An empty list is the header row alone. The file ends with five columns for the organization’s own entry: Organization classification (applied, applies from next scan, removed since this scan, differs by site on the organization file, or empty), Organization category, Organization essential, Organization classified by (a name; empty for an API key, for someone who is no longer a member, or for Page Lookout staff acting for the organization) and Organization classified on (a day). The last four describe the entry as it is now. The list is the one listOrganizationConsentInventoryCookies answers, from the sites the caller may see. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Consent inventory"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "scenario",
            "in": "query",
            "required": false,
            "description": "Only rows seen in this scenario: initial (before any choice), reject_all or accept_all.",
            "schema": {
              "type": "string",
              "enum": [
                "initial",
                "reject_all",
                "accept_all"
              ]
            }
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "Only rows of this consent category, or unclassified for the rows nobody has classified. A row is classified when any site classified it, and a category keeps a row when any site gave it that category; the row shows the best answer (an operator table before the built-in one, then the newest version). classified=false means the same as category=unclassified; asking for a category and the opposite classified state is a 400.",
            "schema": {
              "type": "string",
              "enum": [
                "analytics",
                "advertising",
                "social",
                "personalization",
                "functional",
                "security",
                "infrastructure",
                "consent_management",
                "unclassified"
              ]
            }
          },
          {
            "name": "classified",
            "in": "query",
            "required": false,
            "description": "true keeps the classified rows, false the unclassified ones. See category for how the two relate.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "new",
            "in": "query",
            "required": false,
            "description": "true keeps the rows that are new since the previous inventory run on at least one site (newOnSitesCount above 0). false keeps the rows that are new on none and were compared on at least one site; a row seen only on sites that have no previous run has nothing to compare with and matches neither value.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "A case-insensitive substring of the row’s name, domain or vendor. Never a pattern.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128
            }
          },
          {
            "name": "siteId",
            "in": "query",
            "required": false,
            "description": "Only these sites. Repeatable - ?siteId=a&siteId=b, at most 100. Absent means every site the caller may see. A site id that is not one of those matches nothing rather than failing, so the filter cannot be used to learn which ids exist.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "tagId",
            "in": "query",
            "required": false,
            "description": "Only sites that carry this tag. Combined with siteId it is the sites in both. A tag that is not one of this organization’s matches no site.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "party",
            "in": "query",
            "required": false,
            "description": "first keeps the site’s own cookies, third the cookies of other domains.",
            "schema": {
              "type": "string",
              "enum": [
                "first",
                "third"
              ]
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "The order. Counts are largest first and names A to Z; every order ends on the row’s own key, so a page boundary never repeats or skips a row. sites orders by the number of sites; lifetime puts the longest-lived first and session cookies last. Defaults to sites.",
            "schema": {
              "type": "string",
              "enum": [
                "sites",
                "pages",
                "lifetime",
                "name"
              ],
              "default": "sites"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The CSV file.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              },
              "content-disposition": {
                "description": "attachment, with the file name the CSV is saved under.",
                "schema": {
                  "type": "string"
                }
              },
              "x-rows-truncated": {
                "description": "true when the list had more rows than the file may hold and the file carries the first ones; false when it is the whole list.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ]
                }
              }
            },
            "content": {
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid, or a query parameter is not accepted - including a category together with the opposite classified state.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/consent-inventory/trackers/sites": {
      "get": {
        "operationId": "listOrganizationConsentInventoryTrackerSites",
        "summary": "The sites a third party was seen on",
        "description": "Every site behind one row of listOrganizationConsentInventoryTrackers, in keyset pages. The row is named by its own fields, as the list item spells them, and matched exactly: no pattern, prefix or placeholder expansion (a cookie called _ga_{id} is that string). Send every value URL-encoded; the identity is a query parameter and not a path segment because a cookie may be called . or .. The sites whose latest inventory run has the row, in hostname order and then site id, with the row as each of those sites has it. total is the number of such sites and equals the row’s sitesCount on the organization list under the same siteId and tagId, which are the only list filters these routes take (the others are ignored). A row that matches nothing - it went away when a scan finished, or never was - is an empty list, not a 404, and a site the caller may not see is never in it. The response does not repeat the row’s identity. Each item carries scanRunId and lastSeenAt (when that site’s latest inventory finished), seen per scenario, scenarioChecked per scenario (false: the latest run did not look at any page in it, which is not the same as the row not showing up there), pagesCount, newSincePrevious (null when the site has no previous run) and that site’s own classification. Follow nextCursor as cursor until it is null; a page never repeats or skips a site, even when a site is scanned between two requests. For a third party each item also carries requestCount, owner (only while that site’s classification is null) and, while the organization’s approved list is on, approval and approvalSource: that site’s own answer, as its Inventory tab gives it, and null while the list is off. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Consent inventory"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "registrableDomain",
            "in": "query",
            "required": true,
            "description": "The third party’s registrable domain, as the list returns it.",
            "schema": {
              "type": "string",
              "maxLength": 253,
              "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$"
            }
          },
          {
            "name": "siteId",
            "in": "query",
            "required": false,
            "description": "Only these sites. Repeatable - ?siteId=a&siteId=b, at most 100. Absent means every site the caller may see. A site id that is not one of those matches nothing rather than failing, so the filter cannot be used to learn which ids exist.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "tagId",
            "in": "query",
            "required": false,
            "description": "Only sites that carry this tag. Combined with siteId it is the sites in both. A tag that is not one of this organization’s matches no site.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many sites to return, 1-200. Defaults to 50.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 50
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "The previous response’s nextCursor, to read the sites after the last one it returned. Opaque: pass it back unchanged. A cursor this endpoint did not hand out is a 400.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 1024
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A page of the sites.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConsentInventoryOrganizationTrackerSiteListResponse"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid, a required query parameter is missing or not in the grammar of the list’s field, or the cursor is not one this endpoint handed out.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/consent-inventory/trackers/sites.csv": {
      "get": {
        "operationId": "exportOrganizationConsentInventoryTrackerSites",
        "summary": "The sites a third party was seen on, as CSV",
        "description": "The list listOrganizationConsentInventoryTrackerSites answers, as a file: the same identity and the siteId and tagId filters, no limit or cursor. The row is named by its own fields, as the list item spells them, and matched exactly: no pattern, prefix or placeholder expansion (a cookie called _ga_{id} is that string). Send every value URL-encoded; the identity is a query parameter and not a path segment because a cookie may be called . or .. Each line repeats the third party’s domain, so files can be concatenated. A limit or cursor, if sent, is ignored. The file is UTF-8 with a byte-order mark, CRLF line ends, a header row of English column names that stays in the same order, booleans as true and false, an empty cell for an unknown, and a text cell that begins with =, +, -, @ or a tab prefixed with an apostrophe so a spreadsheet does not read it as a formula. At most 10000 rows: the X-Rows-Truncated response header is true when the list had more and the file holds the first ones - narrow the filters to get the rest - and false otherwise. The answer is an attachment with a file name, is never cached, and each download is recorded against the organization. An empty list is the header row alone. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Consent inventory"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "registrableDomain",
            "in": "query",
            "required": true,
            "description": "The third party’s registrable domain, as the list returns it.",
            "schema": {
              "type": "string",
              "maxLength": 253,
              "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$"
            }
          },
          {
            "name": "siteId",
            "in": "query",
            "required": false,
            "description": "Only these sites. Repeatable - ?siteId=a&siteId=b, at most 100. Absent means every site the caller may see. A site id that is not one of those matches nothing rather than failing, so the filter cannot be used to learn which ids exist.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "tagId",
            "in": "query",
            "required": false,
            "description": "Only sites that carry this tag. Combined with siteId it is the sites in both. A tag that is not one of this organization’s matches no site.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The CSV file.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              },
              "content-disposition": {
                "description": "attachment, with the file name the CSV is saved under.",
                "schema": {
                  "type": "string"
                }
              },
              "x-rows-truncated": {
                "description": "true when the list had more rows than the file may hold and the file carries the first ones; false when it is the whole list.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ]
                }
              }
            },
            "content": {
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid, a required query parameter is missing or not in the grammar of the list’s field, or the cursor is not one this endpoint handed out.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/consent-inventory/cookies/sites": {
      "get": {
        "operationId": "listOrganizationConsentInventoryCookieSites",
        "summary": "The sites a cookie was seen on",
        "description": "Every site behind one row of listOrganizationConsentInventoryCookies, in keyset pages. The row is named by its own fields, as the list item spells them, and matched exactly: no pattern, prefix or placeholder expansion (a cookie called _ga_{id} is that string). Send every value URL-encoded; the identity is a query parameter and not a path segment because a cookie may be called . or .. The sites whose latest inventory run has the row, in hostname order and then site id, with the row as each of those sites has it. total is the number of such sites and equals the row’s sitesCount on the organization list under the same siteId and tagId, which are the only list filters these routes take (the others are ignored). A row that matches nothing - it went away when a scan finished, or never was - is an empty list, not a 404, and a site the caller may not see is never in it. The response does not repeat the row’s identity. Each item carries scanRunId and lastSeenAt (when that site’s latest inventory finished), seen per scenario, scenarioChecked per scenario (false: the latest run did not look at any page in it, which is not the same as the row not showing up there), pagesCount, newSincePrevious (null when the site has no previous run) and that site’s own classification. Follow nextCursor as cursor until it is null; a page never repeats or skips a site, even when a site is scanned between two requests. For a cookie each item also carries setBy, lifetime and maxLifetimeDays as that site saw them. organizationClassification is the organization’s own entry for the row, as the entries are now: applied (the last scan used it), pending (an entry matches that the last scan did not use, so it applies from the next scan; shown for the newest run only, and only while the feature is on), removed (the last scan used an entry that no longer exists), or null when none applies. An entry names the person who last changed it and when; an API key is told that a member decided but not who. These are the organization’s classifications, written by its administrators, and are never presented as Page Lookout’s. Here the field is that site’s own answer and is never differs_by_site. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Consent inventory"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "name",
            "in": "query",
            "required": true,
            "description": "The cookie’s name, as the list returns it (at most 256 characters).",
            "schema": {
              "type": "string",
              "maxLength": 256,
              "pattern": "^[\\x21\\x24\\x26\\x28-\\x2b\\x2d\\x2e\\x30-\\x3a\\x41-\\x5b\\x5d-\\x7e]+$",
              "minLength": 1
            }
          },
          {
            "name": "domain",
            "in": "query",
            "required": true,
            "description": "The cookie’s domain, as the list returns it (lowercase, maybe a leading dot).",
            "schema": {
              "type": "string",
              "maxLength": 253,
              "pattern": "^\\.?[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
            }
          },
          {
            "name": "registrableDomain",
            "in": "query",
            "required": true,
            "description": "The cookie’s registrable domain, as the list returns it. The merge groups by it, so two rows that differ only here stay two rows.",
            "schema": {
              "type": "string",
              "maxLength": 253,
              "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$"
            }
          },
          {
            "name": "firstParty",
            "in": "query",
            "required": true,
            "description": "true for the row where the cookie is the site’s own, false where it is another party’s. A cookie that is both on different sites is two rows.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "siteId",
            "in": "query",
            "required": false,
            "description": "Only these sites. Repeatable - ?siteId=a&siteId=b, at most 100. Absent means every site the caller may see. A site id that is not one of those matches nothing rather than failing, so the filter cannot be used to learn which ids exist.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "tagId",
            "in": "query",
            "required": false,
            "description": "Only sites that carry this tag. Combined with siteId it is the sites in both. A tag that is not one of this organization’s matches no site.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many sites to return, 1-200. Defaults to 50.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 50
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "The previous response’s nextCursor, to read the sites after the last one it returned. Opaque: pass it back unchanged. A cursor this endpoint did not hand out is a 400.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 1024
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A page of the sites.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConsentInventoryOrganizationCookieSiteListResponse"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid, a required query parameter is missing or not in the grammar of the list’s field, or the cursor is not one this endpoint handed out.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/consent-inventory/cookies/sites.csv": {
      "get": {
        "operationId": "exportOrganizationConsentInventoryCookieSites",
        "summary": "The sites a cookie was seen on, as CSV",
        "description": "The list listOrganizationConsentInventoryCookieSites answers, as a file: the same identity and the siteId and tagId filters, no limit or cursor. The row is named by its own fields, as the list item spells them, and matched exactly: no pattern, prefix or placeholder expansion (a cookie called _ga_{id} is that string). Send every value URL-encoded; the identity is a query parameter and not a path segment because a cookie may be called . or .. Each line repeats the cookie’s name, domain, registrable domain and first-party flag, so files can be concatenated. A limit or cursor, if sent, is ignored. The file is UTF-8 with a byte-order mark, CRLF line ends, a header row of English column names that stays in the same order, booleans as true and false, an empty cell for an unknown, and a text cell that begins with =, +, -, @ or a tab prefixed with an apostrophe so a spreadsheet does not read it as a formula. At most 10000 rows: the X-Rows-Truncated response header is true when the list had more and the file holds the first ones - narrow the filters to get the rest - and false otherwise. The answer is an attachment with a file name, is never cached, and each download is recorded against the organization. An empty list is the header row alone. The file ends with five columns for the organization’s own entry: Organization classification (applied, applies from next scan, removed since this scan, differs by site on the organization file, or empty), Organization category, Organization essential, Organization classified by (a name; empty for an API key, for someone who is no longer a member, or for Page Lookout staff acting for the organization) and Organization classified on (a day). The last four describe the entry as it is now. Each line is one site, so Organization classification is never differs by site. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Consent inventory"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "name",
            "in": "query",
            "required": true,
            "description": "The cookie’s name, as the list returns it (at most 256 characters).",
            "schema": {
              "type": "string",
              "maxLength": 256,
              "pattern": "^[\\x21\\x24\\x26\\x28-\\x2b\\x2d\\x2e\\x30-\\x3a\\x41-\\x5b\\x5d-\\x7e]+$",
              "minLength": 1
            }
          },
          {
            "name": "domain",
            "in": "query",
            "required": true,
            "description": "The cookie’s domain, as the list returns it (lowercase, maybe a leading dot).",
            "schema": {
              "type": "string",
              "maxLength": 253,
              "pattern": "^\\.?[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
            }
          },
          {
            "name": "registrableDomain",
            "in": "query",
            "required": true,
            "description": "The cookie’s registrable domain, as the list returns it. The merge groups by it, so two rows that differ only here stay two rows.",
            "schema": {
              "type": "string",
              "maxLength": 253,
              "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$"
            }
          },
          {
            "name": "firstParty",
            "in": "query",
            "required": true,
            "description": "true for the row where the cookie is the site’s own, false where it is another party’s. A cookie that is both on different sites is two rows.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "siteId",
            "in": "query",
            "required": false,
            "description": "Only these sites. Repeatable - ?siteId=a&siteId=b, at most 100. Absent means every site the caller may see. A site id that is not one of those matches nothing rather than failing, so the filter cannot be used to learn which ids exist.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "tagId",
            "in": "query",
            "required": false,
            "description": "Only sites that carry this tag. Combined with siteId it is the sites in both. A tag that is not one of this organization’s matches no site.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The CSV file.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              },
              "content-disposition": {
                "description": "attachment, with the file name the CSV is saved under.",
                "schema": {
                  "type": "string"
                }
              },
              "x-rows-truncated": {
                "description": "true when the list had more rows than the file may hold and the file carries the first ones; false when it is the whole list.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ]
                }
              }
            },
            "content": {
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid, a required query parameter is missing or not in the grammar of the list’s field, or the cursor is not one this endpoint handed out.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/scans/{scanRunId}/consent-signals": {
      "get": {
        "operationId": "listScanRunConsentSignals",
        "summary": "What a scan’s pages declared about consent",
        "description": "What the pages of one scan run declared about the visitor’s consent choice, per scenario (before a choice, after Reject all, after Accept all): the IAB TCF consent string the page’s consent tool returned, decoded - the consent tool’s id, whether it applies to the visitor, the purposes and special features consented to, the vendor counts - and what the page’s Google tags sent as Google Consent Mode states. Decoded fields only: the consent string itself and the URLs and details of the Google requests are never stored or returned. A run of another organization or of a site the caller may not see, and a run that does not exist, all answer 404 - the same answer, so the endpoint cannot be used to find out which ids exist. A run of the caller’s own that was scanned without the consent signals answers 200 with no rows and a null summary. Rows are pages, in the order of their path and then their id, with the page’s id and address and its three scenarios; a scenario that was not run says why, and may still carry the string the page left behind. The summary counts pages of the whole run, not of the page of rows returned: pages read, pages with a decoded TCF string, pages whose string consents to a purpose from 2 to 11 or a special feature before a choice and after Reject all, pages whose Google tags made a request, and pages whose Google tags sent a Consent Mode type as granted before a choice and after Reject all. These are facts about what the page declared, and not a verdict. Page through the rows with limit and cursor: nextCursor is null on the last page. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Consent inventory"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "scanRunId",
            "in": "path",
            "required": true,
            "description": "A scan run owned by that organization.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many pages to return, 1-100. Defaults to 25.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "The previous response’s nextCursor, to read the pages after the last one it returned. Opaque: pass it back unchanged. A cursor this endpoint did not hand out for this run is a 400.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 256
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A page of the run’s consent signals, and the run’s summary.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConsentSignalsResponse"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid, a query parameter is not accepted, or the cursor is not one this endpoint handed out for this run.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/scans/{scanRunId}/consent-signals.csv": {
      "get": {
        "operationId": "exportScanRunConsentSignals",
        "summary": "What a scan’s pages declared about consent, as CSV",
        "description": "What the pages of one scan run declared about the visitor’s consent choice, per scenario (before a choice, after Reject all, after Accept all): the IAB TCF consent string the page’s consent tool returned, decoded - the consent tool’s id, whether it applies to the visitor, the purposes and special features consented to, the vendor counts - and what the page’s Google tags sent as Google Consent Mode states. Decoded fields only: the consent string itself and the URLs and details of the Google requests are never stored or returned. A run of another organization or of a site the caller may not see, and a run that does not exist, all answer 404 - the same answer, so the endpoint cannot be used to find out which ids exist. A run of the caller’s own that was scanned without the consent signals answers 200 with no rows and a null summary. The same rows as a CSV file, one line per page and scenario, with no limit or cursor: UTF-8 with a byte-order mark, CRLF line ends, a header row of English column names that stays in the same order, booleans as true and false, an empty cell for an unknown, and a text cell that begins with =, +, -, @ or a tab prefixed with an apostrophe so a spreadsheet does not read it as a formula. The String column says what the page’s TCF interface returned (read, not readable, too long, no string, no answer, no TCF interface, or scenario not run), and the Consent Mode columns what the Google requests sent for each type (granted, denied, mixed, not set or unknown). At most 10000 rows: the X-Rows-Truncated response header is true when the run had more and the file holds the first ones, and false otherwise. The answer is an attachment with a file name and is never cached. A run with nothing to show is the header row alone; a download of at least one row is recorded against the organization. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Consent inventory"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "scanRunId",
            "in": "path",
            "required": true,
            "description": "A scan run owned by that organization.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The CSV file.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              },
              "content-disposition": {
                "description": "attachment, with the file name the CSV is saved under.",
                "schema": {
                  "type": "string"
                }
              },
              "x-rows-truncated": {
                "description": "true when the list had more rows than the file may hold and the file carries the first ones; false when it is the whole list.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ]
                }
              }
            },
            "content": {
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/findings": {
      "get": {
        "operationId": "listOrganizationFindings",
        "summary": "Every finding of this organization",
        "description": "Across every site and every scan, newest first, bounded by limit. The same filters as the site-scoped list, plus domainId - which is a filter rather than a scope, so a site id of another organization answers an empty list rather than a 404 that would confirm the id names something - latestRun, which narrows it to the newest run of each site so the dashboard summary and this list count the same rows, and compared, which narrows it to runs whose comparison was computed. Each finding carries organizationClassification: for a consent finding that an organization’s own entry judged, the entry as of the scan - which list it was in, how it matched, its name, and when and by whom it was last changed (an API key is not told who) - and null for every other finding. Requires an API key with the `findings:read` scope.",
        "tags": [
          "Findings"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many findings to return, 1-200. Defaults to 50.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "How many findings to skip. Defaults to 0. An offset past the end of the list is an empty items array with the real total beside it, not a 400 - a filter that narrowed the list between two requests is an ordinary thing to happen.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "severity",
            "in": "query",
            "required": false,
            "description": "Only findings of these severities. Repeatable - ?severity=critical&severity=high. Absent means every severity.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "info",
                  "low",
                  "medium",
                  "high",
                  "critical"
                ]
              }
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "Only findings in this workflow state. Absent means every state.",
            "schema": {
              "type": "string",
              "enum": [
                "open",
                "resolved",
                "suppressed"
              ]
            }
          },
          {
            "name": "module",
            "in": "query",
            "required": false,
            "description": "Only findings produced by this module. Absent means every module.",
            "schema": {
              "type": "string",
              "enum": [
                "discovery",
                "security_baseline",
                "performance",
                "seo",
                "accessibility",
                "consent",
                "visual",
                "geo"
              ]
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "Only findings seen on this page. The value is canonicalized before it is looked up, so https://example.com and https://example.com/ are the same page; a URL this site has never shown answers an empty list.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ruleId",
            "in": "query",
            "required": false,
            "description": "Only findings this rule produced, e.g. sec.headers.hsts_missing. The same spelling the issues list takes it in. A rule nothing in scope has reported answers an empty list.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128
            }
          },
          {
            "name": "comparisonStatus",
            "in": "query",
            "required": false,
            "description": "Only findings the run-over-run comparison placed in this bucket. resolved here is the comparison’s verdict and not the workflow status filter above - the two are different columns. unscanned and incomparable are the cases where the comparison could not make a statement: absence that was never observed, and a finding the baseline could not have reported. A run with no comparison answers an empty list for every value.",
            "schema": {
              "type": "string",
              "enum": [
                "new",
                "persistent",
                "changed",
                "resolved",
                "unscanned",
                "incomparable"
              ]
            }
          },
          {
            "name": "wcag",
            "in": "query",
            "required": false,
            "description": "Only findings that cite this WCAG 2.2 criterion, e.g. 1.4.3. Repeatable: a finding that cites any of the criteria matches. A check can relate to more than one criterion, and its findings are found by each. A value that is not a WCAG 2.2 criterion number is a 400; a criterion with no findings answers an empty list. With wcagLevel, the level narrows the criteria: a finding matches when it cites a criterion that is one of the numbers and of one of the levels.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "pattern": "^[1-4]\\.\\d\\.\\d{1,2}$"
              }
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "wcagLevel",
            "in": "query",
            "required": false,
            "description": "Only findings that cite a criterion of this level (the level WCAG gives the criterion). Repeatable: any of the levels matches. A value that is not A, AA or AAA is a 400. With wcag, the level narrows the criteria: wcag=1.4.3&wcagLevel=A answers an empty list, because 1.4.3 is level AA.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "A",
                  "AA",
                  "AAA"
                ]
              }
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "pageId",
            "in": "query",
            "required": false,
            "description": "Only findings seen on this page, by its id - what the pages inventory returns. It is the other spelling of url above, for a caller that already holds the identity rather than the address. A filter rather than a scope: a page id this organization does not own matches nothing and answers an empty list. Sending pageId and url together is a 400 - they are two ways of naming one page, and intersecting them would answer an empty list for a mismatched pair that looks exactly like a clean page.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "domainId",
            "in": "query",
            "required": false,
            "description": "Only findings of this site. A site id of another organization matches nothing and answers an empty list. Absent means every site of this organization.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "latestRun",
            "in": "query",
            "required": false,
            "description": "true restricts the list to the newest run of each site, which is what the dashboard summary counts - so a card reading 17 findings opens a list of 17 rather than of every run ever. Absent or false is every run of every site.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "compared",
            "in": "query",
            "required": false,
            "description": "true restricts the list to runs whose comparison with an earlier run was computed. A site’s first scan has no baseline and marks every finding new, which the dashboard does not count as new since the previous scan - so the portfolio’s new-findings numbers open with comparisonStatus=new, latestRun=true and compared=true. A run whose comparison is pending, had no baseline or was skipped matches nothing. Absent or false is every run, not only uncompared ones.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The findings.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FindingListResponse"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/findings/rules": {
      "get": {
        "operationId": "listOrganizationFindingRules",
        "summary": "The rules that have fired, for a rule filter",
        "description": "The distinct rules behind the findings list, with how many findings each has in scope. It exists so a findings filter can offer the rules a customer actually has rather than every rule the product ships - and rather than only the rules on the page being looked at, which would make a rule filterable only once it was already visible. Ordered by module, then by rule id, so a client can render it under module headings. No title: a rule’s prose title varies per instance, so one member’s wording is not the name of the group - ruleId is the identity, and it is what the findings list carries too. Unpaged, because the catalogue is bounded by the rule set rather than by a customer’s data. domainId is a filter exactly as it is on the list: a site of another organization matches nothing and answers an empty catalogue. Requires an API key with the `findings:read` scope.",
        "tags": [
          "Findings"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "domainId",
            "in": "query",
            "required": false,
            "description": "Only findings of this site. A site id of another organization matches nothing and answers an empty list. Absent means every site of this organization.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The rules.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FindingRuleListResponse"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/dashboard/summary": {
      "get": {
        "operationId": "readDashboardSummary",
        "summary": "What this organization’s sites are carrying, per module",
        "description": "The dashboard’s own read. Counted over the latest scan of each site in scope - the same rows the site list summarises, so the two cannot disagree - and broken down by module, because a total says how much there is and a module says who fixes it. Every module is an entry, zeroes included; scanned says whether one ran at all, so “nobody looked” is never rendered as “nothing wrong”. comparison is null rather than six zeroes when no run-over-run comparison covers the module, because zeroes would claim nothing changed. sources names the run behind each site, so the arithmetic is checkable, and pendingSites says how many sites are mid-scan - while that is above zero every number here is a floor. taskOutcome says how the work went rather than what it found - failed above zero means that module’s counts are a floor too - and is null, never five zeroes, for a module no run in scope was configured to do. totals.discoveredUrlCount is how many URLs those runs discovered, which is the denominator an issue count is read against. domainId is a SCOPE and not a filter, unlike the identically named parameter on the findings lists: absent means every site, and a site id this organization does not own is a 404 rather than a silent aggregate. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Findings"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "domainId",
            "in": "query",
            "required": false,
            "description": "Summarise this one site instead of every site. A site id this organization does not own is a 404, not an aggregate. Absent means every site of this organization.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The summary.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DashboardSummary"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such site in this organization - domainId is a scope.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    },
    "/organizations/{organizationId}/dashboard/portfolio": {
      "get": {
        "operationId": "readDashboardPortfolio",
        "summary": "Every site of this organization, one row each",
        "description": "The dashboard’s per-site read. One row per site, ordered like the site list, counted over the same latest run of each site as the summary and ?latestRun=true on the findings list - so totals.findingCounts equals the summary’s and every number opens as a list that counts the same rows. latestRun is the newest run of any status (null when the site was never scanned); a failed latest run adds its own, normally empty, rows and has no comparison. comparison is present only when the latest run’s comparison was computed, with the findings marked new by severity - the rows ?comparisonStatus=new&latestRun=true&compared=true lists. lastCompletedAt is when the site last finished a completed or partially completed scan. recentProblemRuns counts the failed and partially completed runs that finished in the last seven days and lists the ten newest. generatedAt is the instant it was computed. Facts only: nothing here scores or ranks sites. Requires an API key with the `scans:read` scope.",
        "tags": [
          "Findings"
        ],
        "parameters": [
          {
            "name": "organizationId",
            "in": "path",
            "required": true,
            "description": "The organization the request is scoped to.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The portfolio.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DashboardPortfolio"
                }
              }
            }
          },
          "400": {
            "description": "A path id is not a uuid.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "The API key is missing, malformed, unknown, revoked or expired, or was issued for another environment - one answer for all of them.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "The API key may not do this: details.reason is api_credential_scope_missing when it does not hold the scope this operation names, or api_credential_not_allowed when no API key may make this request.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No such organization, or it belongs to another organization than the API key’s - the same answer, so the endpoint cannot be used to find out which ids exist.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The API key sent more requests this minute than its per-minute limit: details.reason is api_credential_rate_limited, and Retry-After says in how many seconds the window resets. Every response to an API key carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "default": {
            "description": "Any failure not listed above - above all a 500, whose message is always \"Internal server error\". Every failure answers the ErrorResponse shape; quote its correlationId when reporting a problem.",
            "headers": {
              "x-correlation-id": {
                "$ref": "#/components/headers/CorrelationId"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiCredential": []
          }
        ]
      }
    }
  },
  "webhooks": {
    "scan.completed": {
      "post": {
        "operationId": "scanCompletedEvent",
        "summary": "A scan run finished",
        "description": "Sent to every enabled endpoint of the organization when one of its scan runs reaches a terminal status - completed, partially_completed or failed, in data.scanRun.status. The body is identifiers, a status and counts, never the findings themselves: fetch those through the API. Delivery is at least once - deduplicate on the body id. Sent as an HTTPS POST with Content-Type application/json and User-Agent PageLookout-Webhooks/1; the body is at most 16384 bytes.",
        "tags": [
          "Webhook events"
        ],
        "parameters": [
          {
            "name": "X-PageLookout-Event",
            "in": "header",
            "required": true,
            "description": "The event type, so a receiver can route before it parses the body.",
            "schema": {
              "type": "string",
              "const": "scan.completed"
            }
          },
          {
            "name": "X-PageLookout-Delivery-Id",
            "in": "header",
            "required": true,
            "description": "The delivery id: one per endpoint per event, the same on every attempt of that delivery.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-PageLookout-Signature",
            "in": "header",
            "required": true,
            "description": "`t=<unix seconds>,v1=<hex HMAC-SHA256>`. The HMAC key is the endpoint’s whole signing secret (`whsec_...`, prefix included) as UTF-8, and the message is the value of t, a dot, and the exact bytes of the body. Refuse a t more than 300 seconds from your clock. Every attempt is signed afresh.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "description": "`webhook-delivery/<delivery id>`: stable across the attempts of one delivery, for receivers that deduplicate on this header.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScanCompletedWebhookPayload"
              }
            }
          }
        },
        "responses": {
          "410": {
            "description": "Gone: switches the endpoint off at once. Nothing more is sent to it."
          },
          "2XX": {
            "description": "Delivered. Answer promptly and do the work afterwards: an answer that has not finished within 10 seconds counts as a timeout and is retried."
          },
          "default": {
            "description": "408, 429 and 5xx answers, timeouts and connection failures are retried with backoff; any other status, and any redirect, is not. See the webhooks guide."
          }
        },
        "security": []
      }
    },
    "webhook.ping": {
      "post": {
        "operationId": "webhookPingEvent",
        "summary": "A test delivery",
        "description": "Sent once, only when an organization admin presses Test on the endpoint in the dashboard's Integrations screen, so a receiver can prove it verifies the signature before any real event depends on it. Signed and headed exactly like scan.completed. Never retried. Sent as an HTTPS POST with Content-Type application/json and User-Agent PageLookout-Webhooks/1; the body is at most 16384 bytes.",
        "tags": [
          "Webhook events"
        ],
        "parameters": [
          {
            "name": "X-PageLookout-Event",
            "in": "header",
            "required": true,
            "description": "The event type, so a receiver can route before it parses the body.",
            "schema": {
              "type": "string",
              "const": "webhook.ping"
            }
          },
          {
            "name": "X-PageLookout-Delivery-Id",
            "in": "header",
            "required": true,
            "description": "The delivery id: one per endpoint per event, the same on every attempt of that delivery.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-PageLookout-Signature",
            "in": "header",
            "required": true,
            "description": "`t=<unix seconds>,v1=<hex HMAC-SHA256>`. The HMAC key is the endpoint’s whole signing secret (`whsec_...`, prefix included) as UTF-8, and the message is the value of t, a dot, and the exact bytes of the body. Refuse a t more than 300 seconds from your clock. Every attempt is signed afresh.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "description": "`webhook-delivery/<delivery id>`: stable across the attempts of one delivery, for receivers that deduplicate on this header.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookPingPayload"
              }
            }
          }
        },
        "responses": {
          "410": {
            "description": "Recorded as a failed test and not retried. A test delivery never switches the endpoint off."
          },
          "2XX": {
            "description": "Delivered. Answer promptly and do the work afterwards: an answer that has not finished within 10 seconds counts as a timeout and is retried."
          },
          "default": {
            "description": "408, 429 and 5xx answers, timeouts and connection failures are retried with backoff; any other status, and any redirect, is not. See the webhooks guide."
          }
        },
        "security": []
      }
    }
  },
  "components": {
    "securitySchemes": {
      "apiCredential": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "plk_<env>_<keyId>_<secret>",
        "description": "An organization API key, created by an organization admin on the Integrations screen and shown once. Accepted only by the operations in this reference, only inside its own organization, and only with the scope each operation names; rate-limited per key per minute."
      }
    },
    "headers": {
      "CorrelationId": {
        "description": "The id this request is logged under: your own x-correlation-id when it was valid, otherwise a fresh UUID. The same value as an error body’s correlationId.",
        "schema": {
          "type": "string",
          "pattern": "^[A-Za-z0-9._:-]{1,128}$"
        }
      }
    },
    "schemas": {
      "ErrorResponse": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "error": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "correlationId": {
            "type": "string"
          },
          "path": {
            "type": "string"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
          },
          "details": {
            "type": "object",
            "properties": {
              "fieldErrors": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              },
              "activeScanRunId": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "existingTagId": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "reason": {
                "type": "string",
                "enum": [
                  "organization_limit_exceeded",
                  "scanning_disabled",
                  "site_paused",
                  "alert_rule_limit_reached",
                  "alert_kind_unavailable",
                  "webhook_endpoint_limit_reached",
                  "api_credential_limit_reached",
                  "visual_template_limit_reached",
                  "access_group_limit_reached",
                  "site_tag_limit_reached",
                  "api_credential_rate_limited",
                  "rate_limited",
                  "api_credential_not_allowed",
                  "api_credential_scope_missing",
                  "last_organization_admin",
                  "membership_self_removal",
                  "consent_approvals_cannot_turn_off",
                  "already_member",
                  "invitation_pending",
                  "invitation_limit_reached",
                  "invitation_expired",
                  "invitation_revoked",
                  "invitation_already_accepted",
                  "invitation_email_mismatch",
                  "invitation_resend_too_soon",
                  "scan_run_not_retryable",
                  "scan_run_superseded"
                ]
              },
              "limit": {
                "type": "string",
                "enum": [
                  "maxDomains",
                  "maxMembers",
                  "maxUrlsPerScan",
                  "maxCrawlDepth",
                  "maxRequestsPerSecond",
                  "maxConcurrentTasksPerScan",
                  "maxConcurrentScanRuns",
                  "maxConcurrentTasks",
                  "maxScanRunsPerDay",
                  "maxScanRunsPerMonth",
                  "minScheduleIntervalHours",
                  "maxVisualScreenshotsPerScan",
                  "maxVisualScreenshotsPerMonth",
                  "maxVisualViewports",
                  "maxVisualPageHeight",
                  "maxPerformancePagesPerSite"
                ]
              },
              "value": {
                "type": "number"
              },
              "state": {
                "type": "string",
                "enum": [
                  "pending",
                  "failed",
                  "unavailable",
                  "expired"
                ]
              },
              "expiredAt": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              }
            },
            "additionalProperties": false
          }
        },
        "required": [
          "statusCode",
          "error",
          "message",
          "correlationId",
          "path",
          "timestamp"
        ],
        "additionalProperties": false
      },
      "DashboardSummary": {
        "type": "object",
        "properties": {
          "scope": {
            "type": "object",
            "properties": {
              "kind": {
                "type": "string",
                "enum": [
                  "organization",
                  "site"
                ]
              },
              "domainId": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "siteCount": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "kind",
              "domainId",
              "siteCount"
            ],
            "additionalProperties": false
          },
          "totals": {
            "type": "object",
            "properties": {
              "findingCounts": {
                "type": "object",
                "properties": {
                  "total": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "bySeverity": {
                    "type": "object",
                    "properties": {
                      "info": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "low": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "medium": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "high": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "critical": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      }
                    },
                    "required": [
                      "info",
                      "low",
                      "medium",
                      "high",
                      "critical"
                    ],
                    "additionalProperties": false
                  }
                },
                "required": [
                  "total",
                  "bySeverity"
                ],
                "additionalProperties": false
              },
              "issueCount": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "discoveredUrlCount": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "findingCounts",
              "issueCount",
              "discoveredUrlCount"
            ],
            "additionalProperties": false
          },
          "byModule": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "module": {
                  "type": "string",
                  "enum": [
                    "discovery",
                    "security_baseline",
                    "performance",
                    "seo",
                    "accessibility",
                    "consent",
                    "visual",
                    "geo"
                  ]
                },
                "scanned": {
                  "type": "boolean"
                },
                "findingCounts": {
                  "type": "object",
                  "properties": {
                    "total": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "bySeverity": {
                      "type": "object",
                      "properties": {
                        "info": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "low": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "medium": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "high": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "critical": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        }
                      },
                      "required": [
                        "info",
                        "low",
                        "medium",
                        "high",
                        "critical"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "total",
                    "bySeverity"
                  ],
                  "additionalProperties": false
                },
                "issueCount": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "comparison": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "new": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "persistent": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "changed": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "resolved": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "unscanned": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "incomparable": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        }
                      },
                      "required": [
                        "new",
                        "persistent",
                        "changed",
                        "resolved",
                        "unscanned",
                        "incomparable"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "comparability": {
                  "anyOf": [
                    {
                      "type": "string",
                      "enum": [
                        "comparable",
                        "incompatible",
                        "unknown",
                        "not_applicable"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "comparabilityStrict": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "taskOutcome": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "queued": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "running": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "completed": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "failed": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "cancelled": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        }
                      },
                      "required": [
                        "queued",
                        "running",
                        "completed",
                        "failed",
                        "cancelled"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "needsVerification": {
                  "type": "object",
                  "properties": {
                    "total": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "bySeverity": {
                      "type": "object",
                      "properties": {
                        "info": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "low": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "medium": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "high": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "critical": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        }
                      },
                      "required": [
                        "info",
                        "low",
                        "medium",
                        "high",
                        "critical"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "total",
                    "bySeverity"
                  ],
                  "additionalProperties": false
                }
              },
              "required": [
                "module",
                "scanned",
                "findingCounts",
                "issueCount",
                "comparison",
                "comparability",
                "taskOutcome"
              ],
              "additionalProperties": false
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "domainId": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "scanRunId": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "queued",
                    "running",
                    "completed",
                    "partially_completed",
                    "failed"
                  ]
                },
                "finishedAt": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "domainId",
                "scanRunId",
                "status",
                "finishedAt"
              ],
              "additionalProperties": false
            }
          },
          "pendingSites": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "scope",
          "totals",
          "byModule",
          "sources",
          "pendingSites"
        ],
        "additionalProperties": false
      },
      "DashboardPortfolio": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
          },
          "sites": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "domainId": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "hostname": {
                  "type": "string"
                },
                "displayName": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "isActive": {
                  "type": "boolean"
                },
                "scanningEnabled": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "nextScanAt": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "latestRun": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "queued",
                            "running",
                            "completed",
                            "partially_completed",
                            "failed"
                          ]
                        },
                        "queuedAt": {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        "finishedAt": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "id",
                        "status",
                        "queuedAt",
                        "finishedAt"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "lastCompletedAt": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "findingCounts": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "total": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "bySeverity": {
                          "type": "object",
                          "properties": {
                            "info": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "low": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "medium": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "high": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "critical": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            }
                          },
                          "required": [
                            "info",
                            "low",
                            "medium",
                            "high",
                            "critical"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "required": [
                        "total",
                        "bySeverity"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "comparison": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "baselineRunId": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "counts": {
                          "type": "object",
                          "properties": {
                            "new": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "persistent": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "changed": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "resolved": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "unscanned": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "incomparable": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            }
                          },
                          "required": [
                            "new",
                            "persistent",
                            "changed",
                            "resolved",
                            "unscanned",
                            "incomparable"
                          ],
                          "additionalProperties": false
                        },
                        "newBySeverity": {
                          "type": "object",
                          "properties": {
                            "info": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "low": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "medium": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "high": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "critical": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            }
                          },
                          "required": [
                            "info",
                            "low",
                            "medium",
                            "high",
                            "critical"
                          ],
                          "additionalProperties": false
                        },
                        "newTotal": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "warnings": {
                          "type": "array",
                          "items": {
                            "type": "string",
                            "enum": [
                              "incompatible_measurement",
                              "scanner_configuration_unknown",
                              "mixed_measurement_configuration",
                              "baseline_partially_completed",
                              "comparison_truncated",
                              "duplicate_fingerprint_in_run"
                            ]
                          }
                        }
                      },
                      "required": [
                        "baselineRunId",
                        "counts",
                        "newBySeverity",
                        "newTotal",
                        "warnings"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "domainId",
                "hostname",
                "displayName",
                "isActive",
                "scanningEnabled",
                "nextScanAt",
                "latestRun",
                "lastCompletedAt",
                "findingCounts",
                "comparison"
              ],
              "additionalProperties": false
            }
          },
          "totals": {
            "type": "object",
            "properties": {
              "siteCount": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "activeSiteCount": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "pausedSiteCount": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "neverScannedCount": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "pendingSites": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "findingCounts": {
                "type": "object",
                "properties": {
                  "total": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "bySeverity": {
                    "type": "object",
                    "properties": {
                      "info": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "low": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "medium": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "high": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "critical": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      }
                    },
                    "required": [
                      "info",
                      "low",
                      "medium",
                      "high",
                      "critical"
                    ],
                    "additionalProperties": false
                  }
                },
                "required": [
                  "total",
                  "bySeverity"
                ],
                "additionalProperties": false
              },
              "sitesWithNewFindings": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "newFindingCount": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "newHighOrCriticalCount": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "comparedSiteCount": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "siteCount",
              "activeSiteCount",
              "pausedSiteCount",
              "neverScannedCount",
              "pendingSites",
              "findingCounts",
              "sitesWithNewFindings",
              "newFindingCount",
              "newHighOrCriticalCount",
              "comparedSiteCount"
            ],
            "additionalProperties": false
          },
          "recentProblemRuns": {
            "type": "object",
            "properties": {
              "windowDays": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "since": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              },
              "total": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "byStatus": {
                "type": "object",
                "properties": {
                  "failed": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "partially_completed": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  }
                },
                "required": [
                  "failed",
                  "partially_completed"
                ],
                "additionalProperties": false
              },
              "items": {
                "maxItems": 10,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "domainId": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "failed",
                        "partially_completed"
                      ]
                    },
                    "finishedAt": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    }
                  },
                  "required": [
                    "id",
                    "domainId",
                    "status",
                    "finishedAt"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "windowDays",
              "since",
              "total",
              "byStatus",
              "items"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "generatedAt",
          "sites",
          "totals",
          "recentProblemRuns"
        ],
        "additionalProperties": false
      },
      "Domain": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "organizationId": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "hostname": {
            "type": "string"
          },
          "baseUrl": {
            "type": "string"
          },
          "displayName": {
            "type": [
              "string",
              "null"
            ]
          },
          "isActive": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
          },
          "lastScan": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "queued",
                      "running",
                      "completed",
                      "partially_completed",
                      "failed"
                    ]
                  },
                  "queuedAt": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "startedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "finishedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "findingCounts": {
                    "type": "object",
                    "properties": {
                      "total": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "bySeverity": {
                        "type": "object",
                        "properties": {
                          "info": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          "low": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          "medium": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          "high": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          "critical": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          }
                        },
                        "required": [
                          "info",
                          "low",
                          "medium",
                          "high",
                          "critical"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "total",
                      "bySeverity"
                    ],
                    "additionalProperties": false
                  },
                  "issueCount": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  }
                },
                "required": [
                  "id",
                  "status",
                  "queuedAt",
                  "startedAt",
                  "finishedAt",
                  "findingCounts",
                  "issueCount"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ]
          },
          "nextScanAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              },
              {
                "type": "null"
              }
            ]
          },
          "tags": {
            "default": [],
            "maxItems": 500,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string",
                  "enum": [
                    "neutral",
                    "red",
                    "orange",
                    "amber",
                    "green",
                    "teal",
                    "blue",
                    "violet"
                  ]
                }
              },
              "required": [
                "id",
                "name",
                "color"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "id",
          "organizationId",
          "hostname",
          "baseUrl",
          "displayName",
          "isActive",
          "createdAt",
          "updatedAt",
          "lastScan",
          "nextScanAt",
          "tags"
        ],
        "additionalProperties": false
      },
      "DomainListResponse": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "organizationId": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "hostname": {
                  "type": "string"
                },
                "baseUrl": {
                  "type": "string"
                },
                "displayName": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "isActive": {
                  "type": "boolean"
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "lastScan": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "queued",
                            "running",
                            "completed",
                            "partially_completed",
                            "failed"
                          ]
                        },
                        "queuedAt": {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        "startedAt": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "finishedAt": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "findingCounts": {
                          "type": "object",
                          "properties": {
                            "total": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "bySeverity": {
                              "type": "object",
                              "properties": {
                                "info": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                },
                                "low": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                },
                                "medium": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                },
                                "high": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                },
                                "critical": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                }
                              },
                              "required": [
                                "info",
                                "low",
                                "medium",
                                "high",
                                "critical"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "total",
                            "bySeverity"
                          ],
                          "additionalProperties": false
                        },
                        "issueCount": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        }
                      },
                      "required": [
                        "id",
                        "status",
                        "queuedAt",
                        "startedAt",
                        "finishedAt",
                        "findingCounts",
                        "issueCount"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "nextScanAt": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "tags": {
                  "default": [],
                  "maxItems": 500,
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      "name": {
                        "type": "string"
                      },
                      "color": {
                        "type": "string",
                        "enum": [
                          "neutral",
                          "red",
                          "orange",
                          "amber",
                          "green",
                          "teal",
                          "blue",
                          "violet"
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "name",
                      "color"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "required": [
                "id",
                "organizationId",
                "hostname",
                "baseUrl",
                "displayName",
                "isActive",
                "createdAt",
                "updatedAt",
                "lastScan",
                "nextScanAt",
                "tags"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "items"
        ],
        "additionalProperties": false
      },
      "ScanRun": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "organizationId": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "domainId": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "status": {
            "type": "string",
            "enum": [
              "queued",
              "running",
              "completed",
              "partially_completed",
              "failed"
            ]
          },
          "trigger": {
            "type": "string",
            "enum": [
              "manual",
              "scheduled"
            ]
          },
          "policyVersion": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "policySnapshot": {
            "type": "object",
            "properties": {
              "modules": {
                "minItems": 1,
                "maxItems": 8,
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "discovery",
                    "security_baseline",
                    "performance",
                    "seo",
                    "accessibility",
                    "consent",
                    "visual",
                    "geo"
                  ]
                }
              },
              "maxUrls": {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              "consentMaxUrls": {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              "crawlDepth": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "seedUrl": {
                "type": "string",
                "maxLength": 2048,
                "format": "uri"
              },
              "requestsPerSecond": {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              "maxConcurrentTasks": {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              "consentCmpSelectors": {
                "type": "object",
                "properties": {
                  "format": {
                    "type": "string",
                    "const": "consent.cmp-selectors/1"
                  },
                  "detect": {
                    "type": "object",
                    "properties": {
                      "selectors": {
                        "minItems": 1,
                        "maxItems": 8,
                        "type": "array",
                        "items": {
                          "type": "string",
                          "maxLength": 256
                        }
                      }
                    },
                    "required": [
                      "selectors"
                    ],
                    "additionalProperties": false
                  },
                  "frame": {
                    "type": "string",
                    "maxLength": 256
                  },
                  "accept": {
                    "type": "object",
                    "properties": {
                      "steps": {
                        "minItems": 1,
                        "maxItems": 5,
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "action": {
                              "type": "string",
                              "enum": [
                                "click"
                              ]
                            },
                            "selector": {
                              "type": "string",
                              "maxLength": 256
                            },
                            "optional": {
                              "type": "boolean"
                            }
                          },
                          "required": [
                            "action",
                            "selector"
                          ],
                          "additionalProperties": false
                        }
                      }
                    },
                    "required": [
                      "steps"
                    ],
                    "additionalProperties": false
                  },
                  "reject": {
                    "type": "object",
                    "properties": {
                      "steps": {
                        "minItems": 1,
                        "maxItems": 5,
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "action": {
                              "type": "string",
                              "enum": [
                                "click"
                              ]
                            },
                            "selector": {
                              "type": "string",
                              "maxLength": 256
                            },
                            "optional": {
                              "type": "boolean"
                            }
                          },
                          "required": [
                            "action",
                            "selector"
                          ],
                          "additionalProperties": false
                        }
                      }
                    },
                    "required": [
                      "steps"
                    ],
                    "additionalProperties": false
                  },
                  "settled": {
                    "type": "object",
                    "properties": {
                      "cookieNames": {
                        "maxItems": 8,
                        "type": "array",
                        "items": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 128,
                          "pattern": "^[A-Za-z0-9_.-]+$"
                        }
                      },
                      "hiddenSelectors": {
                        "maxItems": 4,
                        "type": "array",
                        "items": {
                          "type": "string",
                          "maxLength": 256
                        }
                      }
                    },
                    "additionalProperties": false
                  },
                  "automaticAdaptersFallback": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "format",
                  "detect",
                  "accept",
                  "reject",
                  "automaticAdaptersFallback"
                ],
                "additionalProperties": false
              },
              "visualConfig": {
                "type": "object",
                "properties": {
                  "format": {
                    "type": "string",
                    "const": "visual.config/1"
                  },
                  "viewports": {
                    "minItems": 1,
                    "maxItems": 6,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "key": {
                          "type": "string",
                          "maxLength": 32,
                          "pattern": "^[a-z0-9][a-z0-9-]{0,31}$"
                        },
                        "label": {
                          "type": "string",
                          "maxLength": 40
                        },
                        "width": {
                          "type": "integer",
                          "minimum": 320,
                          "maximum": 2560
                        },
                        "height": {
                          "type": "integer",
                          "minimum": 480,
                          "maximum": 1600
                        },
                        "deviceScaleFactor": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 3
                        },
                        "mobile": {
                          "type": "boolean"
                        },
                        "touch": {
                          "type": "boolean"
                        },
                        "userAgentClass": {
                          "type": "string",
                          "enum": [
                            "desktop",
                            "mobile"
                          ]
                        }
                      },
                      "required": [
                        "key",
                        "label",
                        "width",
                        "height",
                        "deviceScaleFactor",
                        "mobile",
                        "touch",
                        "userAgentClass"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "maxPageHeight": {
                    "type": "integer",
                    "minimum": 1000,
                    "maximum": 30000
                  },
                  "screenshotsPerScan": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 500
                  },
                  "screenshotsPerMonth": {
                    "anyOf": [
                      {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 1000000
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "retentionDays": {
                    "anyOf": [
                      {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 365
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "significance": {
                    "type": "object",
                    "properties": {
                      "preset": {
                        "type": "string",
                        "enum": [
                          "low",
                          "standard",
                          "high"
                        ]
                      },
                      "overrides": {
                        "type": "object",
                        "properties": {
                          "colorThresholdPermille": {
                            "type": "integer",
                            "minimum": 20,
                            "maximum": 500
                          },
                          "areaRatioPpm": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 1000000
                          },
                          "maxAreaPixels": {
                            "type": "integer",
                            "minimum": 100,
                            "maximum": 1000000
                          },
                          "hotTilePixels": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 256
                          },
                          "clusterMinPixels": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100000
                          },
                          "blankBandMinRows": {
                            "type": "integer",
                            "minimum": 8,
                            "maximum": 5000
                          }
                        },
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "preset"
                    ],
                    "additionalProperties": false
                  },
                  "ignoreSelectors": {
                    "maxItems": 20,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "maxLength": 256
                    }
                  },
                  "knownDynamic": {
                    "type": "object",
                    "properties": {
                      "hide": {
                        "type": "boolean"
                      },
                      "mask": {
                        "type": "boolean"
                      },
                      "optIn": {
                        "maxItems": 1,
                        "type": "array",
                        "items": {
                          "type": "string",
                          "enum": [
                            "canvas"
                          ]
                        }
                      }
                    },
                    "required": [
                      "hide",
                      "mask",
                      "optIn"
                    ],
                    "additionalProperties": false
                  }
                },
                "required": [
                  "format",
                  "viewports",
                  "maxPageHeight",
                  "screenshotsPerScan",
                  "screenshotsPerMonth",
                  "retentionDays",
                  "significance",
                  "ignoreSelectors",
                  "knownDynamic"
                ],
                "additionalProperties": false
              },
              "appliedOrganizationLimits": {
                "type": "object",
                "properties": {
                  "maxUrls": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  },
                  "crawlDepth": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "requestsPerSecond": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  },
                  "maxConcurrentTasks": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  },
                  "visualScreenshotsPerScan": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  },
                  "visualScreenshotsPerMonth": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  },
                  "visualViewports": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  },
                  "visualMaxPageHeight": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  }
                },
                "additionalProperties": false
              }
            },
            "required": [
              "modules",
              "maxUrls",
              "crawlDepth",
              "seedUrl"
            ],
            "additionalProperties": false
          },
          "requestedByUserId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              {
                "type": "null"
              }
            ]
          },
          "correlationId": {
            "type": [
              "string",
              "null"
            ]
          },
          "errorSummary": {
            "type": [
              "string",
              "null"
            ]
          },
          "queuedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
          },
          "startedAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              },
              {
                "type": "null"
              }
            ]
          },
          "finishedAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              },
              {
                "type": "null"
              }
            ]
          },
          "lastProgressAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              },
              {
                "type": "null"
              }
            ]
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
          },
          "dispatch": {
            "type": "object",
            "properties": {
              "state": {
                "type": "string",
                "enum": [
                  "pending",
                  "published",
                  "failed"
                ]
              },
              "pendingEvents": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "failedEvents": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "state",
              "pendingEvents",
              "failedEvents"
            ],
            "additionalProperties": false
          },
          "taskCounts": {
            "type": "object",
            "properties": {
              "queued": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "running": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "completed": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "failed": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "cancelled": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "queued",
              "running",
              "completed",
              "failed",
              "cancelled"
            ],
            "additionalProperties": false
          },
          "moduleOutcomes": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "module": {
                  "type": "string",
                  "enum": [
                    "discovery",
                    "security_baseline",
                    "performance",
                    "seo",
                    "accessibility",
                    "consent",
                    "visual",
                    "geo"
                  ]
                },
                "tasks": {
                  "type": "object",
                  "properties": {
                    "queued": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "running": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "completed": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "failed": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "cancelled": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    }
                  },
                  "required": [
                    "queued",
                    "running",
                    "completed",
                    "failed",
                    "cancelled"
                  ],
                  "additionalProperties": false
                },
                "findingCount": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "rawResultsMissing": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "module",
                "tasks",
                "findingCount",
                "rawResultsMissing"
              ],
              "additionalProperties": false
            }
          },
          "findingCounts": {
            "type": "object",
            "properties": {
              "total": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "bySeverity": {
                "type": "object",
                "properties": {
                  "info": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "low": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "medium": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "high": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "critical": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  }
                },
                "required": [
                  "info",
                  "low",
                  "medium",
                  "high",
                  "critical"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "total",
              "bySeverity"
            ],
            "additionalProperties": false
          },
          "issueCount": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "comparison": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "state": {
                    "type": "string",
                    "enum": [
                      "computed",
                      "no_baseline",
                      "skipped"
                    ]
                  },
                  "baselineRunId": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "computedAt": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "counts": {
                    "type": "object",
                    "properties": {
                      "new": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "persistent": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "changed": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "resolved": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "unscanned": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "incomparable": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      }
                    },
                    "required": [
                      "new",
                      "persistent",
                      "changed",
                      "resolved",
                      "unscanned",
                      "incomparable"
                    ],
                    "additionalProperties": false
                  }
                },
                "required": [
                  "state",
                  "baselineRunId",
                  "computedAt",
                  "counts"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "organizationId",
          "domainId",
          "status",
          "trigger",
          "policyVersion",
          "policySnapshot",
          "requestedByUserId",
          "correlationId",
          "errorSummary",
          "queuedAt",
          "startedAt",
          "finishedAt",
          "lastProgressAt",
          "createdAt",
          "updatedAt",
          "dispatch",
          "taskCounts",
          "moduleOutcomes",
          "findingCounts",
          "issueCount",
          "comparison"
        ],
        "additionalProperties": false
      },
      "ScanRunListResponse": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "organizationId": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "domainId": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "queued",
                    "running",
                    "completed",
                    "partially_completed",
                    "failed"
                  ]
                },
                "trigger": {
                  "type": "string",
                  "enum": [
                    "manual",
                    "scheduled"
                  ]
                },
                "policyVersion": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "policySnapshot": {
                  "type": "object",
                  "properties": {
                    "modules": {
                      "minItems": 1,
                      "maxItems": 8,
                      "type": "array",
                      "items": {
                        "type": "string",
                        "enum": [
                          "discovery",
                          "security_baseline",
                          "performance",
                          "seo",
                          "accessibility",
                          "consent",
                          "visual",
                          "geo"
                        ]
                      }
                    },
                    "maxUrls": {
                      "type": "integer",
                      "exclusiveMinimum": 0,
                      "maximum": 9007199254740991
                    },
                    "consentMaxUrls": {
                      "type": "integer",
                      "exclusiveMinimum": 0,
                      "maximum": 9007199254740991
                    },
                    "crawlDepth": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "seedUrl": {
                      "type": "string",
                      "maxLength": 2048,
                      "format": "uri"
                    },
                    "requestsPerSecond": {
                      "type": "integer",
                      "exclusiveMinimum": 0,
                      "maximum": 9007199254740991
                    },
                    "maxConcurrentTasks": {
                      "type": "integer",
                      "exclusiveMinimum": 0,
                      "maximum": 9007199254740991
                    },
                    "consentCmpSelectors": {
                      "type": "object",
                      "properties": {
                        "format": {
                          "type": "string",
                          "const": "consent.cmp-selectors/1"
                        },
                        "detect": {
                          "type": "object",
                          "properties": {
                            "selectors": {
                              "minItems": 1,
                              "maxItems": 8,
                              "type": "array",
                              "items": {
                                "type": "string",
                                "maxLength": 256
                              }
                            }
                          },
                          "required": [
                            "selectors"
                          ],
                          "additionalProperties": false
                        },
                        "frame": {
                          "type": "string",
                          "maxLength": 256
                        },
                        "accept": {
                          "type": "object",
                          "properties": {
                            "steps": {
                              "minItems": 1,
                              "maxItems": 5,
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "action": {
                                    "type": "string",
                                    "enum": [
                                      "click"
                                    ]
                                  },
                                  "selector": {
                                    "type": "string",
                                    "maxLength": 256
                                  },
                                  "optional": {
                                    "type": "boolean"
                                  }
                                },
                                "required": [
                                  "action",
                                  "selector"
                                ],
                                "additionalProperties": false
                              }
                            }
                          },
                          "required": [
                            "steps"
                          ],
                          "additionalProperties": false
                        },
                        "reject": {
                          "type": "object",
                          "properties": {
                            "steps": {
                              "minItems": 1,
                              "maxItems": 5,
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "action": {
                                    "type": "string",
                                    "enum": [
                                      "click"
                                    ]
                                  },
                                  "selector": {
                                    "type": "string",
                                    "maxLength": 256
                                  },
                                  "optional": {
                                    "type": "boolean"
                                  }
                                },
                                "required": [
                                  "action",
                                  "selector"
                                ],
                                "additionalProperties": false
                              }
                            }
                          },
                          "required": [
                            "steps"
                          ],
                          "additionalProperties": false
                        },
                        "settled": {
                          "type": "object",
                          "properties": {
                            "cookieNames": {
                              "maxItems": 8,
                              "type": "array",
                              "items": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 128,
                                "pattern": "^[A-Za-z0-9_.-]+$"
                              }
                            },
                            "hiddenSelectors": {
                              "maxItems": 4,
                              "type": "array",
                              "items": {
                                "type": "string",
                                "maxLength": 256
                              }
                            }
                          },
                          "additionalProperties": false
                        },
                        "automaticAdaptersFallback": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "format",
                        "detect",
                        "accept",
                        "reject",
                        "automaticAdaptersFallback"
                      ],
                      "additionalProperties": false
                    },
                    "visualConfig": {
                      "type": "object",
                      "properties": {
                        "format": {
                          "type": "string",
                          "const": "visual.config/1"
                        },
                        "viewports": {
                          "minItems": 1,
                          "maxItems": 6,
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "key": {
                                "type": "string",
                                "maxLength": 32,
                                "pattern": "^[a-z0-9][a-z0-9-]{0,31}$"
                              },
                              "label": {
                                "type": "string",
                                "maxLength": 40
                              },
                              "width": {
                                "type": "integer",
                                "minimum": 320,
                                "maximum": 2560
                              },
                              "height": {
                                "type": "integer",
                                "minimum": 480,
                                "maximum": 1600
                              },
                              "deviceScaleFactor": {
                                "type": "integer",
                                "minimum": 1,
                                "maximum": 3
                              },
                              "mobile": {
                                "type": "boolean"
                              },
                              "touch": {
                                "type": "boolean"
                              },
                              "userAgentClass": {
                                "type": "string",
                                "enum": [
                                  "desktop",
                                  "mobile"
                                ]
                              }
                            },
                            "required": [
                              "key",
                              "label",
                              "width",
                              "height",
                              "deviceScaleFactor",
                              "mobile",
                              "touch",
                              "userAgentClass"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "maxPageHeight": {
                          "type": "integer",
                          "minimum": 1000,
                          "maximum": 30000
                        },
                        "screenshotsPerScan": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 500
                        },
                        "screenshotsPerMonth": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 1,
                              "maximum": 1000000
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "retentionDays": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 1,
                              "maximum": 365
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "significance": {
                          "type": "object",
                          "properties": {
                            "preset": {
                              "type": "string",
                              "enum": [
                                "low",
                                "standard",
                                "high"
                              ]
                            },
                            "overrides": {
                              "type": "object",
                              "properties": {
                                "colorThresholdPermille": {
                                  "type": "integer",
                                  "minimum": 20,
                                  "maximum": 500
                                },
                                "areaRatioPpm": {
                                  "type": "integer",
                                  "minimum": 1,
                                  "maximum": 1000000
                                },
                                "maxAreaPixels": {
                                  "type": "integer",
                                  "minimum": 100,
                                  "maximum": 1000000
                                },
                                "hotTilePixels": {
                                  "type": "integer",
                                  "minimum": 1,
                                  "maximum": 256
                                },
                                "clusterMinPixels": {
                                  "type": "integer",
                                  "minimum": 1,
                                  "maximum": 100000
                                },
                                "blankBandMinRows": {
                                  "type": "integer",
                                  "minimum": 8,
                                  "maximum": 5000
                                }
                              },
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "preset"
                          ],
                          "additionalProperties": false
                        },
                        "ignoreSelectors": {
                          "maxItems": 20,
                          "type": "array",
                          "items": {
                            "type": "string",
                            "maxLength": 256
                          }
                        },
                        "knownDynamic": {
                          "type": "object",
                          "properties": {
                            "hide": {
                              "type": "boolean"
                            },
                            "mask": {
                              "type": "boolean"
                            },
                            "optIn": {
                              "maxItems": 1,
                              "type": "array",
                              "items": {
                                "type": "string",
                                "enum": [
                                  "canvas"
                                ]
                              }
                            }
                          },
                          "required": [
                            "hide",
                            "mask",
                            "optIn"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "required": [
                        "format",
                        "viewports",
                        "maxPageHeight",
                        "screenshotsPerScan",
                        "screenshotsPerMonth",
                        "retentionDays",
                        "significance",
                        "ignoreSelectors",
                        "knownDynamic"
                      ],
                      "additionalProperties": false
                    },
                    "appliedOrganizationLimits": {
                      "type": "object",
                      "properties": {
                        "maxUrls": {
                          "type": "integer",
                          "exclusiveMinimum": 0,
                          "maximum": 9007199254740991
                        },
                        "crawlDepth": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "requestsPerSecond": {
                          "type": "integer",
                          "exclusiveMinimum": 0,
                          "maximum": 9007199254740991
                        },
                        "maxConcurrentTasks": {
                          "type": "integer",
                          "exclusiveMinimum": 0,
                          "maximum": 9007199254740991
                        },
                        "visualScreenshotsPerScan": {
                          "type": "integer",
                          "exclusiveMinimum": 0,
                          "maximum": 9007199254740991
                        },
                        "visualScreenshotsPerMonth": {
                          "type": "integer",
                          "exclusiveMinimum": 0,
                          "maximum": 9007199254740991
                        },
                        "visualViewports": {
                          "type": "integer",
                          "exclusiveMinimum": 0,
                          "maximum": 9007199254740991
                        },
                        "visualMaxPageHeight": {
                          "type": "integer",
                          "exclusiveMinimum": 0,
                          "maximum": 9007199254740991
                        }
                      },
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "modules",
                    "maxUrls",
                    "crawlDepth",
                    "seedUrl"
                  ],
                  "additionalProperties": false
                },
                "requestedByUserId": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "correlationId": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "errorSummary": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "queuedAt": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "startedAt": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "finishedAt": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "lastProgressAt": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "dispatch": {
                  "type": "object",
                  "properties": {
                    "state": {
                      "type": "string",
                      "enum": [
                        "pending",
                        "published",
                        "failed"
                      ]
                    },
                    "pendingEvents": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "failedEvents": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    }
                  },
                  "required": [
                    "state",
                    "pendingEvents",
                    "failedEvents"
                  ],
                  "additionalProperties": false
                },
                "taskCounts": {
                  "type": "object",
                  "properties": {
                    "queued": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "running": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "completed": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "failed": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "cancelled": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    }
                  },
                  "required": [
                    "queued",
                    "running",
                    "completed",
                    "failed",
                    "cancelled"
                  ],
                  "additionalProperties": false
                },
                "moduleOutcomes": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "module": {
                        "type": "string",
                        "enum": [
                          "discovery",
                          "security_baseline",
                          "performance",
                          "seo",
                          "accessibility",
                          "consent",
                          "visual",
                          "geo"
                        ]
                      },
                      "tasks": {
                        "type": "object",
                        "properties": {
                          "queued": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          "running": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          "completed": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          "failed": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          "cancelled": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          }
                        },
                        "required": [
                          "queued",
                          "running",
                          "completed",
                          "failed",
                          "cancelled"
                        ],
                        "additionalProperties": false
                      },
                      "findingCount": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "rawResultsMissing": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      }
                    },
                    "required": [
                      "module",
                      "tasks",
                      "findingCount",
                      "rawResultsMissing"
                    ],
                    "additionalProperties": false
                  }
                },
                "findingCounts": {
                  "type": "object",
                  "properties": {
                    "total": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "bySeverity": {
                      "type": "object",
                      "properties": {
                        "info": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "low": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "medium": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "high": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "critical": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        }
                      },
                      "required": [
                        "info",
                        "low",
                        "medium",
                        "high",
                        "critical"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "total",
                    "bySeverity"
                  ],
                  "additionalProperties": false
                },
                "issueCount": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "comparison": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "state": {
                          "type": "string",
                          "enum": [
                            "computed",
                            "no_baseline",
                            "skipped"
                          ]
                        },
                        "baselineRunId": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "computedAt": {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        "counts": {
                          "type": "object",
                          "properties": {
                            "new": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "persistent": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "changed": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "resolved": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "unscanned": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "incomparable": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            }
                          },
                          "required": [
                            "new",
                            "persistent",
                            "changed",
                            "resolved",
                            "unscanned",
                            "incomparable"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "required": [
                        "state",
                        "baselineRunId",
                        "computedAt",
                        "counts"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "organizationId",
                "domainId",
                "status",
                "trigger",
                "policyVersion",
                "policySnapshot",
                "requestedByUserId",
                "correlationId",
                "errorSummary",
                "queuedAt",
                "startedAt",
                "finishedAt",
                "lastProgressAt",
                "createdAt",
                "updatedAt",
                "dispatch",
                "taskCounts",
                "moduleOutcomes",
                "findingCounts",
                "issueCount",
                "comparison"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "items"
        ],
        "additionalProperties": false
      },
      "ScanTaskListResponse": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "scanRunId": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "scanTargetId": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "scanTargetKey": {
                  "type": "string"
                },
                "module": {
                  "type": "string",
                  "enum": [
                    "discovery",
                    "security_baseline",
                    "performance",
                    "seo",
                    "accessibility",
                    "consent",
                    "visual",
                    "geo"
                  ]
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "queued",
                    "running",
                    "completed",
                    "failed",
                    "cancelled"
                  ]
                },
                "attemptCount": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "maxAttempts": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 9007199254740991
                },
                "lastError": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "errorCode": {
                  "anyOf": [
                    {
                      "type": "string",
                      "enum": [
                        "network_timeout",
                        "host_unreachable",
                        "dns_failure",
                        "tls_error",
                        "http_error",
                        "invalid_target",
                        "module_unsupported",
                        "worker_internal",
                        "abandoned"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "errorRetryable": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "errorDetails": {
                  "anyOf": [
                    {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "number"
                        },
                        {
                          "type": "boolean"
                        },
                        {
                          "type": "null"
                        },
                        {
                          "type": "array",
                          "items": {}
                        },
                        {
                          "type": "object",
                          "propertyNames": {
                            "type": "string"
                          },
                          "additionalProperties": {}
                        }
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "lastAttemptFinishedAt": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "findingCount": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "resultSummary": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "findingCount": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "bySeverity": {
                          "type": "object",
                          "propertyNames": {
                            "type": "string",
                            "enum": [
                              "info",
                              "low",
                              "medium",
                              "high",
                              "critical"
                            ]
                          },
                          "additionalProperties": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          }
                        },
                        "statusCode": {
                          "type": "integer",
                          "minimum": 100,
                          "maximum": 599
                        }
                      },
                      "required": [
                        "findingCount"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "queuedAt": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "dispatchedAt": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "startedAt": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "finishedAt": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                }
              },
              "required": [
                "id",
                "scanRunId",
                "scanTargetId",
                "scanTargetKey",
                "module",
                "status",
                "attemptCount",
                "maxAttempts",
                "lastError",
                "errorCode",
                "errorRetryable",
                "errorDetails",
                "lastAttemptFinishedAt",
                "findingCount",
                "resultSummary",
                "createdAt",
                "queuedAt",
                "dispatchedAt",
                "startedAt",
                "finishedAt",
                "updatedAt"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "items"
        ],
        "additionalProperties": false
      },
      "FindingListResponse": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "organizationId": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "domainId": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "scanRunId": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "scanTaskId": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "scanTargetId": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "pageId": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "url": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "targetUrl": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "module": {
                  "type": "string",
                  "enum": [
                    "discovery",
                    "security_baseline",
                    "performance",
                    "seo",
                    "accessibility",
                    "consent",
                    "visual",
                    "geo"
                  ]
                },
                "ruleId": {
                  "type": "string"
                },
                "category": {
                  "type": "string"
                },
                "severity": {
                  "type": "string",
                  "enum": [
                    "info",
                    "low",
                    "medium",
                    "high",
                    "critical"
                  ]
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "recommendation": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "fingerprint": {
                  "type": "string"
                },
                "discriminator": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "scope": {
                  "type": "string",
                  "enum": [
                    "page",
                    "site"
                  ]
                },
                "source": {
                  "type": "string",
                  "enum": [
                    "automated",
                    "human_review"
                  ]
                },
                "confirmation": {
                  "type": "string",
                  "enum": [
                    "confirmed",
                    "needs_verification"
                  ]
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "open",
                    "resolved",
                    "suppressed"
                  ]
                },
                "comparisonStatus": {
                  "anyOf": [
                    {
                      "type": "string",
                      "enum": [
                        "new",
                        "persistent",
                        "changed",
                        "resolved",
                        "unscanned",
                        "incomparable"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "changeReasons": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "enum": [
                      "severity_increased",
                      "severity_decreased",
                      "confirmation_withdrawn",
                      "confirmation_confirmed",
                      "evidence_changed"
                    ]
                  }
                },
                "firstSeenAt": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "lastSeenAt": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "comparison": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "baselineRunId": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        "baselineFindingId": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "previousSeverity": {
                          "anyOf": [
                            {
                              "type": "string",
                              "enum": [
                                "info",
                                "low",
                                "medium",
                                "high",
                                "critical"
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "metricDelta": {
                          "anyOf": [
                            {
                              "type": "object",
                              "properties": {
                                "metric": {
                                  "type": "string"
                                },
                                "unit": {
                                  "type": "string"
                                },
                                "baselineValue": {
                                  "type": "number"
                                },
                                "currentValue": {
                                  "type": "number"
                                },
                                "delta": {
                                  "type": "number"
                                },
                                "percentChange": {
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                }
                              },
                              "required": [
                                "metric",
                                "unit",
                                "baselineValue",
                                "currentValue",
                                "delta",
                                "percentChange"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "baselineRunId",
                        "baselineFindingId",
                        "previousSeverity",
                        "metricDelta"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "consentScenario": {
                  "anyOf": [
                    {
                      "type": "string",
                      "enum": [
                        "initial",
                        "reject_all",
                        "accept_all"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "organizationClassification": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "classifiedAt": {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        "classifiedBy": {
                          "anyOf": [
                            {
                              "type": "object",
                              "properties": {
                                "kind": {
                                  "type": "string",
                                  "const": "organization_member"
                                },
                                "id": {
                                  "anyOf": [
                                    {
                                      "type": "string",
                                      "format": "uuid",
                                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "displayName": {
                                  "anyOf": [
                                    {
                                      "type": "string",
                                      "maxLength": 200
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                }
                              },
                              "required": [
                                "kind",
                                "id",
                                "displayName"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "scope": {
                          "type": "string",
                          "enum": [
                            "site",
                            "organization"
                          ]
                        },
                        "match": {
                          "type": "string",
                          "enum": [
                            "exact",
                            "prefix"
                          ]
                        },
                        "value": {
                          "type": "string",
                          "maxLength": 256,
                          "pattern": "^[\\x21\\x24\\x26\\x28-\\x2b\\x2d\\x2e\\x30-\\x3a\\x41-\\x5b\\x5d-\\x7e]+$"
                        }
                      },
                      "required": [
                        "classifiedAt",
                        "classifiedBy",
                        "scope",
                        "match",
                        "value"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence": {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "const": "security"
                        },
                        "headers": {
                          "type": "object",
                          "propertyNames": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 128
                          },
                          "additionalProperties": {
                            "type": "string",
                            "maxLength": 1024
                          }
                        },
                        "statusCode": {
                          "type": "integer",
                          "minimum": 100,
                          "maximum": 599
                        },
                        "cookie": {
                          "type": "string",
                          "maxLength": 256
                        },
                        "missing": {
                          "maxItems": 10,
                          "type": "array",
                          "items": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64
                          }
                        },
                        "tls": {
                          "type": "object",
                          "properties": {
                            "protocol": {
                              "type": "string",
                              "maxLength": 32
                            },
                            "cipher": {
                              "type": "string",
                              "maxLength": 64
                            },
                            "validTo": {
                              "type": "string",
                              "maxLength": 64
                            },
                            "certificateNotAfter": {
                              "type": "string",
                              "maxLength": 64
                            },
                            "daysToExpiry": {
                              "type": "number"
                            },
                            "keyType": {
                              "type": "string",
                              "maxLength": 16
                            },
                            "keyBits": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 65536
                            },
                            "errorCode": {
                              "type": "string",
                              "maxLength": 64
                            },
                            "reason": {
                              "type": "string",
                              "maxLength": 512
                            },
                            "clientMinVersion": {
                              "type": "string",
                              "maxLength": 32
                            }
                          },
                          "additionalProperties": false
                        },
                        "tlsSource": {
                          "type": "string",
                          "enum": [
                            "negotiated",
                            "handshake_refused"
                          ]
                        },
                        "ignoredValue": {
                          "type": "string",
                          "maxLength": 1024
                        },
                        "maxAge": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "urls": {
                          "maxItems": 10,
                          "type": "array",
                          "items": {
                            "type": "string",
                            "maxLength": 2048,
                            "format": "uri"
                          }
                        },
                        "count": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "sampled": {
                          "type": "boolean"
                        },
                        "observed": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "number"
                            },
                            {
                              "type": "boolean"
                            },
                            {
                              "type": "null"
                            },
                            {
                              "type": "array",
                              "items": {}
                            },
                            {
                              "type": "object",
                              "propertyNames": {
                                "type": "string"
                              },
                              "additionalProperties": {}
                            }
                          ]
                        },
                        "truncated": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "kind"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "const": "performance"
                        },
                        "metric": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 64
                        },
                        "value": {
                          "type": "number"
                        },
                        "unit": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 16
                        },
                        "threshold": {
                          "type": "number"
                        },
                        "score": {
                          "type": "number",
                          "minimum": 0,
                          "maximum": 100
                        },
                        "deviceProfile": {
                          "type": "string",
                          "maxLength": 32
                        },
                        "metrics": {
                          "maxItems": 10,
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "metric": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 64
                              },
                              "value": {
                                "type": "number"
                              },
                              "unit": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 16
                              },
                              "threshold": {
                                "type": "number"
                              },
                              "score": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 100
                              }
                            },
                            "required": [
                              "metric",
                              "value",
                              "unit"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "observed": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "number"
                            },
                            {
                              "type": "boolean"
                            },
                            {
                              "type": "null"
                            },
                            {
                              "type": "array",
                              "items": {}
                            },
                            {
                              "type": "object",
                              "propertyNames": {
                                "type": "string"
                              },
                              "additionalProperties": {}
                            }
                          ]
                        },
                        "truncated": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "kind",
                        "metric",
                        "value",
                        "unit"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "const": "accessibility"
                        },
                        "selector": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 1024
                        },
                        "htmlSnippet": {
                          "type": "string"
                        },
                        "impact": {
                          "type": "string",
                          "enum": [
                            "minor",
                            "moderate",
                            "serious",
                            "critical"
                          ]
                        },
                        "wcagTags": {
                          "minItems": 1,
                          "maxItems": 20,
                          "type": "array",
                          "items": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64
                          }
                        },
                        "nodeCount": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 9007199254740991
                        },
                        "nodes": {
                          "maxItems": 10,
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "selector": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 1024
                              },
                              "htmlSnippet": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "selector"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "impactedNodeCount": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "observed": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "number"
                            },
                            {
                              "type": "boolean"
                            },
                            {
                              "type": "null"
                            },
                            {
                              "type": "array",
                              "items": {}
                            },
                            {
                              "type": "object",
                              "propertyNames": {
                                "type": "string"
                              },
                              "additionalProperties": {}
                            }
                          ]
                        },
                        "truncated": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "kind",
                        "selector",
                        "htmlSnippet",
                        "impact",
                        "wcagTags"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "const": "seo"
                        },
                        "element": {
                          "type": "string",
                          "maxLength": 128
                        },
                        "expected": {
                          "type": "string",
                          "maxLength": 1024
                        },
                        "actual": {
                          "type": "string",
                          "maxLength": 1024
                        },
                        "location": {
                          "type": "string",
                          "maxLength": 2048
                        },
                        "observed": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "number"
                            },
                            {
                              "type": "boolean"
                            },
                            {
                              "type": "null"
                            },
                            {
                              "type": "array",
                              "items": {}
                            },
                            {
                              "type": "object",
                              "propertyNames": {
                                "type": "string"
                              },
                              "additionalProperties": {}
                            }
                          ]
                        },
                        "truncated": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "kind"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "const": "consent"
                        },
                        "scenario": {
                          "type": "string",
                          "enum": [
                            "initial",
                            "reject_all",
                            "accept_all"
                          ]
                        },
                        "cookies": {
                          "maxItems": 25,
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "name": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 256
                              },
                              "domain": {
                                "type": "string",
                                "maxLength": 253
                              },
                              "secure": {
                                "type": "boolean"
                              },
                              "httpOnly": {
                                "type": "boolean"
                              },
                              "sameSite": {
                                "type": "string",
                                "enum": [
                                  "strict",
                                  "lax",
                                  "none"
                                ]
                              },
                              "firstParty": {
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "name"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "requests": {
                          "maxItems": 25,
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "url": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 253,
                                "pattern": "^[a-z0-9.-]+$"
                              },
                              "category": {
                                "type": "string",
                                "maxLength": 64
                              }
                            },
                            "required": [
                              "url"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "cmp": {
                          "type": "object",
                          "properties": {
                            "vendor": {
                              "type": "string",
                              "maxLength": 128
                            },
                            "detected": {
                              "type": "boolean"
                            }
                          },
                          "required": [
                            "detected"
                          ],
                          "additionalProperties": false
                        },
                        "observed": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "number"
                            },
                            {
                              "type": "boolean"
                            },
                            {
                              "type": "null"
                            },
                            {
                              "type": "array",
                              "items": {}
                            },
                            {
                              "type": "object",
                              "propertyNames": {
                                "type": "string"
                              },
                              "additionalProperties": {}
                            }
                          ]
                        },
                        "truncated": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "kind",
                        "scenario"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "const": "discovery"
                        },
                        "statusCode": {
                          "type": "integer",
                          "minimum": 100,
                          "maximum": 599
                        },
                        "redirectsTo": {
                          "type": "string",
                          "maxLength": 2048,
                          "format": "uri"
                        },
                        "observed": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "number"
                            },
                            {
                              "type": "boolean"
                            },
                            {
                              "type": "null"
                            },
                            {
                              "type": "array",
                              "items": {}
                            },
                            {
                              "type": "object",
                              "propertyNames": {
                                "type": "string"
                              },
                              "additionalProperties": {}
                            }
                          ]
                        },
                        "truncated": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "kind"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "const": "generic"
                        },
                        "data": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "number"
                            },
                            {
                              "type": "boolean"
                            },
                            {
                              "type": "null"
                            },
                            {
                              "type": "array",
                              "items": {}
                            },
                            {
                              "type": "object",
                              "propertyNames": {
                                "type": "string"
                              },
                              "additionalProperties": {}
                            }
                          ]
                        },
                        "truncated": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "kind",
                        "data"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "const": "geo"
                        },
                        "element": {
                          "type": "string",
                          "maxLength": 128
                        },
                        "expected": {
                          "type": "string",
                          "maxLength": 1024
                        },
                        "actual": {
                          "type": "string",
                          "maxLength": 1024
                        },
                        "location": {
                          "type": "string",
                          "maxLength": 2048
                        },
                        "observed": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "number"
                            },
                            {
                              "type": "boolean"
                            },
                            {
                              "type": "null"
                            },
                            {
                              "type": "array",
                              "items": {}
                            },
                            {
                              "type": "object",
                              "propertyNames": {
                                "type": "string"
                              },
                              "additionalProperties": {}
                            }
                          ]
                        },
                        "truncated": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "kind"
                      ],
                      "additionalProperties": false
                    }
                  ]
                },
                "wcagCriteria": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "number": {
                        "type": "string",
                        "pattern": "^[1-4]\\.\\d\\.\\d{1,2}$"
                      },
                      "name": {
                        "type": "string"
                      },
                      "level": {
                        "type": "string",
                        "enum": [
                          "A",
                          "AA",
                          "AAA"
                        ]
                      },
                      "since": {
                        "type": "string",
                        "enum": [
                          "2.0",
                          "2.1",
                          "2.2"
                        ]
                      },
                      "removedIn": {
                        "anyOf": [
                          {
                            "type": "string",
                            "const": "2.2"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      }
                    },
                    "required": [
                      "number",
                      "name",
                      "level",
                      "since",
                      "removedIn",
                      "url"
                    ],
                    "additionalProperties": false
                  }
                },
                "artifactId": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                }
              },
              "required": [
                "id",
                "organizationId",
                "domainId",
                "scanRunId",
                "scanTaskId",
                "scanTargetId",
                "pageId",
                "url",
                "targetUrl",
                "module",
                "ruleId",
                "category",
                "severity",
                "title",
                "description",
                "recommendation",
                "fingerprint",
                "discriminator",
                "scope",
                "source",
                "confirmation",
                "status",
                "comparisonStatus",
                "changeReasons",
                "firstSeenAt",
                "lastSeenAt",
                "comparison",
                "consentScenario",
                "evidence",
                "artifactId",
                "createdAt"
              ],
              "additionalProperties": false
            }
          },
          "total": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "items",
          "total",
          "offset"
        ],
        "additionalProperties": false
      },
      "FindingRuleListResponse": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "ruleId": {
                  "type": "string"
                },
                "module": {
                  "type": "string",
                  "enum": [
                    "discovery",
                    "security_baseline",
                    "performance",
                    "seo",
                    "accessibility",
                    "consent",
                    "visual",
                    "geo"
                  ]
                },
                "findingCount": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "ruleId",
                "module",
                "findingCount"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "items"
        ],
        "additionalProperties": false
      },
      "IssueListResponse": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "ruleId": {
                  "type": "string"
                },
                "discriminator": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "title": {
                  "type": "string"
                },
                "module": {
                  "type": "string",
                  "enum": [
                    "discovery",
                    "security_baseline",
                    "performance",
                    "seo",
                    "accessibility",
                    "consent",
                    "visual",
                    "geo"
                  ]
                },
                "severity": {
                  "type": "string",
                  "enum": [
                    "info",
                    "low",
                    "medium",
                    "high",
                    "critical"
                  ]
                },
                "scope": {
                  "type": "string",
                  "enum": [
                    "page",
                    "site"
                  ]
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "open",
                    "resolved",
                    "suppressed"
                  ]
                },
                "comparisonStatus": {
                  "anyOf": [
                    {
                      "type": "string",
                      "enum": [
                        "new",
                        "persistent",
                        "changed",
                        "resolved",
                        "unscanned",
                        "incomparable"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "affectedPages": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "findingCount": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 9007199254740991
                },
                "firstSeenAt": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "lastSeenAt": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "resolvedAt": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "description": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "recommendation": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "needsVerification": {
                  "type": "boolean"
                },
                "wcagCriteria": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "number": {
                        "type": "string",
                        "pattern": "^[1-4]\\.\\d\\.\\d{1,2}$"
                      },
                      "name": {
                        "type": "string"
                      },
                      "level": {
                        "type": "string",
                        "enum": [
                          "A",
                          "AA",
                          "AAA"
                        ]
                      },
                      "since": {
                        "type": "string",
                        "enum": [
                          "2.0",
                          "2.1",
                          "2.2"
                        ]
                      },
                      "removedIn": {
                        "anyOf": [
                          {
                            "type": "string",
                            "const": "2.2"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      }
                    },
                    "required": [
                      "number",
                      "name",
                      "level",
                      "since",
                      "removedIn",
                      "url"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "required": [
                "ruleId",
                "discriminator",
                "title",
                "module",
                "severity",
                "scope",
                "status",
                "comparisonStatus",
                "affectedPages",
                "findingCount",
                "firstSeenAt",
                "lastSeenAt",
                "resolvedAt"
              ],
              "additionalProperties": false
            }
          },
          "total": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "stateLimited": {
            "type": "boolean"
          }
        },
        "required": [
          "items",
          "total"
        ],
        "additionalProperties": false
      },
      "IssuePageListResponse": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "pageId": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "url": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "findingId": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "severity": {
                  "type": "string",
                  "enum": [
                    "info",
                    "low",
                    "medium",
                    "high",
                    "critical"
                  ]
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "open",
                    "resolved",
                    "suppressed"
                  ]
                },
                "comparisonStatus": {
                  "anyOf": [
                    {
                      "type": "string",
                      "enum": [
                        "new",
                        "persistent",
                        "changed",
                        "resolved",
                        "unscanned",
                        "incomparable"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "lastSeenAt": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                }
              },
              "required": [
                "pageId",
                "url",
                "findingId",
                "severity",
                "status",
                "comparisonStatus",
                "lastSeenAt"
              ],
              "additionalProperties": false
            }
          },
          "total": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "truncated": {
            "type": "boolean"
          }
        },
        "required": [
          "items",
          "total",
          "truncated"
        ],
        "additionalProperties": false
      },
      "ConsentInventorySummaryResponse": {
        "type": "object",
        "properties": {
          "inventory": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "scanRunId": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  "scannedAt": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "pagesObserved": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "pagesPlanned": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "counts": {
                    "type": "object",
                    "properties": {
                      "trackers": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "cookies": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "storageKeys": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      }
                    },
                    "required": [
                      "trackers",
                      "cookies",
                      "storageKeys"
                    ],
                    "additionalProperties": false
                  },
                  "unclassifiedCounts": {
                    "type": "object",
                    "properties": {
                      "trackers": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "cookies": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "storageKeys": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      }
                    },
                    "required": [
                      "trackers",
                      "cookies",
                      "storageKeys"
                    ],
                    "additionalProperties": false
                  },
                  "newCounts": {
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "trackers": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          "cookies": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          "storageKeys": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          }
                        },
                        "required": [
                          "trackers",
                          "cookies",
                          "storageKeys"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "goneCounts": {
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "trackers": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          "cookies": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          "storageKeys": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          }
                        },
                        "required": [
                          "trackers",
                          "cookies",
                          "storageKeys"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "truncatedRows": {
                    "type": "object",
                    "properties": {
                      "trackers": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "cookies": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "storageKeys": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      }
                    },
                    "required": [
                      "trackers",
                      "cookies",
                      "storageKeys"
                    ],
                    "additionalProperties": false
                  },
                  "pageTruncatedRows": {
                    "type": "object",
                    "properties": {
                      "trackers": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "cookies": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "storageKeys": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      }
                    },
                    "required": [
                      "trackers",
                      "cookies",
                      "storageKeys"
                    ],
                    "additionalProperties": false
                  },
                  "redactedRows": {
                    "type": "object",
                    "properties": {
                      "trackers": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "cookies": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "storageKeys": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      }
                    },
                    "required": [
                      "trackers",
                      "cookies",
                      "storageKeys"
                    ],
                    "additionalProperties": false
                  },
                  "scenarioPagesObserved": {
                    "type": "object",
                    "properties": {
                      "initial": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "reject_all": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "accept_all": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      }
                    },
                    "required": [
                      "initial",
                      "reject_all",
                      "accept_all"
                    ],
                    "additionalProperties": false
                  },
                  "tagManagerPresent": {
                    "type": "boolean"
                  },
                  "previousScanRunId": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "samePageSet": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "classificationVersions": {
                    "maxItems": 16,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "sourceId": {
                          "type": "string",
                          "maxLength": 73,
                          "pattern": "^(?:builtin|open-cookie-database|organization|operator:[A-Za-z0-9_-]{1,64})$"
                        },
                        "version": {
                          "type": "string",
                          "maxLength": 32,
                          "pattern": "^[A-Za-z0-9][A-Za-z0-9._+-]*$"
                        }
                      },
                      "required": [
                        "sourceId",
                        "version"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "ruleSetVersion": {
                    "type": "string",
                    "maxLength": 32,
                    "pattern": "^[A-Za-z0-9][A-Za-z0-9._+-]*$"
                  }
                },
                "required": [
                  "scanRunId",
                  "scannedAt",
                  "pagesObserved",
                  "pagesPlanned",
                  "counts",
                  "unclassifiedCounts",
                  "newCounts",
                  "goneCounts",
                  "truncatedRows",
                  "pageTruncatedRows",
                  "redactedRows",
                  "scenarioPagesObserved",
                  "tagManagerPresent",
                  "previousScanRunId",
                  "samePageSet",
                  "classificationVersions",
                  "ruleSetVersion"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ]
          },
          "runs": {
            "maxItems": 20,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "scanRunId": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "scannedAt": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                }
              },
              "required": [
                "scanRunId",
                "scannedAt"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "inventory",
          "runs"
        ],
        "additionalProperties": false
      },
      "ConsentInventoryTrackerListResponse": {
        "type": "object",
        "properties": {
          "scanRunId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              {
                "type": "null"
              }
            ]
          },
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "registrableDomain": {
                  "type": "string",
                  "maxLength": 253,
                  "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$"
                },
                "classification": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "category": {
                          "type": "string",
                          "enum": [
                            "analytics",
                            "advertising",
                            "social",
                            "personalization",
                            "functional",
                            "security",
                            "infrastructure",
                            "consent_management"
                          ]
                        },
                        "essential": {
                          "type": "boolean"
                        },
                        "vendor": {
                          "type": "string",
                          "maxLength": 120,
                          "pattern": "^(?![\\s\\S]*:\\/\\/)[^\\p{C}\\p{Zl}\\p{Zp}\\\\<>]+$"
                        },
                        "classifiedBy": {
                          "type": "string",
                          "maxLength": 73,
                          "pattern": "^(?:builtin|open-cookie-database|organization|operator:[A-Za-z0-9_-]{1,64})$"
                        },
                        "classificationVersion": {
                          "type": "string",
                          "maxLength": 32,
                          "pattern": "^[A-Za-z0-9][A-Za-z0-9._+-]*$"
                        }
                      },
                      "required": [
                        "category",
                        "essential",
                        "vendor",
                        "classifiedBy",
                        "classificationVersion"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "owner": {
                  "anyOf": [
                    {
                      "type": "string",
                      "maxLength": 120,
                      "pattern": "^(?![\\s\\S]*:\\/\\/)[^\\p{C}\\p{Zl}\\p{Zp}\\\\<>]+$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "seen": {
                  "type": "object",
                  "properties": {
                    "initial": {
                      "type": "boolean"
                    },
                    "reject_all": {
                      "type": "boolean"
                    },
                    "accept_all": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "initial",
                    "reject_all",
                    "accept_all"
                  ],
                  "additionalProperties": false
                },
                "requestCount": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "resourceTypes": {
                  "maxItems": 18,
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "resourceType": {
                        "type": "string",
                        "enum": [
                          "document",
                          "stylesheet",
                          "image",
                          "media",
                          "font",
                          "script",
                          "texttrack",
                          "xhr",
                          "fetch",
                          "prefetch",
                          "eventsource",
                          "websocket",
                          "manifest",
                          "signedexchange",
                          "ping",
                          "cspviolationreport",
                          "preflight",
                          "other"
                        ]
                      },
                      "count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      }
                    },
                    "required": [
                      "resourceType",
                      "count"
                    ],
                    "additionalProperties": false
                  }
                },
                "setCookieCount": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "loadedByMarkup": {
                  "type": "boolean"
                },
                "loadedByScript": {
                  "type": "boolean"
                },
                "loadedByTagManager": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "beaconCount": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "pixelCount": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "approval": {
                  "anyOf": [
                    {
                      "type": "string",
                      "enum": [
                        "approved",
                        "not_approved"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "approvalSource": {
                  "anyOf": [
                    {
                      "type": "string",
                      "enum": [
                        "organization",
                        "site",
                        "excluded"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "pagesCount": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "examplePageIds": {
                  "maxItems": 5,
                  "type": "array",
                  "items": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  }
                },
                "newSincePrevious": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                }
              },
              "required": [
                "registrableDomain",
                "classification",
                "seen",
                "requestCount",
                "resourceTypes",
                "setCookieCount",
                "loadedByMarkup",
                "loadedByScript",
                "loadedByTagManager",
                "beaconCount",
                "pixelCount",
                "pagesCount",
                "examplePageIds",
                "newSincePrevious"
              ],
              "additionalProperties": false
            }
          },
          "total": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "scanRunId",
          "items",
          "total",
          "offset"
        ],
        "additionalProperties": false
      },
      "ConsentInventoryCookieListResponse": {
        "type": "object",
        "properties": {
          "scanRunId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              {
                "type": "null"
              }
            ]
          },
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "maxLength": 256,
                  "pattern": "^[\\x21\\x24\\x26\\x28-\\x2b\\x2d\\x2e\\x30-\\x3a\\x41-\\x5b\\x5d-\\x7e]+$"
                },
                "domain": {
                  "type": "string",
                  "maxLength": 253,
                  "pattern": "^\\.?[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
                },
                "registrableDomain": {
                  "type": "string",
                  "maxLength": 253,
                  "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$"
                },
                "firstParty": {
                  "type": "boolean"
                },
                "setBy": {
                  "type": "string",
                  "enum": [
                    "http",
                    "script",
                    "unknown"
                  ]
                },
                "lifetime": {
                  "type": "string",
                  "enum": [
                    "session",
                    "lt_1d",
                    "lt_30d",
                    "lt_13m",
                    "gte_13m"
                  ]
                },
                "maxLifetimeDays": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 36500
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "seen": {
                  "type": "object",
                  "properties": {
                    "initial": {
                      "type": "boolean"
                    },
                    "reject_all": {
                      "type": "boolean"
                    },
                    "accept_all": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "initial",
                    "reject_all",
                    "accept_all"
                  ],
                  "additionalProperties": false
                },
                "classification": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "category": {
                          "type": "string",
                          "enum": [
                            "analytics",
                            "advertising",
                            "social",
                            "personalization",
                            "functional",
                            "security",
                            "infrastructure",
                            "consent_management"
                          ]
                        },
                        "essential": {
                          "type": "boolean"
                        },
                        "vendor": {
                          "type": "string",
                          "maxLength": 120,
                          "pattern": "^(?![\\s\\S]*:\\/\\/)[^\\p{C}\\p{Zl}\\p{Zp}\\\\<>]+$"
                        },
                        "classifiedBy": {
                          "type": "string",
                          "maxLength": 73,
                          "pattern": "^(?:builtin|open-cookie-database|organization|operator:[A-Za-z0-9_-]{1,64})$"
                        },
                        "classificationVersion": {
                          "type": "string",
                          "maxLength": 32,
                          "pattern": "^[A-Za-z0-9][A-Za-z0-9._+-]*$"
                        }
                      },
                      "required": [
                        "category",
                        "essential",
                        "vendor",
                        "classifiedBy",
                        "classificationVersion"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "organizationClassification": {
                  "anyOf": [
                    {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "state": {
                              "type": "string",
                              "const": "applied"
                            },
                            "entryId": {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                            },
                            "scope": {
                              "type": "string",
                              "enum": [
                                "site",
                                "organization"
                              ]
                            },
                            "match": {
                              "type": "string",
                              "enum": [
                                "exact",
                                "prefix"
                              ]
                            },
                            "value": {
                              "type": "string",
                              "maxLength": 256,
                              "pattern": "^[\\x21\\x24\\x26\\x28-\\x2b\\x2d\\x2e\\x30-\\x3a\\x41-\\x5b\\x5d-\\x7e]+$"
                            },
                            "registrableDomain": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 253,
                                  "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$"
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "category": {
                              "type": "string",
                              "enum": [
                                "analytics",
                                "advertising",
                                "social",
                                "personalization",
                                "functional",
                                "security",
                                "infrastructure",
                                "consent_management"
                              ]
                            },
                            "essential": {
                              "type": "boolean"
                            },
                            "vendor": {
                              "type": "string",
                              "maxLength": 120,
                              "pattern": "^(?![\\s\\S]*:\\/\\/)[^\\p{C}\\p{Zl}\\p{Zp}\\\\<>]+$"
                            },
                            "classifiedAt": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "classifiedBy": {
                              "anyOf": [
                                {
                                  "type": "object",
                                  "properties": {
                                    "kind": {
                                      "type": "string",
                                      "const": "organization_member"
                                    },
                                    "id": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "format": "uuid",
                                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "displayName": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "maxLength": 200
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    }
                                  },
                                  "required": [
                                    "kind",
                                    "id",
                                    "displayName"
                                  ],
                                  "additionalProperties": false
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            }
                          },
                          "required": [
                            "state",
                            "entryId",
                            "scope",
                            "match",
                            "value",
                            "registrableDomain",
                            "category",
                            "essential",
                            "vendor",
                            "classifiedAt",
                            "classifiedBy"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "state": {
                              "type": "string",
                              "const": "pending"
                            },
                            "entryId": {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                            },
                            "scope": {
                              "type": "string",
                              "enum": [
                                "site",
                                "organization"
                              ]
                            },
                            "match": {
                              "type": "string",
                              "enum": [
                                "exact",
                                "prefix"
                              ]
                            },
                            "value": {
                              "type": "string",
                              "maxLength": 256,
                              "pattern": "^[\\x21\\x24\\x26\\x28-\\x2b\\x2d\\x2e\\x30-\\x3a\\x41-\\x5b\\x5d-\\x7e]+$"
                            },
                            "registrableDomain": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 253,
                                  "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$"
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "category": {
                              "type": "string",
                              "enum": [
                                "analytics",
                                "advertising",
                                "social",
                                "personalization",
                                "functional",
                                "security",
                                "infrastructure",
                                "consent_management"
                              ]
                            },
                            "essential": {
                              "type": "boolean"
                            },
                            "vendor": {
                              "type": "string",
                              "maxLength": 120,
                              "pattern": "^(?![\\s\\S]*:\\/\\/)[^\\p{C}\\p{Zl}\\p{Zp}\\\\<>]+$"
                            },
                            "classifiedAt": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "classifiedBy": {
                              "anyOf": [
                                {
                                  "type": "object",
                                  "properties": {
                                    "kind": {
                                      "type": "string",
                                      "const": "organization_member"
                                    },
                                    "id": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "format": "uuid",
                                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "displayName": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "maxLength": 200
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    }
                                  },
                                  "required": [
                                    "kind",
                                    "id",
                                    "displayName"
                                  ],
                                  "additionalProperties": false
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            }
                          },
                          "required": [
                            "state",
                            "entryId",
                            "scope",
                            "match",
                            "value",
                            "registrableDomain",
                            "category",
                            "essential",
                            "vendor",
                            "classifiedAt",
                            "classifiedBy"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "state": {
                              "type": "string",
                              "const": "removed"
                            }
                          },
                          "required": [
                            "state"
                          ],
                          "additionalProperties": false
                        }
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "pagesCount": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "examplePageIds": {
                  "maxItems": 5,
                  "type": "array",
                  "items": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  }
                },
                "newSincePrevious": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                }
              },
              "required": [
                "name",
                "domain",
                "registrableDomain",
                "firstParty",
                "setBy",
                "lifetime",
                "maxLifetimeDays",
                "seen",
                "classification",
                "pagesCount",
                "examplePageIds",
                "newSincePrevious"
              ],
              "additionalProperties": false
            }
          },
          "total": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "scanRunId",
          "items",
          "total",
          "offset"
        ],
        "additionalProperties": false
      },
      "ConsentInventoryStorageKeyListResponse": {
        "type": "object",
        "properties": {
          "scanRunId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              {
                "type": "null"
              }
            ]
          },
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "area": {
                  "type": "string",
                  "enum": [
                    "local",
                    "session"
                  ]
                },
                "origin": {
                  "type": "string",
                  "maxLength": 253,
                  "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
                },
                "key": {
                  "type": "string",
                  "maxLength": 256,
                  "pattern": "^[\\x21\\x24\\x26\\x28-\\x2b\\x2d\\x2e\\x30-\\x3a\\x41-\\x5b\\x5d-\\x7e]+$"
                },
                "seen": {
                  "type": "object",
                  "properties": {
                    "initial": {
                      "type": "boolean"
                    },
                    "reject_all": {
                      "type": "boolean"
                    },
                    "accept_all": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "initial",
                    "reject_all",
                    "accept_all"
                  ],
                  "additionalProperties": false
                },
                "classification": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "category": {
                          "type": "string",
                          "enum": [
                            "analytics",
                            "advertising",
                            "social",
                            "personalization",
                            "functional",
                            "security",
                            "infrastructure",
                            "consent_management"
                          ]
                        },
                        "essential": {
                          "type": "boolean"
                        },
                        "vendor": {
                          "type": "string",
                          "maxLength": 120,
                          "pattern": "^(?![\\s\\S]*:\\/\\/)[^\\p{C}\\p{Zl}\\p{Zp}\\\\<>]+$"
                        },
                        "classifiedBy": {
                          "type": "string",
                          "maxLength": 73,
                          "pattern": "^(?:builtin|open-cookie-database|organization|operator:[A-Za-z0-9_-]{1,64})$"
                        },
                        "classificationVersion": {
                          "type": "string",
                          "maxLength": 32,
                          "pattern": "^[A-Za-z0-9][A-Za-z0-9._+-]*$"
                        }
                      },
                      "required": [
                        "category",
                        "essential",
                        "vendor",
                        "classifiedBy",
                        "classificationVersion"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "organizationClassification": {
                  "anyOf": [
                    {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "state": {
                              "type": "string",
                              "const": "applied"
                            },
                            "entryId": {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                            },
                            "scope": {
                              "type": "string",
                              "enum": [
                                "site",
                                "organization"
                              ]
                            },
                            "match": {
                              "type": "string",
                              "enum": [
                                "exact",
                                "prefix"
                              ]
                            },
                            "value": {
                              "type": "string",
                              "maxLength": 256,
                              "pattern": "^[\\x21\\x24\\x26\\x28-\\x2b\\x2d\\x2e\\x30-\\x3a\\x41-\\x5b\\x5d-\\x7e]+$"
                            },
                            "registrableDomain": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 253,
                                  "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$"
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "category": {
                              "type": "string",
                              "enum": [
                                "analytics",
                                "advertising",
                                "social",
                                "personalization",
                                "functional",
                                "security",
                                "infrastructure",
                                "consent_management"
                              ]
                            },
                            "essential": {
                              "type": "boolean"
                            },
                            "vendor": {
                              "type": "string",
                              "maxLength": 120,
                              "pattern": "^(?![\\s\\S]*:\\/\\/)[^\\p{C}\\p{Zl}\\p{Zp}\\\\<>]+$"
                            },
                            "classifiedAt": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "classifiedBy": {
                              "anyOf": [
                                {
                                  "type": "object",
                                  "properties": {
                                    "kind": {
                                      "type": "string",
                                      "const": "organization_member"
                                    },
                                    "id": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "format": "uuid",
                                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "displayName": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "maxLength": 200
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    }
                                  },
                                  "required": [
                                    "kind",
                                    "id",
                                    "displayName"
                                  ],
                                  "additionalProperties": false
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            }
                          },
                          "required": [
                            "state",
                            "entryId",
                            "scope",
                            "match",
                            "value",
                            "registrableDomain",
                            "category",
                            "essential",
                            "vendor",
                            "classifiedAt",
                            "classifiedBy"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "state": {
                              "type": "string",
                              "const": "pending"
                            },
                            "entryId": {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                            },
                            "scope": {
                              "type": "string",
                              "enum": [
                                "site",
                                "organization"
                              ]
                            },
                            "match": {
                              "type": "string",
                              "enum": [
                                "exact",
                                "prefix"
                              ]
                            },
                            "value": {
                              "type": "string",
                              "maxLength": 256,
                              "pattern": "^[\\x21\\x24\\x26\\x28-\\x2b\\x2d\\x2e\\x30-\\x3a\\x41-\\x5b\\x5d-\\x7e]+$"
                            },
                            "registrableDomain": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 253,
                                  "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$"
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "category": {
                              "type": "string",
                              "enum": [
                                "analytics",
                                "advertising",
                                "social",
                                "personalization",
                                "functional",
                                "security",
                                "infrastructure",
                                "consent_management"
                              ]
                            },
                            "essential": {
                              "type": "boolean"
                            },
                            "vendor": {
                              "type": "string",
                              "maxLength": 120,
                              "pattern": "^(?![\\s\\S]*:\\/\\/)[^\\p{C}\\p{Zl}\\p{Zp}\\\\<>]+$"
                            },
                            "classifiedAt": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "classifiedBy": {
                              "anyOf": [
                                {
                                  "type": "object",
                                  "properties": {
                                    "kind": {
                                      "type": "string",
                                      "const": "organization_member"
                                    },
                                    "id": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "format": "uuid",
                                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "displayName": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "maxLength": 200
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    }
                                  },
                                  "required": [
                                    "kind",
                                    "id",
                                    "displayName"
                                  ],
                                  "additionalProperties": false
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            }
                          },
                          "required": [
                            "state",
                            "entryId",
                            "scope",
                            "match",
                            "value",
                            "registrableDomain",
                            "category",
                            "essential",
                            "vendor",
                            "classifiedAt",
                            "classifiedBy"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "state": {
                              "type": "string",
                              "const": "removed"
                            }
                          },
                          "required": [
                            "state"
                          ],
                          "additionalProperties": false
                        }
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "pagesCount": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "examplePageIds": {
                  "maxItems": 5,
                  "type": "array",
                  "items": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  }
                },
                "newSincePrevious": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                }
              },
              "required": [
                "area",
                "origin",
                "key",
                "seen",
                "classification",
                "pagesCount",
                "examplePageIds",
                "newSincePrevious"
              ],
              "additionalProperties": false
            }
          },
          "total": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "scanRunId",
          "items",
          "total",
          "offset"
        ],
        "additionalProperties": false
      },
      "ConsentInventoryOrganizationTrackerListResponse": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "registrableDomain": {
                  "type": "string",
                  "maxLength": 253,
                  "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$"
                },
                "classification": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "category": {
                          "type": "string",
                          "enum": [
                            "analytics",
                            "advertising",
                            "social",
                            "personalization",
                            "functional",
                            "security",
                            "infrastructure",
                            "consent_management"
                          ]
                        },
                        "essential": {
                          "type": "boolean"
                        },
                        "vendor": {
                          "type": "string",
                          "maxLength": 120,
                          "pattern": "^(?![\\s\\S]*:\\/\\/)[^\\p{C}\\p{Zl}\\p{Zp}\\\\<>]+$"
                        },
                        "classifiedBy": {
                          "type": "string",
                          "maxLength": 73,
                          "pattern": "^(?:builtin|open-cookie-database|organization|operator:[A-Za-z0-9_-]{1,64})$"
                        },
                        "classificationVersion": {
                          "type": "string",
                          "maxLength": 32,
                          "pattern": "^[A-Za-z0-9][A-Za-z0-9._+-]*$"
                        }
                      },
                      "required": [
                        "category",
                        "essential",
                        "vendor",
                        "classifiedBy",
                        "classificationVersion"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "owner": {
                  "anyOf": [
                    {
                      "type": "string",
                      "maxLength": 120,
                      "pattern": "^(?![\\s\\S]*:\\/\\/)[^\\p{C}\\p{Zl}\\p{Zp}\\\\<>]+$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "seen": {
                  "type": "object",
                  "properties": {
                    "initial": {
                      "type": "boolean"
                    },
                    "reject_all": {
                      "type": "boolean"
                    },
                    "accept_all": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "initial",
                    "reject_all",
                    "accept_all"
                  ],
                  "additionalProperties": false
                },
                "requestCount": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "approval": {
                  "anyOf": [
                    {
                      "type": "string",
                      "enum": [
                        "approved",
                        "not_approved"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "unapprovedSitesCount": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "sitesCount": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "newOnSitesCount": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "pagesCount": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "exampleSites": {
                  "maxItems": 5,
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "siteId": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      "hostname": {
                        "type": "string",
                        "maxLength": 253,
                        "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
                      }
                    },
                    "required": [
                      "siteId",
                      "hostname"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "required": [
                "registrableDomain",
                "classification",
                "seen",
                "requestCount",
                "sitesCount",
                "newOnSitesCount",
                "pagesCount",
                "exampleSites"
              ],
              "additionalProperties": false
            }
          },
          "total": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "sitesCovered": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "sitesWithoutInventory": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "sitesWithoutInventoryIds": {
            "maxItems": 200,
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            }
          },
          "scenarioSitesObserved": {
            "type": "object",
            "properties": {
              "initial": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "reject_all": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "accept_all": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "initial",
              "reject_all",
              "accept_all"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "items",
          "total",
          "offset",
          "sitesCovered",
          "sitesWithoutInventory",
          "sitesWithoutInventoryIds",
          "scenarioSitesObserved"
        ],
        "additionalProperties": false
      },
      "ConsentInventoryOrganizationCookieListResponse": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "maxLength": 256,
                  "pattern": "^[\\x21\\x24\\x26\\x28-\\x2b\\x2d\\x2e\\x30-\\x3a\\x41-\\x5b\\x5d-\\x7e]+$"
                },
                "domain": {
                  "type": "string",
                  "maxLength": 253,
                  "pattern": "^\\.?[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
                },
                "registrableDomain": {
                  "type": "string",
                  "maxLength": 253,
                  "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$"
                },
                "firstParty": {
                  "type": "boolean"
                },
                "setBy": {
                  "type": "string",
                  "enum": [
                    "http",
                    "script",
                    "unknown"
                  ]
                },
                "lifetime": {
                  "type": "string",
                  "enum": [
                    "session",
                    "lt_1d",
                    "lt_30d",
                    "lt_13m",
                    "gte_13m"
                  ]
                },
                "maxLifetimeDays": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 36500
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "seen": {
                  "type": "object",
                  "properties": {
                    "initial": {
                      "type": "boolean"
                    },
                    "reject_all": {
                      "type": "boolean"
                    },
                    "accept_all": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "initial",
                    "reject_all",
                    "accept_all"
                  ],
                  "additionalProperties": false
                },
                "classification": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "category": {
                          "type": "string",
                          "enum": [
                            "analytics",
                            "advertising",
                            "social",
                            "personalization",
                            "functional",
                            "security",
                            "infrastructure",
                            "consent_management"
                          ]
                        },
                        "essential": {
                          "type": "boolean"
                        },
                        "vendor": {
                          "type": "string",
                          "maxLength": 120,
                          "pattern": "^(?![\\s\\S]*:\\/\\/)[^\\p{C}\\p{Zl}\\p{Zp}\\\\<>]+$"
                        },
                        "classifiedBy": {
                          "type": "string",
                          "maxLength": 73,
                          "pattern": "^(?:builtin|open-cookie-database|organization|operator:[A-Za-z0-9_-]{1,64})$"
                        },
                        "classificationVersion": {
                          "type": "string",
                          "maxLength": 32,
                          "pattern": "^[A-Za-z0-9][A-Za-z0-9._+-]*$"
                        }
                      },
                      "required": [
                        "category",
                        "essential",
                        "vendor",
                        "classifiedBy",
                        "classificationVersion"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "organizationClassification": {
                  "anyOf": [
                    {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "state": {
                              "type": "string",
                              "const": "applied"
                            },
                            "entryId": {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                            },
                            "scope": {
                              "type": "string",
                              "enum": [
                                "site",
                                "organization"
                              ]
                            },
                            "match": {
                              "type": "string",
                              "enum": [
                                "exact",
                                "prefix"
                              ]
                            },
                            "value": {
                              "type": "string",
                              "maxLength": 256,
                              "pattern": "^[\\x21\\x24\\x26\\x28-\\x2b\\x2d\\x2e\\x30-\\x3a\\x41-\\x5b\\x5d-\\x7e]+$"
                            },
                            "registrableDomain": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 253,
                                  "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$"
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "category": {
                              "type": "string",
                              "enum": [
                                "analytics",
                                "advertising",
                                "social",
                                "personalization",
                                "functional",
                                "security",
                                "infrastructure",
                                "consent_management"
                              ]
                            },
                            "essential": {
                              "type": "boolean"
                            },
                            "vendor": {
                              "type": "string",
                              "maxLength": 120,
                              "pattern": "^(?![\\s\\S]*:\\/\\/)[^\\p{C}\\p{Zl}\\p{Zp}\\\\<>]+$"
                            },
                            "classifiedAt": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "classifiedBy": {
                              "anyOf": [
                                {
                                  "type": "object",
                                  "properties": {
                                    "kind": {
                                      "type": "string",
                                      "const": "organization_member"
                                    },
                                    "id": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "format": "uuid",
                                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "displayName": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "maxLength": 200
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    }
                                  },
                                  "required": [
                                    "kind",
                                    "id",
                                    "displayName"
                                  ],
                                  "additionalProperties": false
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            }
                          },
                          "required": [
                            "state",
                            "entryId",
                            "scope",
                            "match",
                            "value",
                            "registrableDomain",
                            "category",
                            "essential",
                            "vendor",
                            "classifiedAt",
                            "classifiedBy"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "state": {
                              "type": "string",
                              "const": "pending"
                            },
                            "entryId": {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                            },
                            "scope": {
                              "type": "string",
                              "enum": [
                                "site",
                                "organization"
                              ]
                            },
                            "match": {
                              "type": "string",
                              "enum": [
                                "exact",
                                "prefix"
                              ]
                            },
                            "value": {
                              "type": "string",
                              "maxLength": 256,
                              "pattern": "^[\\x21\\x24\\x26\\x28-\\x2b\\x2d\\x2e\\x30-\\x3a\\x41-\\x5b\\x5d-\\x7e]+$"
                            },
                            "registrableDomain": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 253,
                                  "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$"
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "category": {
                              "type": "string",
                              "enum": [
                                "analytics",
                                "advertising",
                                "social",
                                "personalization",
                                "functional",
                                "security",
                                "infrastructure",
                                "consent_management"
                              ]
                            },
                            "essential": {
                              "type": "boolean"
                            },
                            "vendor": {
                              "type": "string",
                              "maxLength": 120,
                              "pattern": "^(?![\\s\\S]*:\\/\\/)[^\\p{C}\\p{Zl}\\p{Zp}\\\\<>]+$"
                            },
                            "classifiedAt": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "classifiedBy": {
                              "anyOf": [
                                {
                                  "type": "object",
                                  "properties": {
                                    "kind": {
                                      "type": "string",
                                      "const": "organization_member"
                                    },
                                    "id": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "format": "uuid",
                                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "displayName": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "maxLength": 200
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    }
                                  },
                                  "required": [
                                    "kind",
                                    "id",
                                    "displayName"
                                  ],
                                  "additionalProperties": false
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            }
                          },
                          "required": [
                            "state",
                            "entryId",
                            "scope",
                            "match",
                            "value",
                            "registrableDomain",
                            "category",
                            "essential",
                            "vendor",
                            "classifiedAt",
                            "classifiedBy"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "state": {
                              "type": "string",
                              "const": "removed"
                            }
                          },
                          "required": [
                            "state"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "state": {
                              "type": "string",
                              "const": "differs_by_site"
                            },
                            "sites": {
                              "type": "integer",
                              "minimum": 2,
                              "maximum": 9007199254740991
                            }
                          },
                          "required": [
                            "state",
                            "sites"
                          ],
                          "additionalProperties": false
                        }
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "sitesCount": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "newOnSitesCount": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "pagesCount": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "exampleSites": {
                  "maxItems": 5,
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "siteId": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      "hostname": {
                        "type": "string",
                        "maxLength": 253,
                        "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
                      }
                    },
                    "required": [
                      "siteId",
                      "hostname"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "required": [
                "name",
                "domain",
                "registrableDomain",
                "firstParty",
                "setBy",
                "lifetime",
                "maxLifetimeDays",
                "seen",
                "classification",
                "sitesCount",
                "newOnSitesCount",
                "pagesCount",
                "exampleSites"
              ],
              "additionalProperties": false
            }
          },
          "total": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "sitesCovered": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "sitesWithoutInventory": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "sitesWithoutInventoryIds": {
            "maxItems": 200,
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            }
          },
          "scenarioSitesObserved": {
            "type": "object",
            "properties": {
              "initial": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "reject_all": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "accept_all": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "initial",
              "reject_all",
              "accept_all"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "items",
          "total",
          "offset",
          "sitesCovered",
          "sitesWithoutInventory",
          "sitesWithoutInventoryIds",
          "scenarioSitesObserved"
        ],
        "additionalProperties": false
      },
      "ConsentInventoryOrganizationTrackerSiteListResponse": {
        "type": "object",
        "properties": {
          "items": {
            "maxItems": 200,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "siteId": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "hostname": {
                  "type": "string",
                  "maxLength": 253,
                  "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
                },
                "scanRunId": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "lastSeenAt": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "seen": {
                  "type": "object",
                  "properties": {
                    "initial": {
                      "type": "boolean"
                    },
                    "reject_all": {
                      "type": "boolean"
                    },
                    "accept_all": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "initial",
                    "reject_all",
                    "accept_all"
                  ],
                  "additionalProperties": false
                },
                "scenarioChecked": {
                  "type": "object",
                  "properties": {
                    "initial": {
                      "type": "boolean"
                    },
                    "reject_all": {
                      "type": "boolean"
                    },
                    "accept_all": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "initial",
                    "reject_all",
                    "accept_all"
                  ],
                  "additionalProperties": false
                },
                "pagesCount": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "newSincePrevious": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "classification": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "category": {
                          "type": "string",
                          "enum": [
                            "analytics",
                            "advertising",
                            "social",
                            "personalization",
                            "functional",
                            "security",
                            "infrastructure",
                            "consent_management"
                          ]
                        },
                        "essential": {
                          "type": "boolean"
                        },
                        "vendor": {
                          "type": "string",
                          "maxLength": 120,
                          "pattern": "^(?![\\s\\S]*:\\/\\/)[^\\p{C}\\p{Zl}\\p{Zp}\\\\<>]+$"
                        },
                        "classifiedBy": {
                          "type": "string",
                          "maxLength": 73,
                          "pattern": "^(?:builtin|open-cookie-database|organization|operator:[A-Za-z0-9_-]{1,64})$"
                        },
                        "classificationVersion": {
                          "type": "string",
                          "maxLength": 32,
                          "pattern": "^[A-Za-z0-9][A-Za-z0-9._+-]*$"
                        }
                      },
                      "required": [
                        "category",
                        "essential",
                        "vendor",
                        "classifiedBy",
                        "classificationVersion"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "requestCount": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "owner": {
                  "anyOf": [
                    {
                      "type": "string",
                      "maxLength": 120,
                      "pattern": "^(?![\\s\\S]*:\\/\\/)[^\\p{C}\\p{Zl}\\p{Zp}\\\\<>]+$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "approval": {
                  "anyOf": [
                    {
                      "type": "string",
                      "enum": [
                        "approved",
                        "not_approved"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "approvalSource": {
                  "anyOf": [
                    {
                      "type": "string",
                      "enum": [
                        "organization",
                        "site",
                        "excluded"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "siteId",
                "hostname",
                "scanRunId",
                "lastSeenAt",
                "seen",
                "scenarioChecked",
                "pagesCount",
                "newSincePrevious",
                "classification",
                "requestCount"
              ],
              "additionalProperties": false
            }
          },
          "total": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "nextCursor": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "items",
          "total",
          "nextCursor"
        ],
        "additionalProperties": false
      },
      "ConsentInventoryOrganizationCookieSiteListResponse": {
        "type": "object",
        "properties": {
          "items": {
            "maxItems": 200,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "siteId": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "hostname": {
                  "type": "string",
                  "maxLength": 253,
                  "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$"
                },
                "scanRunId": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "lastSeenAt": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "seen": {
                  "type": "object",
                  "properties": {
                    "initial": {
                      "type": "boolean"
                    },
                    "reject_all": {
                      "type": "boolean"
                    },
                    "accept_all": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "initial",
                    "reject_all",
                    "accept_all"
                  ],
                  "additionalProperties": false
                },
                "scenarioChecked": {
                  "type": "object",
                  "properties": {
                    "initial": {
                      "type": "boolean"
                    },
                    "reject_all": {
                      "type": "boolean"
                    },
                    "accept_all": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "initial",
                    "reject_all",
                    "accept_all"
                  ],
                  "additionalProperties": false
                },
                "pagesCount": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "newSincePrevious": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "classification": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "category": {
                          "type": "string",
                          "enum": [
                            "analytics",
                            "advertising",
                            "social",
                            "personalization",
                            "functional",
                            "security",
                            "infrastructure",
                            "consent_management"
                          ]
                        },
                        "essential": {
                          "type": "boolean"
                        },
                        "vendor": {
                          "type": "string",
                          "maxLength": 120,
                          "pattern": "^(?![\\s\\S]*:\\/\\/)[^\\p{C}\\p{Zl}\\p{Zp}\\\\<>]+$"
                        },
                        "classifiedBy": {
                          "type": "string",
                          "maxLength": 73,
                          "pattern": "^(?:builtin|open-cookie-database|organization|operator:[A-Za-z0-9_-]{1,64})$"
                        },
                        "classificationVersion": {
                          "type": "string",
                          "maxLength": 32,
                          "pattern": "^[A-Za-z0-9][A-Za-z0-9._+-]*$"
                        }
                      },
                      "required": [
                        "category",
                        "essential",
                        "vendor",
                        "classifiedBy",
                        "classificationVersion"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "setBy": {
                  "type": "string",
                  "enum": [
                    "http",
                    "script",
                    "unknown"
                  ]
                },
                "lifetime": {
                  "type": "string",
                  "enum": [
                    "session",
                    "lt_1d",
                    "lt_30d",
                    "lt_13m",
                    "gte_13m"
                  ]
                },
                "maxLifetimeDays": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 36500
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "organizationClassification": {
                  "anyOf": [
                    {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "state": {
                              "type": "string",
                              "const": "applied"
                            },
                            "entryId": {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                            },
                            "scope": {
                              "type": "string",
                              "enum": [
                                "site",
                                "organization"
                              ]
                            },
                            "match": {
                              "type": "string",
                              "enum": [
                                "exact",
                                "prefix"
                              ]
                            },
                            "value": {
                              "type": "string",
                              "maxLength": 256,
                              "pattern": "^[\\x21\\x24\\x26\\x28-\\x2b\\x2d\\x2e\\x30-\\x3a\\x41-\\x5b\\x5d-\\x7e]+$"
                            },
                            "registrableDomain": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 253,
                                  "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$"
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "category": {
                              "type": "string",
                              "enum": [
                                "analytics",
                                "advertising",
                                "social",
                                "personalization",
                                "functional",
                                "security",
                                "infrastructure",
                                "consent_management"
                              ]
                            },
                            "essential": {
                              "type": "boolean"
                            },
                            "vendor": {
                              "type": "string",
                              "maxLength": 120,
                              "pattern": "^(?![\\s\\S]*:\\/\\/)[^\\p{C}\\p{Zl}\\p{Zp}\\\\<>]+$"
                            },
                            "classifiedAt": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "classifiedBy": {
                              "anyOf": [
                                {
                                  "type": "object",
                                  "properties": {
                                    "kind": {
                                      "type": "string",
                                      "const": "organization_member"
                                    },
                                    "id": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "format": "uuid",
                                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "displayName": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "maxLength": 200
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    }
                                  },
                                  "required": [
                                    "kind",
                                    "id",
                                    "displayName"
                                  ],
                                  "additionalProperties": false
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            }
                          },
                          "required": [
                            "state",
                            "entryId",
                            "scope",
                            "match",
                            "value",
                            "registrableDomain",
                            "category",
                            "essential",
                            "vendor",
                            "classifiedAt",
                            "classifiedBy"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "state": {
                              "type": "string",
                              "const": "pending"
                            },
                            "entryId": {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                            },
                            "scope": {
                              "type": "string",
                              "enum": [
                                "site",
                                "organization"
                              ]
                            },
                            "match": {
                              "type": "string",
                              "enum": [
                                "exact",
                                "prefix"
                              ]
                            },
                            "value": {
                              "type": "string",
                              "maxLength": 256,
                              "pattern": "^[\\x21\\x24\\x26\\x28-\\x2b\\x2d\\x2e\\x30-\\x3a\\x41-\\x5b\\x5d-\\x7e]+$"
                            },
                            "registrableDomain": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 253,
                                  "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$"
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "category": {
                              "type": "string",
                              "enum": [
                                "analytics",
                                "advertising",
                                "social",
                                "personalization",
                                "functional",
                                "security",
                                "infrastructure",
                                "consent_management"
                              ]
                            },
                            "essential": {
                              "type": "boolean"
                            },
                            "vendor": {
                              "type": "string",
                              "maxLength": 120,
                              "pattern": "^(?![\\s\\S]*:\\/\\/)[^\\p{C}\\p{Zl}\\p{Zp}\\\\<>]+$"
                            },
                            "classifiedAt": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "classifiedBy": {
                              "anyOf": [
                                {
                                  "type": "object",
                                  "properties": {
                                    "kind": {
                                      "type": "string",
                                      "const": "organization_member"
                                    },
                                    "id": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "format": "uuid",
                                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "displayName": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "maxLength": 200
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    }
                                  },
                                  "required": [
                                    "kind",
                                    "id",
                                    "displayName"
                                  ],
                                  "additionalProperties": false
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            }
                          },
                          "required": [
                            "state",
                            "entryId",
                            "scope",
                            "match",
                            "value",
                            "registrableDomain",
                            "category",
                            "essential",
                            "vendor",
                            "classifiedAt",
                            "classifiedBy"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "state": {
                              "type": "string",
                              "const": "removed"
                            }
                          },
                          "required": [
                            "state"
                          ],
                          "additionalProperties": false
                        }
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "siteId",
                "hostname",
                "scanRunId",
                "lastSeenAt",
                "seen",
                "scenarioChecked",
                "pagesCount",
                "newSincePrevious",
                "classification",
                "setBy",
                "lifetime",
                "maxLifetimeDays"
              ],
              "additionalProperties": false
            }
          },
          "total": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "nextCursor": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "items",
          "total",
          "nextCursor"
        ],
        "additionalProperties": false
      },
      "ConsentSignalsResponse": {
        "type": "object",
        "properties": {
          "rows": {
            "maxItems": 100,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "pageId": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "normalizedUrl": {
                  "type": "string",
                  "maxLength": 2048,
                  "format": "uri"
                },
                "scenarios": {
                  "type": "object",
                  "properties": {
                    "initial": {
                      "type": "object",
                      "properties": {
                        "status": {
                          "type": "string",
                          "enum": [
                            "observed",
                            "not_performed"
                          ]
                        },
                        "reason": {
                          "type": "string",
                          "enum": [
                            "no_cmp_detected",
                            "control_not_found",
                            "interaction_failed",
                            "timeout",
                            "unsupported",
                            "not_shown"
                          ]
                        },
                        "tcf": {
                          "type": "object",
                          "properties": {
                            "api": {
                              "type": "string",
                              "enum": [
                                "absent",
                                "present",
                                "no_answer"
                              ]
                            },
                            "gdprApplies": {
                              "type": [
                                "boolean",
                                "null"
                              ]
                            },
                            "cmpId": {
                              "anyOf": [
                                {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 4095
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "string": {
                              "type": "string",
                              "enum": [
                                "absent",
                                "decoded",
                                "invalid",
                                "too_long"
                              ]
                            },
                            "decoded": {
                              "type": "object",
                              "properties": {
                                "policyVersion": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 63
                                },
                                "purposesConsent": {
                                  "maxItems": 24,
                                  "type": "array",
                                  "items": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 24
                                  }
                                },
                                "purposesLI": {
                                  "maxItems": 24,
                                  "type": "array",
                                  "items": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 24
                                  }
                                },
                                "specialFeatures": {
                                  "maxItems": 12,
                                  "type": "array",
                                  "items": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 12
                                  }
                                },
                                "vendorConsentCount": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 65535
                                },
                                "vendorLICount": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 65535
                                },
                                "publisherRestrictionCount": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 100000
                                },
                                "stringDigest": {
                                  "type": "string",
                                  "maxLength": 16,
                                  "pattern": "^[0-9a-f]{16}$"
                                },
                                "knownVendors": {
                                  "type": "object",
                                  "properties": {
                                    "consent": {
                                      "maxItems": 40,
                                      "type": "array",
                                      "items": {
                                        "type": "integer",
                                        "minimum": 1,
                                        "maximum": 65535
                                      }
                                    },
                                    "li": {
                                      "maxItems": 40,
                                      "type": "array",
                                      "items": {
                                        "type": "integer",
                                        "minimum": 1,
                                        "maximum": 65535
                                      }
                                    },
                                    "contacted": {
                                      "maxItems": 40,
                                      "type": "array",
                                      "items": {
                                        "type": "integer",
                                        "minimum": 1,
                                        "maximum": 65535
                                      }
                                    }
                                  },
                                  "required": [
                                    "consent",
                                    "li",
                                    "contacted"
                                  ],
                                  "additionalProperties": false
                                },
                                "knownVendorsTruncated": {
                                  "type": "boolean",
                                  "const": true
                                }
                              },
                              "required": [
                                "policyVersion",
                                "purposesConsent",
                                "purposesLI",
                                "specialFeatures",
                                "vendorConsentCount",
                                "vendorLICount",
                                "publisherRestrictionCount",
                                "stringDigest",
                                "knownVendors"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "api",
                            "gdprApplies",
                            "cmpId",
                            "string"
                          ],
                          "additionalProperties": false
                        },
                        "consentMode": {
                          "type": "object",
                          "properties": {
                            "googleRequests": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "firstGrantedSequence": {
                              "anyOf": [
                                {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 1000000
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "states": {
                              "type": "object",
                              "properties": {
                                "ad_storage": {
                                  "type": "object",
                                  "properties": {
                                    "default": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    },
                                    "update": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    },
                                    "sent": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    }
                                  },
                                  "required": [
                                    "default",
                                    "update",
                                    "sent"
                                  ],
                                  "additionalProperties": false
                                },
                                "analytics_storage": {
                                  "type": "object",
                                  "properties": {
                                    "default": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    },
                                    "update": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    },
                                    "sent": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    }
                                  },
                                  "required": [
                                    "default",
                                    "update",
                                    "sent"
                                  ],
                                  "additionalProperties": false
                                },
                                "ad_user_data": {
                                  "type": "object",
                                  "properties": {
                                    "default": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    },
                                    "update": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    },
                                    "sent": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    }
                                  },
                                  "required": [
                                    "default",
                                    "update",
                                    "sent"
                                  ],
                                  "additionalProperties": false
                                },
                                "ad_personalization": {
                                  "type": "object",
                                  "properties": {
                                    "default": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    },
                                    "update": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    },
                                    "sent": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    }
                                  },
                                  "required": [
                                    "default",
                                    "update",
                                    "sent"
                                  ],
                                  "additionalProperties": false
                                }
                              },
                              "required": [
                                "ad_storage",
                                "analytics_storage",
                                "ad_user_data",
                                "ad_personalization"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "googleRequests",
                            "firstGrantedSequence",
                            "states"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "required": [
                        "status"
                      ],
                      "additionalProperties": false
                    },
                    "reject_all": {
                      "type": "object",
                      "properties": {
                        "status": {
                          "type": "string",
                          "enum": [
                            "observed",
                            "not_performed"
                          ]
                        },
                        "reason": {
                          "type": "string",
                          "enum": [
                            "no_cmp_detected",
                            "control_not_found",
                            "interaction_failed",
                            "timeout",
                            "unsupported",
                            "not_shown"
                          ]
                        },
                        "tcf": {
                          "type": "object",
                          "properties": {
                            "api": {
                              "type": "string",
                              "enum": [
                                "absent",
                                "present",
                                "no_answer"
                              ]
                            },
                            "gdprApplies": {
                              "type": [
                                "boolean",
                                "null"
                              ]
                            },
                            "cmpId": {
                              "anyOf": [
                                {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 4095
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "string": {
                              "type": "string",
                              "enum": [
                                "absent",
                                "decoded",
                                "invalid",
                                "too_long"
                              ]
                            },
                            "decoded": {
                              "type": "object",
                              "properties": {
                                "policyVersion": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 63
                                },
                                "purposesConsent": {
                                  "maxItems": 24,
                                  "type": "array",
                                  "items": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 24
                                  }
                                },
                                "purposesLI": {
                                  "maxItems": 24,
                                  "type": "array",
                                  "items": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 24
                                  }
                                },
                                "specialFeatures": {
                                  "maxItems": 12,
                                  "type": "array",
                                  "items": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 12
                                  }
                                },
                                "vendorConsentCount": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 65535
                                },
                                "vendorLICount": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 65535
                                },
                                "publisherRestrictionCount": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 100000
                                },
                                "stringDigest": {
                                  "type": "string",
                                  "maxLength": 16,
                                  "pattern": "^[0-9a-f]{16}$"
                                },
                                "knownVendors": {
                                  "type": "object",
                                  "properties": {
                                    "consent": {
                                      "maxItems": 40,
                                      "type": "array",
                                      "items": {
                                        "type": "integer",
                                        "minimum": 1,
                                        "maximum": 65535
                                      }
                                    },
                                    "li": {
                                      "maxItems": 40,
                                      "type": "array",
                                      "items": {
                                        "type": "integer",
                                        "minimum": 1,
                                        "maximum": 65535
                                      }
                                    },
                                    "contacted": {
                                      "maxItems": 40,
                                      "type": "array",
                                      "items": {
                                        "type": "integer",
                                        "minimum": 1,
                                        "maximum": 65535
                                      }
                                    }
                                  },
                                  "required": [
                                    "consent",
                                    "li",
                                    "contacted"
                                  ],
                                  "additionalProperties": false
                                },
                                "knownVendorsTruncated": {
                                  "type": "boolean",
                                  "const": true
                                }
                              },
                              "required": [
                                "policyVersion",
                                "purposesConsent",
                                "purposesLI",
                                "specialFeatures",
                                "vendorConsentCount",
                                "vendorLICount",
                                "publisherRestrictionCount",
                                "stringDigest",
                                "knownVendors"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "api",
                            "gdprApplies",
                            "cmpId",
                            "string"
                          ],
                          "additionalProperties": false
                        },
                        "consentMode": {
                          "type": "object",
                          "properties": {
                            "googleRequests": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "firstGrantedSequence": {
                              "anyOf": [
                                {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 1000000
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "states": {
                              "type": "object",
                              "properties": {
                                "ad_storage": {
                                  "type": "object",
                                  "properties": {
                                    "default": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    },
                                    "update": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    },
                                    "sent": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    }
                                  },
                                  "required": [
                                    "default",
                                    "update",
                                    "sent"
                                  ],
                                  "additionalProperties": false
                                },
                                "analytics_storage": {
                                  "type": "object",
                                  "properties": {
                                    "default": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    },
                                    "update": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    },
                                    "sent": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    }
                                  },
                                  "required": [
                                    "default",
                                    "update",
                                    "sent"
                                  ],
                                  "additionalProperties": false
                                },
                                "ad_user_data": {
                                  "type": "object",
                                  "properties": {
                                    "default": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    },
                                    "update": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    },
                                    "sent": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    }
                                  },
                                  "required": [
                                    "default",
                                    "update",
                                    "sent"
                                  ],
                                  "additionalProperties": false
                                },
                                "ad_personalization": {
                                  "type": "object",
                                  "properties": {
                                    "default": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    },
                                    "update": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    },
                                    "sent": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    }
                                  },
                                  "required": [
                                    "default",
                                    "update",
                                    "sent"
                                  ],
                                  "additionalProperties": false
                                }
                              },
                              "required": [
                                "ad_storage",
                                "analytics_storage",
                                "ad_user_data",
                                "ad_personalization"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "googleRequests",
                            "firstGrantedSequence",
                            "states"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "required": [
                        "status"
                      ],
                      "additionalProperties": false
                    },
                    "accept_all": {
                      "type": "object",
                      "properties": {
                        "status": {
                          "type": "string",
                          "enum": [
                            "observed",
                            "not_performed"
                          ]
                        },
                        "reason": {
                          "type": "string",
                          "enum": [
                            "no_cmp_detected",
                            "control_not_found",
                            "interaction_failed",
                            "timeout",
                            "unsupported",
                            "not_shown"
                          ]
                        },
                        "tcf": {
                          "type": "object",
                          "properties": {
                            "api": {
                              "type": "string",
                              "enum": [
                                "absent",
                                "present",
                                "no_answer"
                              ]
                            },
                            "gdprApplies": {
                              "type": [
                                "boolean",
                                "null"
                              ]
                            },
                            "cmpId": {
                              "anyOf": [
                                {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 4095
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "string": {
                              "type": "string",
                              "enum": [
                                "absent",
                                "decoded",
                                "invalid",
                                "too_long"
                              ]
                            },
                            "decoded": {
                              "type": "object",
                              "properties": {
                                "policyVersion": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 63
                                },
                                "purposesConsent": {
                                  "maxItems": 24,
                                  "type": "array",
                                  "items": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 24
                                  }
                                },
                                "purposesLI": {
                                  "maxItems": 24,
                                  "type": "array",
                                  "items": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 24
                                  }
                                },
                                "specialFeatures": {
                                  "maxItems": 12,
                                  "type": "array",
                                  "items": {
                                    "type": "integer",
                                    "minimum": 1,
                                    "maximum": 12
                                  }
                                },
                                "vendorConsentCount": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 65535
                                },
                                "vendorLICount": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 65535
                                },
                                "publisherRestrictionCount": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 100000
                                },
                                "stringDigest": {
                                  "type": "string",
                                  "maxLength": 16,
                                  "pattern": "^[0-9a-f]{16}$"
                                },
                                "knownVendors": {
                                  "type": "object",
                                  "properties": {
                                    "consent": {
                                      "maxItems": 40,
                                      "type": "array",
                                      "items": {
                                        "type": "integer",
                                        "minimum": 1,
                                        "maximum": 65535
                                      }
                                    },
                                    "li": {
                                      "maxItems": 40,
                                      "type": "array",
                                      "items": {
                                        "type": "integer",
                                        "minimum": 1,
                                        "maximum": 65535
                                      }
                                    },
                                    "contacted": {
                                      "maxItems": 40,
                                      "type": "array",
                                      "items": {
                                        "type": "integer",
                                        "minimum": 1,
                                        "maximum": 65535
                                      }
                                    }
                                  },
                                  "required": [
                                    "consent",
                                    "li",
                                    "contacted"
                                  ],
                                  "additionalProperties": false
                                },
                                "knownVendorsTruncated": {
                                  "type": "boolean",
                                  "const": true
                                }
                              },
                              "required": [
                                "policyVersion",
                                "purposesConsent",
                                "purposesLI",
                                "specialFeatures",
                                "vendorConsentCount",
                                "vendorLICount",
                                "publisherRestrictionCount",
                                "stringDigest",
                                "knownVendors"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "api",
                            "gdprApplies",
                            "cmpId",
                            "string"
                          ],
                          "additionalProperties": false
                        },
                        "consentMode": {
                          "type": "object",
                          "properties": {
                            "googleRequests": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "firstGrantedSequence": {
                              "anyOf": [
                                {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 1000000
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "states": {
                              "type": "object",
                              "properties": {
                                "ad_storage": {
                                  "type": "object",
                                  "properties": {
                                    "default": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    },
                                    "update": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    },
                                    "sent": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    }
                                  },
                                  "required": [
                                    "default",
                                    "update",
                                    "sent"
                                  ],
                                  "additionalProperties": false
                                },
                                "analytics_storage": {
                                  "type": "object",
                                  "properties": {
                                    "default": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    },
                                    "update": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    },
                                    "sent": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    }
                                  },
                                  "required": [
                                    "default",
                                    "update",
                                    "sent"
                                  ],
                                  "additionalProperties": false
                                },
                                "ad_user_data": {
                                  "type": "object",
                                  "properties": {
                                    "default": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    },
                                    "update": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    },
                                    "sent": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    }
                                  },
                                  "required": [
                                    "default",
                                    "update",
                                    "sent"
                                  ],
                                  "additionalProperties": false
                                },
                                "ad_personalization": {
                                  "type": "object",
                                  "properties": {
                                    "default": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    },
                                    "update": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    },
                                    "sent": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "denied",
                                        "mixed",
                                        "not_set",
                                        "unknown"
                                      ]
                                    }
                                  },
                                  "required": [
                                    "default",
                                    "update",
                                    "sent"
                                  ],
                                  "additionalProperties": false
                                }
                              },
                              "required": [
                                "ad_storage",
                                "analytics_storage",
                                "ad_user_data",
                                "ad_personalization"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "googleRequests",
                            "firstGrantedSequence",
                            "states"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "required": [
                        "status"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "initial",
                    "reject_all",
                    "accept_all"
                  ],
                  "additionalProperties": false
                }
              },
              "required": [
                "pageId",
                "normalizedUrl",
                "scenarios"
              ],
              "additionalProperties": false
            }
          },
          "summary": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "pagesRead": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "pagesWithTcfString": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "pagesTcfPurposesBeforeChoice": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "pagesTcfPurposesAfterReject": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "pagesWithGoogleRequests": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "pagesConsentModeGrantedBeforeChoice": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "pagesConsentModeGrantedAfterReject": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  }
                },
                "required": [
                  "pagesRead",
                  "pagesWithTcfString",
                  "pagesTcfPurposesBeforeChoice",
                  "pagesTcfPurposesAfterReject",
                  "pagesWithGoogleRequests",
                  "pagesConsentModeGrantedBeforeChoice",
                  "pagesConsentModeGrantedAfterReject"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ]
          },
          "nextCursor": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 256
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "rows",
          "summary",
          "nextCursor"
        ],
        "additionalProperties": false
      },
      "ConsentApprovalSettings": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "listVersion": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "counts": {
            "type": "object",
            "properties": {
              "organizationWide": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "siteAllow": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "siteExclude": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "total": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "organizationWide",
              "siteAllow",
              "siteExclude",
              "total"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "enabled",
          "listVersion",
          "counts"
        ],
        "additionalProperties": false
      },
      "ApprovedTrackerListResponse": {
        "type": "object",
        "properties": {
          "items": {
            "maxItems": 200,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "scope": {
                  "type": "string",
                  "enum": [
                    "organization",
                    "site"
                  ]
                },
                "domainId": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "registrableDomain": {
                  "type": "string",
                  "maxLength": 253,
                  "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$"
                },
                "effect": {
                  "type": "string",
                  "enum": [
                    "allow",
                    "exclude"
                  ]
                },
                "note": {
                  "type": "string",
                  "maxLength": 280
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "createdByKind": {
                  "type": "string",
                  "enum": [
                    "user",
                    "unknown"
                  ]
                }
              },
              "required": [
                "id",
                "scope",
                "domainId",
                "registrableDomain",
                "effect",
                "note",
                "createdAt",
                "createdByKind"
              ],
              "additionalProperties": false
            }
          },
          "nextCursor": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 256
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "items",
          "nextCursor"
        ],
        "additionalProperties": false
      },
      "EffectiveApprovedTrackersResponse": {
        "type": "object",
        "properties": {
          "domainId": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "enabled": {
            "type": "boolean"
          },
          "listVersion": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "effectiveHash": {
            "type": "string",
            "maxLength": 64,
            "pattern": "^[0-9a-f]{64}$"
          },
          "items": {
            "maxItems": 5000,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "registrableDomain": {
                  "type": "string",
                  "maxLength": 253,
                  "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$"
                },
                "source": {
                  "type": "string",
                  "enum": [
                    "organization",
                    "site"
                  ]
                }
              },
              "required": [
                "registrableDomain",
                "source"
              ],
              "additionalProperties": false
            }
          },
          "excludedDomains": {
            "maxItems": 5000,
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 253,
              "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$"
            }
          }
        },
        "required": [
          "domainId",
          "enabled",
          "listVersion",
          "effectiveHash",
          "items",
          "excludedDomains"
        ],
        "additionalProperties": false
      },
      "ConsentOrganizationClassification": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "scope": {
            "type": "string",
            "enum": [
              "site",
              "organization"
            ]
          },
          "domainId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              {
                "type": "null"
              }
            ]
          },
          "kind": {
            "type": "string",
            "enum": [
              "cookie",
              "storage_key"
            ]
          },
          "match": {
            "type": "string",
            "enum": [
              "exact",
              "prefix"
            ]
          },
          "value": {
            "type": "string",
            "maxLength": 256,
            "pattern": "^[\\x21\\x24\\x26\\x28-\\x2b\\x2d\\x2e\\x30-\\x3a\\x41-\\x5b\\x5d-\\x7e]+$"
          },
          "registrableDomain": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 253,
                "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "category": {
            "type": "string",
            "enum": [
              "analytics",
              "advertising",
              "social",
              "personalization",
              "functional",
              "security",
              "infrastructure",
              "consent_management"
            ]
          },
          "essential": {
            "type": "boolean"
          },
          "vendor": {
            "type": "string",
            "maxLength": 120,
            "pattern": "^(?![\\s\\S]*:\\/\\/)[^\\p{C}\\p{Zl}\\p{Zp}\\\\<>]+$"
          },
          "note": {
            "type": "string",
            "maxLength": 280
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
          },
          "createdBy": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "const": "organization_member"
                  },
                  "id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "displayName": {
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 200
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "kind",
                  "id",
                  "displayName"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ]
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
          },
          "updatedBy": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "const": "organization_member"
                  },
                  "id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "displayName": {
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 200
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "kind",
                  "id",
                  "displayName"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "scope",
          "domainId",
          "kind",
          "match",
          "value",
          "registrableDomain",
          "category",
          "essential",
          "vendor",
          "note",
          "createdAt",
          "createdBy",
          "updatedAt",
          "updatedBy"
        ],
        "additionalProperties": false
      },
      "ConsentOrganizationClassificationListResponse": {
        "type": "object",
        "properties": {
          "items": {
            "maxItems": 200,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "scope": {
                  "type": "string",
                  "enum": [
                    "site",
                    "organization"
                  ]
                },
                "domainId": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "kind": {
                  "type": "string",
                  "enum": [
                    "cookie",
                    "storage_key"
                  ]
                },
                "match": {
                  "type": "string",
                  "enum": [
                    "exact",
                    "prefix"
                  ]
                },
                "value": {
                  "type": "string",
                  "maxLength": 256,
                  "pattern": "^[\\x21\\x24\\x26\\x28-\\x2b\\x2d\\x2e\\x30-\\x3a\\x41-\\x5b\\x5d-\\x7e]+$"
                },
                "registrableDomain": {
                  "anyOf": [
                    {
                      "type": "string",
                      "maxLength": 253,
                      "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "category": {
                  "type": "string",
                  "enum": [
                    "analytics",
                    "advertising",
                    "social",
                    "personalization",
                    "functional",
                    "security",
                    "infrastructure",
                    "consent_management"
                  ]
                },
                "essential": {
                  "type": "boolean"
                },
                "vendor": {
                  "type": "string",
                  "maxLength": 120,
                  "pattern": "^(?![\\s\\S]*:\\/\\/)[^\\p{C}\\p{Zl}\\p{Zp}\\\\<>]+$"
                },
                "note": {
                  "type": "string",
                  "maxLength": 280
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "createdBy": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "const": "organization_member"
                        },
                        "id": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "displayName": {
                          "anyOf": [
                            {
                              "type": "string",
                              "maxLength": 200
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "kind",
                        "id",
                        "displayName"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "updatedBy": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "const": "organization_member"
                        },
                        "id": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "displayName": {
                          "anyOf": [
                            {
                              "type": "string",
                              "maxLength": 200
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "kind",
                        "id",
                        "displayName"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "scope",
                "domainId",
                "kind",
                "match",
                "value",
                "registrableDomain",
                "category",
                "essential",
                "vendor",
                "note",
                "createdAt",
                "createdBy",
                "updatedAt",
                "updatedBy"
              ],
              "additionalProperties": false
            }
          },
          "nextCursor": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 512
              },
              {
                "type": "null"
              }
            ]
          },
          "counts": {
            "type": "object",
            "properties": {
              "total": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "organizationWide": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "site": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "limit": {
                "type": "number",
                "const": 500
              },
              "siteBytesUsedMax": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "total",
              "organizationWide",
              "site",
              "limit",
              "siteBytesUsedMax"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "items",
          "nextCursor",
          "counts"
        ],
        "additionalProperties": false
      },
      "ConsentOrganizationClassificationEffectiveResponse": {
        "type": "object",
        "properties": {
          "domainId": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "version": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^[0-9a-f]{16}$"
              },
              {
                "type": "null"
              }
            ]
          },
          "entryCount": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "bytesUsed": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "bytesLimit": {
            "type": "number",
            "const": 65536
          },
          "block": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "format": {
                    "type": "string",
                    "const": "consent.organization-classification/1"
                  },
                  "version": {
                    "type": "string",
                    "pattern": "^[0-9a-f]{16}$"
                  },
                  "site": {
                    "maxItems": 500,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "enum": [
                            "cookie",
                            "storage_key"
                          ]
                        },
                        "match": {
                          "type": "string",
                          "enum": [
                            "exact",
                            "prefix"
                          ]
                        },
                        "value": {
                          "type": "string",
                          "maxLength": 256,
                          "pattern": "^[\\x21\\x24\\x26\\x28-\\x2b\\x2d\\x2e\\x30-\\x3a\\x41-\\x5b\\x5d-\\x7e]+$"
                        },
                        "registrableDomain": {
                          "type": "string",
                          "maxLength": 253,
                          "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$"
                        },
                        "category": {
                          "type": "string",
                          "enum": [
                            "analytics",
                            "advertising",
                            "social",
                            "personalization",
                            "functional",
                            "security",
                            "infrastructure",
                            "consent_management"
                          ]
                        },
                        "essential": {
                          "type": "boolean"
                        },
                        "vendor": {
                          "type": "string",
                          "maxLength": 120,
                          "pattern": "^(?![\\s\\S]*:\\/\\/)[^\\p{C}\\p{Zl}\\p{Zp}\\\\<>]+$"
                        }
                      },
                      "required": [
                        "kind",
                        "match",
                        "value",
                        "category",
                        "essential",
                        "vendor"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "organization": {
                    "maxItems": 500,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "enum": [
                            "cookie",
                            "storage_key"
                          ]
                        },
                        "match": {
                          "type": "string",
                          "enum": [
                            "exact",
                            "prefix"
                          ]
                        },
                        "value": {
                          "type": "string",
                          "maxLength": 256,
                          "pattern": "^[\\x21\\x24\\x26\\x28-\\x2b\\x2d\\x2e\\x30-\\x3a\\x41-\\x5b\\x5d-\\x7e]+$"
                        },
                        "registrableDomain": {
                          "type": "string",
                          "maxLength": 253,
                          "pattern": "^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$"
                        },
                        "category": {
                          "type": "string",
                          "enum": [
                            "analytics",
                            "advertising",
                            "social",
                            "personalization",
                            "functional",
                            "security",
                            "infrastructure",
                            "consent_management"
                          ]
                        },
                        "essential": {
                          "type": "boolean"
                        },
                        "vendor": {
                          "type": "string",
                          "maxLength": 120,
                          "pattern": "^(?![\\s\\S]*:\\/\\/)[^\\p{C}\\p{Zl}\\p{Zp}\\\\<>]+$"
                        }
                      },
                      "required": [
                        "kind",
                        "match",
                        "value",
                        "category",
                        "essential",
                        "vendor"
                      ],
                      "additionalProperties": false
                    }
                  }
                },
                "required": [
                  "format",
                  "version",
                  "site",
                  "organization"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "domainId",
          "version",
          "entryCount",
          "bytesUsed",
          "bytesLimit",
          "block"
        ],
        "additionalProperties": false
      },
      "ScanRunComparison": {
        "type": "object",
        "properties": {
          "scanRunId": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "organizationId": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "domainId": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "state": {
            "type": "string",
            "enum": [
              "computed",
              "no_baseline",
              "skipped",
              "pending",
              "unavailable"
            ]
          },
          "baselineRunId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              {
                "type": "null"
              }
            ]
          },
          "baselineStatus": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "queued",
                  "running",
                  "completed",
                  "partially_completed",
                  "failed"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "baselineFinishedAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              },
              {
                "type": "null"
              }
            ]
          },
          "computedAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              },
              {
                "type": "null"
              }
            ]
          },
          "counts": {
            "type": "object",
            "properties": {
              "new": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "persistent": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "changed": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "resolved": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "unscanned": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "incomparable": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "new",
              "persistent",
              "changed",
              "resolved",
              "unscanned",
              "incomparable"
            ],
            "additionalProperties": false
          },
          "byModule": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "module": {
                  "type": "string",
                  "enum": [
                    "discovery",
                    "security_baseline",
                    "performance",
                    "seo",
                    "accessibility",
                    "consent",
                    "visual",
                    "geo"
                  ]
                },
                "counts": {
                  "type": "object",
                  "properties": {
                    "new": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "persistent": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "changed": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "resolved": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "unscanned": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "incomparable": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    }
                  },
                  "required": [
                    "new",
                    "persistent",
                    "changed",
                    "resolved",
                    "unscanned",
                    "incomparable"
                  ],
                  "additionalProperties": false
                },
                "comparability": {
                  "type": "string",
                  "enum": [
                    "comparable",
                    "incompatible",
                    "unknown",
                    "not_applicable"
                  ]
                },
                "strict": {
                  "type": "boolean"
                },
                "scannerConfig": {
                  "type": "object",
                  "properties": {
                    "current": {
                      "anyOf": [
                        {
                          "type": "object",
                          "propertyNames": {
                            "type": "string"
                          },
                          "additionalProperties": {
                            "type": "string"
                          }
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "baseline": {
                      "anyOf": [
                        {
                          "type": "object",
                          "propertyNames": {
                            "type": "string"
                          },
                          "additionalProperties": {
                            "type": "string"
                          }
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "current",
                    "baseline"
                  ],
                  "additionalProperties": false
                }
              },
              "required": [
                "module",
                "counts",
                "comparability",
                "scannerConfig"
              ],
              "additionalProperties": false
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "code": {
                  "type": "string",
                  "enum": [
                    "incompatible_measurement",
                    "scanner_configuration_unknown",
                    "mixed_measurement_configuration",
                    "baseline_partially_completed",
                    "comparison_truncated",
                    "duplicate_fingerprint_in_run"
                  ]
                },
                "module": {
                  "anyOf": [
                    {
                      "type": "string",
                      "enum": [
                        "discovery",
                        "security_baseline",
                        "performance",
                        "seo",
                        "accessibility",
                        "consent",
                        "visual",
                        "geo"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "details": {
                  "type": "object",
                  "propertyNames": {
                    "type": "string"
                  },
                  "additionalProperties": {}
                }
              },
              "required": [
                "code",
                "module",
                "details"
              ],
              "additionalProperties": false
            }
          },
          "findingsCompared": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "scanRunId",
          "organizationId",
          "domainId",
          "state",
          "baselineRunId",
          "baselineStatus",
          "baselineFinishedAt",
          "computedAt",
          "counts",
          "byModule",
          "warnings",
          "findingsCompared"
        ],
        "additionalProperties": false
      },
      "ClosedFindingListResponse": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "organizationId": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "domainId": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "scanRunId": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "baselineRunId": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "baselineFindingId": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "pageId": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "url": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "module": {
                  "type": "string",
                  "enum": [
                    "discovery",
                    "security_baseline",
                    "performance",
                    "seo",
                    "accessibility",
                    "consent",
                    "visual",
                    "geo"
                  ]
                },
                "ruleId": {
                  "type": "string"
                },
                "discriminator": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "fingerprint": {
                  "type": "string"
                },
                "severity": {
                  "type": "string",
                  "enum": [
                    "info",
                    "low",
                    "medium",
                    "high",
                    "critical"
                  ]
                },
                "title": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "resolved",
                    "unscanned"
                  ]
                },
                "firstSeenAt": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "lastSeenAt": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                }
              },
              "required": [
                "id",
                "organizationId",
                "domainId",
                "scanRunId",
                "baselineRunId",
                "baselineFindingId",
                "pageId",
                "url",
                "module",
                "ruleId",
                "discriminator",
                "fingerprint",
                "severity",
                "title",
                "status",
                "firstSeenAt",
                "lastSeenAt"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "items"
        ],
        "additionalProperties": false
      },
      "ReportSnapshotEnvelope": {
        "type": "object",
        "properties": {
          "scanRunId": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "domainId": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "state": {
            "type": "string",
            "enum": [
              "available",
              "pending",
              "unavailable"
            ]
          },
          "format": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "report.snapshot/1"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "generatedAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              },
              {
                "type": "null"
              }
            ]
          },
          "contentSha256": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^[0-9a-f]{64}$"
              },
              {
                "type": "null"
              }
            ]
          },
          "sizeBytes": {
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ]
          },
          "snapshot": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "format": {
                    "type": "string",
                    "const": "report.snapshot/1"
                  },
                  "generator": {
                    "type": "object",
                    "properties": {
                      "service": {
                        "type": "string",
                        "const": "api"
                      },
                      "version": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 64
                      }
                    },
                    "required": [
                      "service",
                      "version"
                    ],
                    "additionalProperties": false
                  },
                  "organization": {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 256
                      },
                      "slug": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 256
                      }
                    },
                    "required": [
                      "name",
                      "slug"
                    ],
                    "additionalProperties": false
                  },
                  "site": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      "hostname": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 253
                      },
                      "displayName": {
                        "anyOf": [
                          {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 256
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "baseUrl": {
                        "type": "string",
                        "maxLength": 2048,
                        "format": "uri"
                      }
                    },
                    "required": [
                      "id",
                      "hostname",
                      "displayName",
                      "baseUrl"
                    ],
                    "additionalProperties": false
                  },
                  "scan": {
                    "type": "object",
                    "properties": {
                      "runId": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      "trigger": {
                        "type": "string",
                        "enum": [
                          "manual",
                          "scheduled"
                        ]
                      },
                      "outcome": {
                        "type": "string",
                        "enum": [
                          "completed",
                          "partially_completed",
                          "failed"
                        ]
                      },
                      "scheduledFor": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "queuedAt": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "startedAt": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "finishedAt": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "durationMs": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "errorSummary": {
                        "anyOf": [
                          {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 1000
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "policyVersion": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991
                      },
                      "policy": {
                        "type": "object",
                        "properties": {
                          "modules": {
                            "minItems": 1,
                            "maxItems": 8,
                            "type": "array",
                            "items": {
                              "type": "string",
                              "enum": [
                                "discovery",
                                "security_baseline",
                                "performance",
                                "seo",
                                "accessibility",
                                "consent",
                                "visual",
                                "geo"
                              ]
                            }
                          },
                          "maxUrls": {
                            "type": "integer",
                            "exclusiveMinimum": 0,
                            "maximum": 9007199254740991
                          },
                          "consentMaxUrls": {
                            "anyOf": [
                              {
                                "type": "integer",
                                "exclusiveMinimum": 0,
                                "maximum": 9007199254740991
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "crawlDepth": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          "seedUrl": {
                            "type": "string",
                            "maxLength": 2048,
                            "format": "uri"
                          },
                          "customConsentSelectors": {
                            "type": "boolean"
                          },
                          "appliedOrganizationLimits": {
                            "anyOf": [
                              {
                                "type": "object",
                                "properties": {
                                  "maxUrls": {
                                    "type": "integer",
                                    "exclusiveMinimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  "crawlDepth": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  "requestsPerSecond": {
                                    "type": "integer",
                                    "exclusiveMinimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  "maxConcurrentTasks": {
                                    "type": "integer",
                                    "exclusiveMinimum": 0,
                                    "maximum": 9007199254740991
                                  }
                                },
                                "additionalProperties": false
                              },
                              {
                                "type": "null"
                              }
                            ]
                          }
                        },
                        "required": [
                          "modules",
                          "maxUrls",
                          "consentMaxUrls",
                          "crawlDepth",
                          "seedUrl",
                          "customConsentSelectors",
                          "appliedOrganizationLimits"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "runId",
                      "trigger",
                      "outcome",
                      "scheduledFor",
                      "queuedAt",
                      "startedAt",
                      "finishedAt",
                      "durationMs",
                      "errorSummary",
                      "policyVersion",
                      "policy"
                    ],
                    "additionalProperties": false
                  },
                  "coverage": {
                    "type": "object",
                    "properties": {
                      "partial": {
                        "type": "boolean"
                      },
                      "pages": {
                        "type": "object",
                        "properties": {
                          "inventory": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          "budget": {
                            "type": "integer",
                            "exclusiveMinimum": 0,
                            "maximum": 9007199254740991
                          },
                          "budgetReached": {
                            "type": "boolean"
                          },
                          "notFullyScanned": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          }
                        },
                        "required": [
                          "inventory",
                          "budget",
                          "budgetReached",
                          "notFullyScanned"
                        ],
                        "additionalProperties": false
                      },
                      "missingModules": {
                        "maxItems": 8,
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "module": {
                              "type": "string",
                              "enum": [
                                "discovery",
                                "security_baseline",
                                "performance",
                                "seo",
                                "accessibility",
                                "consent",
                                "visual",
                                "geo"
                              ]
                            },
                            "status": {
                              "type": "string",
                              "enum": [
                                "partial",
                                "failed",
                                "not_run"
                              ]
                            },
                            "failedTasks": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "reasons": {
                              "maxItems": 13,
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "code": {
                                    "type": "string",
                                    "enum": [
                                      "network_timeout",
                                      "host_unreachable",
                                      "dns_failure",
                                      "tls_error",
                                      "http_error",
                                      "invalid_target",
                                      "module_unsupported",
                                      "worker_internal",
                                      "abandoned",
                                      "cancelled",
                                      "unknown",
                                      "discovery_incomplete",
                                      "no_pages"
                                    ]
                                  },
                                  "tasks": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  }
                                },
                                "required": [
                                  "code",
                                  "tasks"
                                ],
                                "additionalProperties": false
                              }
                            }
                          },
                          "required": [
                            "module",
                            "status",
                            "failedTasks",
                            "reasons"
                          ],
                          "additionalProperties": false
                        }
                      }
                    },
                    "required": [
                      "partial",
                      "pages",
                      "missingModules"
                    ],
                    "additionalProperties": false
                  },
                  "modules": {
                    "minItems": 6,
                    "maxItems": 8,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "module": {
                          "type": "string",
                          "enum": [
                            "discovery",
                            "security_baseline",
                            "performance",
                            "seo",
                            "accessibility",
                            "consent",
                            "visual",
                            "geo"
                          ]
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "completed",
                            "partial",
                            "failed",
                            "not_run",
                            "not_requested"
                          ]
                        },
                        "tasks": {
                          "type": "object",
                          "properties": {
                            "queued": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "running": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "completed": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "failed": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "cancelled": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            }
                          },
                          "required": [
                            "queued",
                            "running",
                            "completed",
                            "failed",
                            "cancelled"
                          ],
                          "additionalProperties": false
                        },
                        "findings": {
                          "type": "object",
                          "properties": {
                            "total": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "bySeverity": {
                              "type": "object",
                              "properties": {
                                "info": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                },
                                "low": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                },
                                "medium": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                },
                                "high": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                },
                                "critical": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                }
                              },
                              "required": [
                                "info",
                                "low",
                                "medium",
                                "high",
                                "critical"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "total",
                            "bySeverity"
                          ],
                          "additionalProperties": false
                        },
                        "issueCount": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "reasons": {
                          "maxItems": 13,
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "code": {
                                "type": "string",
                                "enum": [
                                  "network_timeout",
                                  "host_unreachable",
                                  "dns_failure",
                                  "tls_error",
                                  "http_error",
                                  "invalid_target",
                                  "module_unsupported",
                                  "worker_internal",
                                  "abandoned",
                                  "cancelled",
                                  "unknown",
                                  "discovery_incomplete",
                                  "no_pages"
                                ]
                              },
                              "tasks": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              }
                            },
                            "required": [
                              "code",
                              "tasks"
                            ],
                            "additionalProperties": false
                          }
                        }
                      },
                      "required": [
                        "module",
                        "status",
                        "tasks",
                        "findings",
                        "issueCount",
                        "reasons"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "findings": {
                    "type": "object",
                    "properties": {
                      "counts": {
                        "type": "object",
                        "properties": {
                          "total": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          "bySeverity": {
                            "type": "object",
                            "properties": {
                              "info": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "low": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "medium": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "high": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "critical": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              }
                            },
                            "required": [
                              "info",
                              "low",
                              "medium",
                              "high",
                              "critical"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "required": [
                          "total",
                          "bySeverity"
                        ],
                        "additionalProperties": false
                      },
                      "issueCount": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "topIssues": {
                        "maxItems": 40,
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "ruleId": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 128
                            },
                            "discriminator": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 256
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "module": {
                              "type": "string",
                              "enum": [
                                "discovery",
                                "security_baseline",
                                "performance",
                                "seo",
                                "accessibility",
                                "consent",
                                "visual",
                                "geo"
                              ]
                            },
                            "severity": {
                              "type": "string",
                              "enum": [
                                "info",
                                "low",
                                "medium",
                                "high",
                                "critical"
                              ]
                            },
                            "scope": {
                              "type": "string",
                              "enum": [
                                "page",
                                "site"
                              ]
                            },
                            "title": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 256
                            },
                            "affectedPages": {
                              "anyOf": [
                                {
                                  "type": "integer",
                                  "minimum": 1,
                                  "maximum": 9007199254740991
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "findings": {
                              "type": "integer",
                              "minimum": 1,
                              "maximum": 9007199254740991
                            },
                            "needsVerification": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "comparison": {
                              "type": "object",
                              "properties": {
                                "new": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                },
                                "persistent": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                },
                                "changed": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                },
                                "incomparable": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                },
                                "notCompared": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                }
                              },
                              "required": [
                                "new",
                                "persistent",
                                "changed",
                                "incomparable",
                                "notCompared"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "ruleId",
                            "discriminator",
                            "module",
                            "severity",
                            "scope",
                            "title",
                            "affectedPages",
                            "findings",
                            "needsVerification",
                            "comparison"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "omittedIssues": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      }
                    },
                    "required": [
                      "counts",
                      "issueCount",
                      "topIssues",
                      "omittedIssues"
                    ],
                    "additionalProperties": false
                  },
                  "comparison": {
                    "type": "object",
                    "properties": {
                      "state": {
                        "type": "string",
                        "enum": [
                          "computed",
                          "no_baseline",
                          "skipped",
                          "not_compared"
                        ]
                      },
                      "reason": {
                        "anyOf": [
                          {
                            "type": "string",
                            "enum": [
                              "run_failed",
                              "not_recorded",
                              "comparison_truncated"
                            ]
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "baseline": {
                        "anyOf": [
                          {
                            "type": "object",
                            "properties": {
                              "runId": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "completed",
                                  "partially_completed"
                                ]
                              },
                              "finishedAt": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "runId",
                              "status",
                              "finishedAt"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "counts": {
                        "type": "object",
                        "properties": {
                          "new": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          "persistent": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          "changed": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          "resolved": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          "unscanned": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          "incomparable": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          }
                        },
                        "required": [
                          "new",
                          "persistent",
                          "changed",
                          "resolved",
                          "unscanned",
                          "incomparable"
                        ],
                        "additionalProperties": false
                      },
                      "modules": {
                        "maxItems": 8,
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "module": {
                              "type": "string",
                              "enum": [
                                "discovery",
                                "security_baseline",
                                "performance",
                                "seo",
                                "accessibility",
                                "consent",
                                "visual",
                                "geo"
                              ]
                            },
                            "comparability": {
                              "type": "string",
                              "enum": [
                                "comparable",
                                "incompatible",
                                "unknown",
                                "not_applicable"
                              ]
                            }
                          },
                          "required": [
                            "module",
                            "comparability"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "warnings": {
                        "maxItems": 64,
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "code": {
                              "type": "string",
                              "enum": [
                                "incompatible_measurement",
                                "scanner_configuration_unknown",
                                "mixed_measurement_configuration",
                                "baseline_partially_completed",
                                "comparison_truncated",
                                "duplicate_fingerprint_in_run"
                              ]
                            },
                            "module": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "enum": [
                                    "discovery",
                                    "security_baseline",
                                    "performance",
                                    "seo",
                                    "accessibility",
                                    "consent",
                                    "visual",
                                    "geo"
                                  ]
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            }
                          },
                          "required": [
                            "code",
                            "module"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "resolvedTop": {
                        "maxItems": 20,
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "ruleId": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 128
                            },
                            "discriminator": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 256
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "module": {
                              "type": "string",
                              "enum": [
                                "discovery",
                                "security_baseline",
                                "performance",
                                "seo",
                                "accessibility",
                                "consent",
                                "visual",
                                "geo"
                              ]
                            },
                            "severity": {
                              "type": "string",
                              "enum": [
                                "info",
                                "low",
                                "medium",
                                "high",
                                "critical"
                              ]
                            },
                            "title": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 256
                            },
                            "pages": {
                              "type": "integer",
                              "minimum": 1,
                              "maximum": 9007199254740991
                            }
                          },
                          "required": [
                            "ruleId",
                            "discriminator",
                            "module",
                            "severity",
                            "title",
                            "pages"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "omittedResolved": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      }
                    },
                    "required": [
                      "state",
                      "reason",
                      "baseline",
                      "counts",
                      "modules",
                      "warnings",
                      "resolvedTop",
                      "omittedResolved"
                    ],
                    "additionalProperties": false
                  },
                  "consent": {
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "classification": {
                            "type": "object",
                            "properties": {
                              "operatorSetVersion": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "exclusiveMinimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "operatorSetVersion"
                            ],
                            "additionalProperties": false
                          },
                          "pagesObserved": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          "byScenario": {
                            "type": "object",
                            "properties": {
                              "initial": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "reject_all": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "accept_all": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              }
                            },
                            "required": [
                              "initial",
                              "reject_all",
                              "accept_all"
                            ],
                            "additionalProperties": false
                          },
                          "needsVerification": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          }
                        },
                        "required": [
                          "classification",
                          "pagesObserved",
                          "byScenario",
                          "needsVerification"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "alerts": {
                    "type": "object",
                    "properties": {
                      "raised": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "items": {
                        "maxItems": 10,
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "ruleName": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 120
                            },
                            "kind": {
                              "type": "string",
                              "enum": [
                                "finding_count",
                                "regression",
                                "run_outcome",
                                "health_change"
                              ]
                            },
                            "matchedCount": {
                              "type": "integer",
                              "minimum": 1,
                              "maximum": 9007199254740991
                            }
                          },
                          "required": [
                            "ruleName",
                            "kind",
                            "matchedCount"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "omitted": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      }
                    },
                    "required": [
                      "raised",
                      "items",
                      "omitted"
                    ],
                    "additionalProperties": false
                  },
                  "disclaimers": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "code": {
                          "type": "string",
                          "enum": [
                            "observations_only",
                            "consent_observational",
                            "coverage_bounds",
                            "comparison_scope"
                          ]
                        },
                        "text": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 1000
                        }
                      },
                      "required": [
                        "code",
                        "text"
                      ],
                      "additionalProperties": false
                    }
                  }
                },
                "required": [
                  "format",
                  "generator",
                  "organization",
                  "site",
                  "scan",
                  "coverage",
                  "modules",
                  "findings",
                  "comparison",
                  "consent",
                  "alerts",
                  "disclaimers"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "scanRunId",
          "domainId",
          "state",
          "format",
          "generatedAt",
          "contentSha256",
          "sizeBytes",
          "snapshot"
        ],
        "additionalProperties": false
      },
      "ReportDocumentEnvelope": {
        "type": "object",
        "properties": {
          "scanRunId": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "state": {
            "type": "string",
            "enum": [
              "pending",
              "rendered",
              "failed",
              "unavailable"
            ]
          },
          "format": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "application/pdf"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "attempt": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ]
          },
          "maxAttempts": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ]
          },
          "requestedAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              },
              {
                "type": "null"
              }
            ]
          },
          "renderedAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              },
              {
                "type": "null"
              }
            ]
          },
          "pageCount": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ]
          },
          "sizeBytes": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ]
          },
          "sha256": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^[0-9a-f]{64}$"
              },
              {
                "type": "null"
              }
            ]
          },
          "artifactId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              {
                "type": "null"
              }
            ]
          },
          "errorCode": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "snapshot_invalid",
                  "browser_crashed",
                  "render_timeout",
                  "pdf_too_large",
                  "page_limit_exceeded",
                  "storage_failed",
                  "delivery_exhausted",
                  "worker_internal",
                  "artifact_rejected",
                  "request_lost"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "version": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "snapshotFormat": {
                    "type": "string",
                    "enum": [
                      "report.snapshot/1",
                      "report.snapshot/2",
                      "report.snapshot/3"
                    ]
                  },
                  "renderer": {
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "service": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64
                          },
                          "version": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 64
                          }
                        },
                        "required": [
                          "service",
                          "version"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "browserVersion": {
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 128
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "snapshotFormat",
                  "renderer",
                  "browserVersion"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ]
          },
          "expiresAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "scanRunId",
          "state",
          "format",
          "attempt",
          "maxAttempts",
          "requestedAt",
          "renderedAt",
          "pageCount",
          "sizeBytes",
          "sha256",
          "artifactId",
          "errorCode",
          "version",
          "expiresAt"
        ],
        "additionalProperties": false
      },
      "ReportDocumentListResponse": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "scanRunId": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "domainId": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "pending",
                    "rendered",
                    "failed",
                    "unavailable"
                  ]
                },
                "format": {
                  "type": "string",
                  "enum": [
                    "application/pdf"
                  ]
                },
                "requestedAt": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "renderedAt": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "pageCount": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "sizeBytes": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "errorCode": {
                  "anyOf": [
                    {
                      "type": "string",
                      "enum": [
                        "snapshot_invalid",
                        "browser_crashed",
                        "render_timeout",
                        "pdf_too_large",
                        "page_limit_exceeded",
                        "storage_failed",
                        "delivery_exhausted",
                        "worker_internal",
                        "artifact_rejected",
                        "request_lost"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "expiresAt": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "scanRunId",
                "domainId",
                "state",
                "format",
                "requestedAt",
                "renderedAt",
                "pageCount",
                "sizeBytes",
                "errorCode",
                "expiresAt"
              ],
              "additionalProperties": false
            }
          },
          "total": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "items",
          "total",
          "offset"
        ],
        "additionalProperties": false
      },
      "ReportDownloadReference": {
        "type": "object",
        "properties": {
          "scanRunId": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "reportDocumentId": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "kind": {
            "type": "string",
            "enum": [
              "signed_url",
              "api_proxy"
            ]
          },
          "url": {
            "type": "string",
            "minLength": 1
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
          },
          "fileName": {
            "type": "string",
            "maxLength": 131,
            "pattern": "^[a-z0-9.-]+\\.pdf$"
          },
          "contentType": {
            "type": "string",
            "const": "application/pdf"
          },
          "sizeBytes": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "sha256": {
            "type": "string",
            "pattern": "^[0-9a-f]{64}$"
          }
        },
        "required": [
          "scanRunId",
          "reportDocumentId",
          "kind",
          "url",
          "expiresAt",
          "fileName",
          "contentType",
          "sizeBytes",
          "sha256"
        ],
        "additionalProperties": false
      },
      "ScanCompletedWebhookPayload": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "type": {
            "type": "string",
            "const": "scan.completed"
          },
          "apiVersion": {
            "type": "number",
            "const": 1
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
          },
          "data": {
            "type": "object",
            "properties": {
              "organization": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  "slug": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 253
                  }
                },
                "required": [
                  "id",
                  "slug"
                ],
                "additionalProperties": false
              },
              "site": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  "hostname": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 253
                  }
                },
                "required": [
                  "id",
                  "hostname"
                ],
                "additionalProperties": false
              },
              "scanRun": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "completed",
                      "partially_completed",
                      "failed"
                    ]
                  },
                  "trigger": {
                    "type": "string",
                    "enum": [
                      "manual",
                      "scheduled"
                    ]
                  },
                  "queuedAt": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "startedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "finishedAt": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "policyVersion": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  }
                },
                "required": [
                  "id",
                  "status",
                  "trigger",
                  "queuedAt",
                  "startedAt",
                  "finishedAt",
                  "policyVersion"
                ],
                "additionalProperties": false
              },
              "summary": {
                "type": "object",
                "properties": {
                  "findingCounts": {
                    "type": "object",
                    "properties": {
                      "total": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "bySeverity": {
                        "type": "object",
                        "properties": {
                          "info": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          "low": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          "medium": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          "high": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          "critical": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          }
                        },
                        "required": [
                          "info",
                          "low",
                          "medium",
                          "high",
                          "critical"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "total",
                      "bySeverity"
                    ],
                    "additionalProperties": false
                  },
                  "issueCount": {
                    "anyOf": [
                      {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "taskCounts": {
                    "type": "object",
                    "properties": {
                      "total": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "completed": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "failed": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "cancelled": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      }
                    },
                    "required": [
                      "total",
                      "completed",
                      "failed",
                      "cancelled"
                    ],
                    "additionalProperties": false
                  },
                  "failedModules": {
                    "maxItems": 8,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "discovery",
                        "security_baseline",
                        "performance",
                        "seo",
                        "accessibility",
                        "consent",
                        "visual",
                        "geo"
                      ]
                    }
                  },
                  "alertsRaised": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "comparison": {
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "state": {
                            "type": "string",
                            "enum": [
                              "computed",
                              "no_baseline",
                              "skipped"
                            ]
                          },
                          "counts": {
                            "type": "object",
                            "properties": {
                              "new": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "persistent": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "changed": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "resolved": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "unscanned": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "incomparable": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              }
                            },
                            "required": [
                              "new",
                              "persistent",
                              "changed",
                              "resolved",
                              "unscanned",
                              "incomparable"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "required": [
                          "state",
                          "counts"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "findingCounts",
                  "issueCount",
                  "taskCounts",
                  "failedModules",
                  "alertsRaised",
                  "comparison"
                ],
                "additionalProperties": false
              },
              "links": {
                "type": "object",
                "properties": {
                  "scanRun": {
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 2048,
                        "format": "uri"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "scanRun"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "organization",
              "site",
              "scanRun",
              "summary",
              "links"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "id",
          "type",
          "apiVersion",
          "createdAt",
          "data"
        ],
        "additionalProperties": false
      },
      "WebhookPingPayload": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "type": {
            "type": "string",
            "const": "webhook.ping"
          },
          "apiVersion": {
            "type": "number",
            "const": 1
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
          },
          "data": {
            "type": "object",
            "properties": {
              "organization": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  "slug": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 253
                  }
                },
                "required": [
                  "id",
                  "slug"
                ],
                "additionalProperties": false
              },
              "endpoint": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  }
                },
                "required": [
                  "id"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "organization",
              "endpoint"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "id",
          "type",
          "apiVersion",
          "createdAt",
          "data"
        ],
        "additionalProperties": false
      }
    }
  }
}
