{
  "openapi": "3.1.0",
  "info": {
    "title": "RequestGuard API",
    "version": "v1",
    "description": "Security lookups and authenticated Suite, Email and Lookups workspace management. Intelligence routes require an active workspace API key; free access is limited to geolocation and vulnerabilities. Hanko sessions authorize dashboard/account endpoints. One target consumes one lookup unit; bulk/CIDR routes reserve all sampled target units atomically. Go/CAPTCHA retain their separate contracts."
  },
  "servers": [
    {
      "url": "https://api.requestguard.com/v1"
    }
  ],
  "security": [
    {
      "BearerAuth": []
    },
    {
      "ApiKeyHeader": []
    }
  ],
  "paths": {
    "/assess": {
      "post": {
        "summary": "Run a fraud and abuse risk assessment",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssessmentRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Assessment result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssessmentResult"
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "full",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "assessment",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires full lookup access from an active Suite or Lookups plan. Reserves 1 lookup unit before provider work. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store."
      }
    },
    "/ip/{ip}": {
      "get": {
        "summary": "IP intelligence",
        "parameters": [
          {
            "$ref": "#/components/parameters/Ip"
          },
          {
            "name": "ip",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "IP intelligence",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IpReputation"
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "full",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "ip-intelligence",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires full lookup access from an active Suite or Lookups plan. Reserves 1 lookup unit before provider work. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store."
      }
    },
    "/ip/{ip}/geo": {
      "get": {
        "summary": "IP geolocation",
        "parameters": [
          {
            "$ref": "#/components/parameters/Ip"
          },
          {
            "name": "ip",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "IP geolocation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IpGeolocation"
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "geolocation",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "ip-geolocation",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Available within the free 1,000-unit monthly allowance. Reserves 1 lookup unit before provider work. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store."
      }
    },
    "/ip/{ip}/reputation": {
      "get": {
        "summary": "IP reputation",
        "parameters": [
          {
            "$ref": "#/components/parameters/Ip"
          },
          {
            "name": "ip",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "IP reputation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IpReputation"
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "full",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "ip-reputation",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires full lookup access from an active Suite or Lookups plan. Reserves 1 lookup unit before provider work. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store."
      }
    },
    "/ip/{ip}/rdap": {
      "get": {
        "summary": "IP RDAP lookup",
        "parameters": [
          {
            "$ref": "#/components/parameters/Ip"
          },
          {
            "name": "ip",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "IP RDAP summary",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RdapSummary"
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "full",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "ip-rdap",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires full lookup access from an active Suite or Lookups plan. Reserves 1 lookup unit before provider work. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store."
      }
    },
    "/asn/{asn}": {
      "get": {
        "summary": "ASN intelligence",
        "parameters": [
          {
            "name": "asn",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "ASN intelligence",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AsnIntelligence"
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "full",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "asn",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires full lookup access from an active Suite or Lookups plan. Reserves 1 lookup unit before provider work. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store."
      }
    },
    "/domain/{domain}": {
      "get": {
        "summary": "Domain intelligence",
        "parameters": [
          {
            "$ref": "#/components/parameters/Domain"
          },
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Domain intelligence",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DomainIntelligence"
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "full",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "domain-intelligence",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires full lookup access from an active Suite or Lookups plan. Reserves 1 lookup unit before provider work. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store."
      }
    },
    "/domain/{domain}/subdomains": {
      "get": {
        "summary": "Observed subdomains",
        "description": "Returns certificate transparency hostname observations for the registrable apex of the supplied hostname. Treat each observation as historical naming data and check current DNS, activity, and risk through separate signals. Requires full lookup access from an active Suite or Lookups plan. Reserves 1 lookup unit before provider work. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Domain"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 500,
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Observed subdomains",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubdomainResponse"
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "503": {
            "description": "The certificate transparency source is unavailable and no retained response can be used",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiFailure"
                }
              }
            }
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "full",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "domain-subdomains",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ]
      }
    },
    "/domain/{domain}/infrastructure": {
      "get": {
        "summary": "Hostname infrastructure",
        "description": "Resolves current A, AAAA, and CNAME records for a hostname and returns IP network registration and location fields when available. CDN and reverse-proxy addresses identify the edge network, not the origin server. Requires full lookup access from an active Suite or Lookups plan. Reserves 1 lookup unit before provider work. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Domain"
          },
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Current hostname infrastructure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HostInfrastructureResponse"
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "503": {
            "description": "DNS or IP network data is temporarily unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiFailure"
                }
              }
            }
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "full",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "domain-infrastructure",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ]
      }
    },
    "/domain/{domain}/rdap": {
      "get": {
        "summary": "Domain RDAP lookup",
        "parameters": [
          {
            "$ref": "#/components/parameters/Domain"
          },
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Domain RDAP summary",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RdapSummary"
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "full",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "domain-rdap",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires full lookup access from an active Suite or Lookups plan. Reserves 1 lookup unit before provider work. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store."
      }
    },
    "/dns/lookup": {
      "get": {
        "summary": "DNS records lookup",
        "parameters": [
          {
            "name": "domain",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "type",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "A"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "DNS records",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DnsLookup"
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "full",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "dns",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires full lookup access from an active Suite or Lookups plan. Reserves 1 lookup unit before provider work. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store."
      }
    },
    "/email/check": {
      "post": {
        "summary": "Email risk lookup",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmailCheckRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Email risk",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailRisk"
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "full",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "email-risk",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires full lookup access from an active Suite or Lookups plan. Reserves 1 lookup unit before provider work. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store."
      }
    },
    "/email/security": {
      "get": {
        "summary": "Email authentication records",
        "parameters": [
          {
            "name": "domain",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "SPF, DKIM, and DMARC posture",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailSecurity"
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "full",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "email-security",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires full lookup access from an active Suite or Lookups plan. Reserves 1 lookup unit before provider work. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store."
      }
    },
    "/host/{host}/ssl": {
      "get": {
        "summary": "SSL certificate lookup",
        "parameters": [
          {
            "$ref": "#/components/parameters/Host"
          },
          {
            "name": "host",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "SSL certificate summary",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SslCertificate"
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "full",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "ssl",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires full lookup access from an active Suite or Lookups plan. Reserves 1 lookup unit before provider work. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store."
      }
    },
    "/host/{host}/status": {
      "get": {
        "summary": "Server status check",
        "parameters": [
          {
            "$ref": "#/components/parameters/Host"
          },
          {
            "name": "host",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Server status",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServerStatus"
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "full",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "host-status",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires full lookup access from an active Suite or Lookups plan. Reserves 1 lookup unit before provider work. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store."
      }
    },
    "/online-check": {
      "post": {
        "summary": "Global website reachability check",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OnlineCheckRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Online check result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OnlineCheckResult"
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "full",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "online-check",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires full lookup access from an active Suite or Lookups plan. Reserves 1 lookup unit before provider work. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store."
      }
    },
    "/blocklists/check": {
      "post": {
        "summary": "IP/domain blocklist lookup",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BlocklistCheckRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Blocklist result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BlocklistCheckResult"
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "full",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "targets",
        "x-requestguard-lookup-id": "blocklist-check",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires full lookup access from an active Suite or Lookups plan. Reserves one unit per submitted target (1\u201320); multiple targets require bulk entitlement. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store."
      }
    },
    "/cidr/check": {
      "post": {
        "summary": "CIDR/subnet reputation check",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CidrCheckRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "CIDR check result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CidrCheckResult"
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "full",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "cidr",
        "x-requestguard-lookup-id": "cidr",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires full lookup access from an active Suite or Lookups plan. Requires bulk entitlement. Reserves actual sampled IPv4 addresses: 2^(32-prefix) for /29\u2013/32; 7 for wider ranges. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store."
      }
    },
    "/vulnerabilities/npm/{package}/": {
      "get": {
        "summary": "Public npm package vulnerability intelligence",
        "description": "Returns public npm package metadata, weekly download counts, and known OSV.dev advisories. This endpoint does not require authentication. Scoped package names such as @babel/core must be URL-encoded in path segments as needed, for example %40babel%2Fcore. Available within the free 1,000-unit monthly allowance. Reserves 1 lookup unit before provider work. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store.",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "package",
            "in": "path",
            "required": true,
            "description": "npm package name. Scoped package names such as @babel/core should be URL-encoded as needed when used in the path.",
            "schema": {
              "type": "string",
              "examples": [
                "express",
                "@babel/core"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "npm package vulnerability intelligence",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NpmVulnerabilityIntelligence"
                },
                "example": {
                  "package": {
                    "name": "express",
                    "ecosystem": "npm",
                    "latestVersion": "5.1.0",
                    "description": "Fast, unopinionated, minimalist web framework",
                    "license": "MIT",
                    "repositoryUrl": "https://github.com/expressjs/express"
                  },
                  "downloads": {
                    "weeklyDownloads": 104192101,
                    "start": "2026-05-10",
                    "end": "2026-05-16"
                  },
                  "summary": {
                    "total": 0,
                    "highest": "none",
                    "counts": {
                      "critical": 0,
                      "high": 0,
                      "moderate": 0,
                      "low": 0,
                      "unknown": 0
                    }
                  },
                  "advisories": [
                    {
                      "id": "GHSA-example",
                      "aliases": [
                        "CVE-2026-0000"
                      ],
                      "title": "Example advisory",
                      "severity": "moderate",
                      "publishedAt": "2026-05-01T00:00:00.000Z",
                      "modifiedAt": "2026-05-10T00:00:00.000Z",
                      "affectedRanges": [
                        ">=0 <4.21.2"
                      ],
                      "fixedVersions": [
                        "4.21.2"
                      ],
                      "references": [
                        "https://osv.dev/vulnerability/GHSA-example"
                      ]
                    }
                  ],
                  "sources": {
                    "npm": "https://registry.npmjs.org/{package}",
                    "downloads": "https://api.npmjs.org/downloads/point/last-week/{package}",
                    "osv": "https://api.osv.dev/v1/query"
                  },
                  "checkedAt": "2026-05-17T12:00:00.000Z",
                  "noAdvisoryCopy": "No known OSV advisories found for this npm package. This is not a security guarantee; continue to monitor updates and audit your dependency graph."
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "404": {
            "description": "npm package not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiFailure"
                }
              }
            }
          },
          "503": {
            "description": "npm registry, npm downloads, or OSV upstream unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiFailure"
                }
              }
            }
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "vulnerabilities",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "vulnerability-npm"
      }
    },
    "/vulnerabilities/packages/{ecosystem}/{coordinate}/": {
      "get": {
        "summary": "Package vulnerability intelligence",
        "description": "Returns registry metadata, published OSV advisories, exact-version results, and exact CVE matches in CISA KEV for npm, Composer, PyPI, Maven, and Go packages. Package evidence is not part of the RequestGuard fraud score. This endpoint is public. Available within the free 1,000-unit monthly allowance. Reserves 1 lookup unit before provider work. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store.",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "ecosystem",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "npm",
                "composer",
                "pypi",
                "maven",
                "go"
              ]
            }
          },
          {
            "name": "coordinate",
            "in": "path",
            "required": true,
            "description": "Registry package coordinate. URL-encode slash-delimited coordinates when a client cannot preserve path segments.",
            "schema": {
              "type": "string",
              "examples": [
                "express",
                "symfony/http-kernel",
                "django",
                "org.apache.logging.log4j:log4j-core",
                "golang.org/x/crypto"
              ]
            }
          },
          {
            "name": "version",
            "in": "query",
            "description": "Exact registry version to validate and query in OSV. The latest registry version is used when omitted.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 500,
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Package metadata and vulnerability evidence",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PackageVulnerabilityReport"
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "404": {
            "description": "Package or selected version not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiFailure"
                }
              }
            }
          },
          "503": {
            "description": "The package registry is unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiFailure"
                }
              }
            }
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "vulnerabilities",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "vulnerability-package"
      }
    },
    "/vulnerabilities/cve/{cveId}/": {
      "get": {
        "summary": "CVE vulnerability evidence",
        "description": "Returns OSV records and an exact CISA KEV catalog match for a CVE identifier. This endpoint is public. Available within the free 1,000-unit monthly allowance. Reserves 1 lookup unit before provider work. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store.",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "cveId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^CVE-[0-9]{4}-[0-9]{4,}$",
              "example": "CVE-2021-44228"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "CVE evidence",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CveVulnerabilityReport"
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "404": {
            "description": "CVE not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiFailure"
                }
              }
            }
          },
          "503": {
            "description": "OSV and CISA KEV are unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiFailure"
                }
              }
            }
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "vulnerabilities",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "vulnerability-cve"
      }
    },
    "/vulnerabilities/kev/": {
      "get": {
        "summary": "CISA Known Exploited Vulnerabilities catalog",
        "description": "Searches the public CISA KEV catalog by exact catalog fields. This endpoint does not infer package matches and does not require authentication. Available within the free 1,000-unit monthly allowance. Reserves 1 lookup unit before provider work. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store.",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "vendor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "product",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ransomware",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "all",
                "known",
                "unknown"
              ]
            }
          },
          {
            "name": "addedFrom",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "addedTo",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Filtered CISA KEV entries",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KnownExploitedResponse"
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "503": {
            "description": "CISA KEV is unavailable and no stale snapshot is available",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiFailure"
                }
              }
            }
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "vulnerabilities",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "vulnerability-kev"
      }
    },
    "/domain/{domain}/public-exposure": {
      "get": {
        "summary": "Get public exposure progress and redacted observations",
        "description": "Read-only polling. Website scans start bounded background checks. Findings preserve categories and statuses but hide sensitive paths, signatures and retest links. A public login alone is not a vulnerability. Requires full lookup access from an active Suite or Lookups plan. Reserves 1 lookup unit before provider work. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Domain"
          },
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Latest redacted exposure report, including pending progress.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicExposureReport"
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "description": "No retained exposure scan (EXPOSURE_NOT_FOUND)."
          },
          "429": {
            "description": "API quota exceeded."
          },
          "503": {
            "description": "Exposure results temporarily unavailable."
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "full",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "public-exposure",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ]
      }
    },
    "/website-scans": {
      "post": {
        "summary": "Run or reuse a website security scan",
        "description": "Normalizes the submitted hostname to its registrable apex. A fresh security scan returns 201; a result within five minutes returns 200 with _meta.cached true. Explicit submissions also enqueue or reuse independent public-exposure checks when enabled, even if security results are cached. The optional public_exposure reference provides a read-only polling URL. Requires full lookup access from an active Suite or Lookups plan. Reserves 1 lookup unit before provider work. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebsiteScanRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Cached website security report",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebsiteSecurityReport"
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "201": {
            "description": "Fresh website security report",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebsiteSecurityReport"
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "description": "Scanner unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiFailure"
                }
              }
            }
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "full",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "website-scan",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ]
      }
    },
    "/domain/{domain}/website-security": {
      "get": {
        "summary": "Get the latest website security report",
        "parameters": [
          {
            "$ref": "#/components/parameters/Domain"
          },
          {
            "name": "domain",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Latest dated website security report",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebsiteSecurityReport"
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "description": "No scan exists (SCAN_NOT_FOUND)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiFailure"
                }
              }
            }
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "full",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "website-security",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires full lookup access from an active Suite or Lookups plan. Reserves 1 lookup unit before provider work. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store."
      }
    },
    "/website-leaderboard": {
      "get": {
        "summary": "List public website security results",
        "parameters": [
          {
            "name": "view",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "top",
                "improved",
                "new"
              ],
              "default": "top"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Paginated leaderboard",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebsiteLeaderboardResult"
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "full",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "website-leaderboard",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires full lookup access from an active Suite or Lookups plan. Reserves 1 lookup unit before provider work. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store."
      }
    },
    "/go/links": {
      "post": {
        "summary": "Create or reuse a protected Go short link",
        "description": "Creates a CAPTCHA-gated Go link. Authentication is optional under the separate Go contract. This operation is outside the lookup allowance; see the dedicated Go OpenAPI specification.",
        "security": [
          {
            "BearerAuth": []
          },
          {}
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GoLinkCreateRequest"
              },
              "examples": {
                "videoEmbed": {
                  "value": {
                    "target_url": "https://video.example.com/embed/private-demo",
                    "expires_at": null,
                    "password": null
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Protected link created or existing active link reused",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GoLinkCreateResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          }
        },
        "x-requestguard-capability": "public-service",
        "x-requestguard-metered": false,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "protected-link"
      }
    },
    "/account": {
      "servers": [
        {
          "url": "https://requestguard.com/api",
          "description": "Authenticated website account and billing API; not under /v1."
        }
      ],
      "get": {
        "summary": "Get selected workspace, entitlements and subscriptions",
        "description": "Selected workspace, active entitlements, paused API key metadata(owner only), subscriptions/pending changes, checkout gate, and UTC monthly lookup/email usage. Private,no-store.",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceAccount"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "503": {
            "$ref": "#/components/responses/ProductUnavailable"
          }
        }
      }
    },
    "/billing/subscriptions": {
      "servers": [
        {
          "url": "https://requestguard.com/api",
          "description": "Authenticated website account and billing API; not under /v1."
        }
      ],
      "get": {
        "summary": "Get current workspace billing summary",
        "description": "Selected workspace, active entitlements, paused API key metadata(owner only), subscriptions/pending changes, checkout gate, and UTC monthly lookup/email usage. Private,no-store.",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceAccount"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "503": {
            "$ref": "#/components/responses/ProductUnavailable"
          }
        }
      }
    },
    "/account/workspace": {
      "servers": [
        {
          "url": "https://requestguard.com/api",
          "description": "Authenticated website account and billing API; not under /v1."
        }
      ],
      "post": {
        "summary": "Select an accessible workspace",
        "description": "Validates membership and sets the HttpOnly, Secure, SameSite=Lax rg_workspace cookie for subsequent requests.",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "workspaceId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "workspaceId"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "503": {
            "$ref": "#/components/responses/ProductUnavailable"
          },
          "400": {
            "$ref": "#/components/responses/ProductBadRequest"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "workspaceId": {
                    "type": "string"
                  }
                },
                "required": [
                  "workspaceId"
                ]
              }
            }
          }
        }
      }
    },
    "/account/websites": {
      "servers": [
        {
          "url": "https://requestguard.com/api",
          "description": "Authenticated website account and billing API; not under /v1."
        }
      ],
      "get": {
        "summary": "List monitored websites",
        "description": "",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "websites": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/MonitoredWebsite"
                      }
                    },
                    "limit": {
                      "type": "integer",
                      "minimum": 0
                    }
                  },
                  "required": [
                    "websites",
                    "limit"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "503": {
            "$ref": "#/components/responses/ProductUnavailable"
          }
        }
      },
      "post": {
        "summary": "Enroll an exact website hostname",
        "description": "Owner only, active Suite required. Starter 1, Business 5, Agency 25 exact hostnames. Free has 0 saved monitoring slots. Apex and www use separate slots. Redirect suggestions never enroll another hostname automatically. Existing over-limit enrollments are retained and paused.",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          }
        ],
        "responses": {
          "201": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "website": {
                      "$ref": "#/components/schemas/MonitoredWebsite"
                    },
                    "verification": {
                      "$ref": "#/components/schemas/DnsVerification"
                    },
                    "redirect_suggestion": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "website",
                    "verification",
                    "redirect_suggestion"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "503": {
            "$ref": "#/components/responses/ProductUnavailable"
          },
          "400": {
            "$ref": "#/components/responses/ProductBadRequest"
          },
          "409": {
            "description": "Hostname already enrolled in this workspace or website capacity reached.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductError"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "hostname": {
                    "type": "string"
                  },
                  "label": {
                    "type": "string",
                    "description": "Trimmed to 120 characters by the server."
                  }
                },
                "required": [
                  "hostname"
                ]
              }
            }
          }
        }
      }
    },
    "/account/websites/{id}": {
      "servers": [
        {
          "url": "https://requestguard.com/api",
          "description": "Authenticated website account and billing API; not under /v1."
        }
      ],
      "get": {
        "summary": "Read private website evidence",
        "description": "",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebsiteDetail"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "503": {
            "$ref": "#/components/responses/ProductUnavailable"
          },
          "404": {
            "description": "Website is absent from the selected workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductError"
                }
              }
            }
          }
        }
      },
      "patch": {
        "summary": "Update monitored website settings",
        "description": "Workspace owner only. Enable monitoring only after DNS verification and with active plan capacity. Disabling monitoring also unpublishes the profile. Label and brand are trimmed to 120 characters.",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "website": {
                      "$ref": "#/components/schemas/MonitoredWebsite"
                    }
                  },
                  "required": [
                    "website"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "503": {
            "$ref": "#/components/responses/ProductUnavailable"
          },
          "400": {
            "$ref": "#/components/responses/ProductBadRequest"
          },
          "404": {
            "description": "Website not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductError"
                }
              }
            }
          },
          "409": {
            "description": "Verification, active monitoring entitlement or plan capacity required.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductError"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "label": {
                    "type": "string",
                    "description": "Trimmed to 120 characters by the server."
                  },
                  "report_brand": {
                    "type": "string",
                    "description": "Trimmed to 120 characters by the server."
                  },
                  "monitoring_enabled": {
                    "type": "boolean"
                  }
                },
                "required": []
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Remove a monitored website",
        "description": "Workspace owner only. Soft-deletes the website, disables monitoring, unpublishes its profile and cancels queued/running work.",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "deleted": {
                      "const": true
                    }
                  },
                  "required": [
                    "deleted"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "503": {
            "$ref": "#/components/responses/ProductUnavailable"
          },
          "400": {
            "$ref": "#/components/responses/ProductBadRequest"
          },
          "404": {
            "description": "Website not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductError"
                }
              }
            }
          }
        }
      },
      "parameters": [
        {
          "name": "id",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          },
          "description": "Monitored website ID in the selected workspace."
        }
      ]
    },
    "/account/websites/{id}/verify": {
      "servers": [
        {
          "url": "https://requestguard.com/api",
          "description": "Authenticated website account and billing API; not under /v1."
        }
      ],
      "post": {
        "summary": "Verify website DNS control",
        "description": "Workspace owner only. Checks the current TXT record. A missing proof returns verified=false and disables monitoring and publication; DNS transport failure returns 503.",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "verified": {
                      "type": "boolean"
                    },
                    "website": {
                      "$ref": "#/components/schemas/MonitoredWebsite"
                    }
                  },
                  "required": [
                    "verified",
                    "website"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "503": {
            "$ref": "#/components/responses/ProductUnavailable"
          },
          "400": {
            "$ref": "#/components/responses/ProductBadRequest"
          },
          "404": {
            "description": "Website not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductError"
                }
              }
            }
          }
        }
      },
      "parameters": [
        {
          "name": "id",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          },
          "description": "Monitored website ID in the selected workspace."
        }
      ]
    },
    "/account/websites/{id}/scan": {
      "servers": [
        {
          "url": "https://requestguard.com/api",
          "description": "Authenticated website account and billing API; not under /v1."
        }
      ],
      "post": {
        "summary": "Queue a manual website recheck",
        "description": "Active Suite and included exact hostname required. Manual recheck while within website capacity: 5 per UTC day, 5-minute cooldown, no overlapping run. Accepting work does not mean checks passed.",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          }
        ],
        "responses": {
          "202": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "run_id": {
                      "type": "string"
                    },
                    "status": {
                      "const": "queued"
                    }
                  },
                  "required": [
                    "run_id",
                    "status"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "503": {
            "$ref": "#/components/responses/ProductUnavailable"
          },
          "400": {
            "$ref": "#/components/responses/ProductBadRequest"
          },
          "404": {
            "description": "Website not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductError"
                }
              }
            }
          },
          "409": {
            "description": "Domain-control verification is required.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductError"
                }
              }
            }
          },
          "429": {
            "description": "A scan is already active, the five-minute cooldown is active, or the five-per-day manual allowance is exhausted.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductError"
                }
              }
            }
          }
        }
      },
      "parameters": [
        {
          "name": "id",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          },
          "description": "Monitored website ID in the selected workspace."
        }
      ]
    },
    "/account/websites/{id}/runs": {
      "servers": [
        {
          "url": "https://requestguard.com/api",
          "description": "Authenticated website account and billing API; not under /v1."
        }
      ],
      "get": {
        "summary": "List private website scan history",
        "description": "Private unexpired run history, newest first. Expiry is captured when queued: Starter 30, Business 90, Agency 365 days; legacy rows backfilled 90 days. Downgrades do not shorten an existing run expiry. At most 600 rows/page; use opaque next_cursor until null. Lifecycle and expires_at are Unix milliseconds.",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque continuation cursor from the preceding response. URL-encode when constructing a query string.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "runs": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/MonitoringRun"
                      },
                      "maxItems": 600
                    },
                    "next_cursor": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "runs",
                    "next_cursor"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "503": {
            "$ref": "#/components/responses/ProductUnavailable"
          },
          "404": {
            "description": "Website not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductError"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ProductBadRequest"
          }
        }
      },
      "parameters": [
        {
          "name": "id",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          },
          "description": "Monitored website ID in the selected workspace."
        }
      ]
    },
    "/account/websites/{id}/publish": {
      "servers": [
        {
          "url": "https://requestguard.com/api",
          "description": "Authenticated website account and billing API; not under /v1."
        }
      ],
      "post": {
        "summary": "Publish or unpublish website evidence",
        "description": "Workspace owner only. Publishing requires current domain-control proof, enabled paid monitoring and a completed baseline. Returned profile_url is a relative HTML route such as /trust/example.com/.",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "website": {
                      "$ref": "#/components/schemas/MonitoredWebsite"
                    },
                    "profile_url": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "website",
                    "profile_url"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "503": {
            "$ref": "#/components/responses/ProductUnavailable"
          },
          "400": {
            "$ref": "#/components/responses/ProductBadRequest"
          },
          "404": {
            "description": "Website not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductError"
                }
              }
            }
          },
          "409": {
            "description": "Baseline, domain proof, monitoring entitlement or exclusive public hostname publication requirement not satisfied.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductError"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "published": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "published"
                ]
              }
            }
          }
        }
      },
      "parameters": [
        {
          "name": "id",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "uuid"
          },
          "description": "Monitored website ID in the selected workspace."
        }
      ]
    },
    "/account/email/status": {
      "servers": [
        {
          "url": "https://requestguard.com/api",
          "description": "Authenticated website account and billing API; not under /v1."
        }
      ],
      "get": {
        "summary": "Read company email allowance and risk totals",
        "description": "Read selected workspace sender slots and monthly shared allowance. Paid sender slots may be pending, verified, paused after a downgrade, or expired. Free per-mailbox usage is separate from this workspace meter.",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailGuardStatus"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "503": {
            "$ref": "#/components/responses/ProductUnavailable"
          }
        }
      }
    },
    "/account/email/domain": {
      "servers": [
        {
          "url": "https://requestguard.com/api",
          "description": "Authenticated website account and billing API; not under /v1."
        }
      ],
      "post": {
        "summary": "Retired company-domain email enrollment",
        "description": "Owner-only compatibility endpoint. Company-domain enrollment has retired; use individual confirmed sender slots.",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          }
        ],
        "responses": {
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "400": {
            "$ref": "#/components/responses/ProductBadRequest"
          },
          "409": {
            "$ref": "#/components/responses/ProductConflict"
          },
          "503": {
            "$ref": "#/components/responses/ProductUnavailable"
          },
          "410": {
            "description": "Use Email Guard sender invitations.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "code": {
                          "const": "EMAIL_DOMAIN_RETIRED"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "code",
                        "message"
                      ]
                    },
                    "manageUrl": {
                      "const": "/dashboard/email/"
                    }
                  },
                  "required": [
                    "error",
                    "manageUrl"
                  ]
                }
              }
            }
          }
        },
        "deprecated": true
      },
      "delete": {
        "summary": "Retired company-domain email enrollment",
        "description": "Owner-only compatibility endpoint. Company-domain enrollment has retired; use individual confirmed sender slots.",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          }
        ],
        "responses": {
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "400": {
            "$ref": "#/components/responses/ProductBadRequest"
          },
          "409": {
            "$ref": "#/components/responses/ProductConflict"
          },
          "503": {
            "$ref": "#/components/responses/ProductUnavailable"
          },
          "410": {
            "description": "Use Email Guard sender invitations.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "code": {
                          "const": "EMAIL_DOMAIN_RETIRED"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "code",
                        "message"
                      ]
                    },
                    "manageUrl": {
                      "const": "/dashboard/email/"
                    }
                  },
                  "required": [
                    "error",
                    "manageUrl"
                  ]
                }
              }
            }
          }
        },
        "deprecated": true
      }
    },
    "/account/email/verify": {
      "servers": [
        {
          "url": "https://requestguard.com/api",
          "description": "Authenticated website account and billing API; not under /v1."
        }
      ],
      "post": {
        "summary": "Retired company-domain email enrollment",
        "description": "Owner-only compatibility endpoint. Company-domain enrollment has retired; use individual confirmed sender slots.",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          }
        ],
        "responses": {
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "400": {
            "$ref": "#/components/responses/ProductBadRequest"
          },
          "409": {
            "$ref": "#/components/responses/ProductConflict"
          },
          "503": {
            "$ref": "#/components/responses/ProductUnavailable"
          },
          "410": {
            "description": "Use Email Guard sender invitations.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "object",
                      "properties": {
                        "code": {
                          "const": "EMAIL_DOMAIN_RETIRED"
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "code",
                        "message"
                      ]
                    },
                    "manageUrl": {
                      "const": "/dashboard/email/"
                    }
                  },
                  "required": [
                    "error",
                    "manageUrl"
                  ]
                }
              }
            }
          }
        },
        "deprecated": true
      }
    },
    "/account/members": {
      "servers": [
        {
          "url": "https://requestguard.com/api",
          "description": "Authenticated website account and billing API; not under /v1."
        }
      ],
      "get": {
        "summary": "List workspace members and seat capacity",
        "description": "",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "members": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/WorkspaceMember"
                      }
                    },
                    "teamSeats": {
                      "type": "integer",
                      "minimum": 0
                    }
                  },
                  "required": [
                    "members",
                    "teamSeats"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "503": {
            "$ref": "#/components/responses/ProductUnavailable"
          }
        }
      },
      "delete": {
        "summary": "Remove a workspace member",
        "description": "Workspace owner only. Removes members only. The owner cannot be removed through this endpoint.",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "removed": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "removed"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "503": {
            "$ref": "#/components/responses/ProductUnavailable"
          },
          "400": {
            "$ref": "#/components/responses/ProductBadRequest"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "userId": {
                    "type": "string"
                  }
                },
                "required": [
                  "userId"
                ]
              }
            }
          }
        }
      }
    },
    "/account/invitations": {
      "servers": [
        {
          "url": "https://requestguard.com/api",
          "description": "Authenticated website account and billing API; not under /v1."
        }
      ],
      "get": {
        "summary": "List workspace invitations",
        "description": "Workspace owner only.",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "invitations": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/WorkspaceInvitation"
                      }
                    }
                  },
                  "required": [
                    "invitations"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "503": {
            "$ref": "#/components/responses/ProductUnavailable"
          }
        }
      },
      "post": {
        "summary": "Invite a team member",
        "description": "Workspace owner only. Requires Website Agency or Business team access. Pending valid invitations consume seats. The seven-day single-use token is delivered by email and is not returned.",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          }
        ],
        "responses": {
          "201": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "invitation": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "email": {
                          "type": "string",
                          "format": "email"
                        },
                        "expires_at": {
                          "type": "string",
                          "format": "date-time"
                        }
                      },
                      "required": [
                        "id",
                        "email",
                        "expires_at"
                      ]
                    }
                  },
                  "required": [
                    "invitation"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "503": {
            "description": "Invitation could not be queued and was revoked.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductError"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ProductBadRequest"
          },
          "409": {
            "description": "Member or active invitation already exists, or no team seats remain.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductError"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "email": {
                    "type": "string",
                    "format": "email",
                    "maxLength": 254
                  }
                },
                "required": [
                  "email"
                ]
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Revoke an unused invitation",
        "description": "Workspace owner only. Revocation is workspace-scoped. A malformed request without an ID returns 400 with an empty body.",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "revoked": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "revoked"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "503": {
            "$ref": "#/components/responses/ProductUnavailable"
          },
          "400": {
            "description": "Missing invitation ID; the response body is empty."
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  }
                },
                "required": [
                  "id"
                ]
              }
            }
          }
        }
      }
    },
    "/account/invitations/accept": {
      "servers": [
        {
          "url": "https://requestguard.com/api",
          "description": "Authenticated website account and billing API; not under /v1."
        }
      ],
      "post": {
        "summary": "Accept a team invitation",
        "description": "The Hanko-validated email must match the invitation. Rechecks current plan and capacity, consumes the token once, and selects the invited workspace using rg_workspace cookie.",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "accepted": {
                      "const": true
                    },
                    "workspaceId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "accepted",
                    "workspaceId"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "503": {
            "$ref": "#/components/responses/ProductUnavailable"
          },
          "400": {
            "$ref": "#/components/responses/ProductBadRequest"
          },
          "409": {
            "description": "Invitation is no longer available or the team is full.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductError"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "token": {
                    "type": "string"
                  }
                },
                "required": [
                  "token"
                ]
              }
            }
          }
        }
      }
    },
    "/billing/checkout": {
      "servers": [
        {
          "url": "https://requestguard.com/api",
          "description": "Authenticated website account and billing API; not under /v1."
        }
      ],
      "post": {
        "summary": "Create or reuse product checkout",
        "description": "Owner only. Requires explicit POLAR_CHECKOUT_ENABLED=1 and configured provider mapping. Suite and Email offer annual intervals; Lookups is monthly only. One subscription per family; fully redundant cross-family purchases are rejected in either direction. Active billing requests serialize; checkout alone grants no access.",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "url": {
                      "type": "string",
                      "format": "uri"
                    }
                  },
                  "required": [
                    "url"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "503": {
            "description": "CHECKOUT_UNAVAILABLE: configured product or provider is unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductError"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/ProductBadRequest"
          },
          "409": {
            "description": "SUBSCRIPTION_CONFLICT or CHECKOUT_PENDING.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductError"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "plan": {
                    "$ref": "#/components/schemas/ProductPlanSlug"
                  },
                  "interval": {
                    "type": "string",
                    "enum": [
                      "monthly",
                      "annual"
                    ],
                    "default": "monthly"
                  }
                },
                "required": [
                  "plan"
                ]
              }
            }
          }
        }
      }
    },
    "/billing/portal": {
      "servers": [
        {
          "url": "https://requestguard.com/api",
          "description": "Authenticated website account and billing API; not under /v1."
        }
      ],
      "post": {
        "summary": "Create a billing portal session",
        "description": "Workspace owner only. Uses the selected workspace provider customer identity.",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "url": {
                      "type": "string",
                      "format": "uri"
                    }
                  },
                  "required": [
                    "url"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "503": {
            "$ref": "#/components/responses/ProductUnavailable"
          },
          "400": {
            "$ref": "#/components/responses/ProductBadRequest"
          },
          "502": {
            "description": "PORTAL_UNAVAILABLE: provider session creation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductError"
                }
              }
            }
          }
        }
      }
    },
    "/account/email/senders": {
      "servers": [
        {
          "url": "https://requestguard.com/api",
          "description": "Hanko session account API; API keys do not authorize workspace administration."
        }
      ],
      "post": {
        "summary": "Invite a verified email sender",
        "description": "Owner only, paid email allowance required. Sends a 24-hour single-use confirmation link to the exact normalized mailbox. Valid pending claims count toward capacity. One-minute re-add confirmation cooldown. No raw token is returned.",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailGuardStatus"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "400": {
            "$ref": "#/components/responses/ProductBadRequest"
          },
          "409": {
            "$ref": "#/components/responses/ProductConflict"
          },
          "503": {
            "$ref": "#/components/responses/ProductUnavailable"
          },
          "429": {
            "description": "CONFIRMATION_COOLDOWN: wait before requesting another confirmation for this mailbox.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductError"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "email": {
                    "type": "string",
                    "format": "email"
                  }
                },
                "required": [
                  "email"
                ]
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Remove a workspace email sender",
        "description": "Owner only. Removes the selected claim without resetting monthly usage. Unknown or other-workspace IDs are a no-op.",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailGuardStatus"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "400": {
            "$ref": "#/components/responses/ProductBadRequest"
          },
          "409": {
            "$ref": "#/components/responses/ProductConflict"
          },
          "503": {
            "$ref": "#/components/responses/ProductUnavailable"
          },
          "429": {
            "description": "CONFIRMATION_COOLDOWN: wait before requesting another confirmation for this mailbox.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductError"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  }
                },
                "required": [
                  "id"
                ]
              }
            }
          }
        }
      }
    },
    "/email/verify/": {
      "servers": [
        {
          "url": "https://requestguard.com"
        }
      ],
      "get": {
        "summary": "Preview an email sender confirmation",
        "description": "Public HTML only. GET never activates the sender. Token expires 24 hours after issuance. Page is noindex and no-referrer.",
        "security": [],
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-f0-9]{64}$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Confirmation preview or outcome page; never contains message content. Invalid or expired tokens render an explanatory HTML page.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "Referrer-Policy": {
                "schema": {
                  "type": "string",
                  "const": "no-referrer"
                }
              }
            }
          },
          "503": {
            "description": "Confirmation storage unavailable."
          }
        }
      },
      "post": {
        "summary": "Confirm control of an exact email sender",
        "description": "Public HTML only; no account required. Requires matching Origin and form confirm=yes. Consumes a single-use 24-hour token; confirmed sender may transfer from its previous workspace. GET requests and expired tokens do not activate a slot.",
        "security": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "properties": {
                  "token": {
                    "type": "string",
                    "pattern": "^[a-f0-9]{64}$"
                  },
                  "confirm": {
                    "const": "yes"
                  }
                },
                "required": [
                  "token",
                  "confirm"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Confirmation preview or outcome page; never contains message content. Invalid or expired tokens render an explanatory HTML page.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "Referrer-Policy": {
                "schema": {
                  "type": "string",
                  "const": "no-referrer"
                }
              }
            }
          },
          "403": {
            "description": "Invalid request origin."
          },
          "503": {
            "description": "Confirmation storage unavailable."
          }
        }
      }
    },
    "/billing/change": {
      "servers": [
        {
          "url": "https://requestguard.com/api",
          "description": "Hanko session account API; API keys do not authorize workspace administration."
        }
      ],
      "post": {
        "summary": "Change an existing subscription",
        "description": "Owner only. Requires explicit checkout enablement. Same-family upgrades use immediate invoice/payment; downgrades use next_period and retain the current verified allowance until renewal. Provider authoritative state is retrieved before and after update. Unknown payment outcomes return503 and retain a short reservation; retry refresh prevents duplicate charges. Pending changes are exposed through account/subscription responses.",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "subscription": {
                      "$ref": "#/components/schemas/WorkspaceSubscription"
                    },
                    "behavior": {
                      "type": "string",
                      "enum": [
                        "invoice",
                        "next_period"
                      ]
                    },
                    "unchanged": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "subscription"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "400": {
            "$ref": "#/components/responses/ProductBadRequest"
          },
          "409": {
            "$ref": "#/components/responses/ProductConflict"
          },
          "503": {
            "$ref": "#/components/responses/ProductUnavailable"
          },
          "404": {
            "description": "Subscription does not belong to selected workspace.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductError"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "subscription_id": {
                    "type": "string"
                  },
                  "plan": {
                    "$ref": "#/components/schemas/ProductPlanSlug"
                  },
                  "interval": {
                    "type": "string",
                    "enum": [
                      "monthly",
                      "annual"
                    ],
                    "default": "monthly"
                  }
                },
                "required": [
                  "subscription_id",
                  "plan"
                ]
              }
            }
          }
        }
      }
    },
    "/account/api-keys": {
      "servers": [
        {
          "url": "https://requestguard.com/api",
          "description": "Hanko session account API; API keys do not authorize workspace administration."
        }
      ],
      "post": {
        "summary": "Create an API key",
        "description": "Owner only. Atomic plan cap: free/Starter 1, Business/Developer 5, Agency/Growth 25. Raw key is shown once; exceeding current allowance returns 409 API_KEY_LIMIT. Existing excess keys stay paused rather than revoked.",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          }
        ],
        "responses": {
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "400": {
            "$ref": "#/components/responses/ProductBadRequest"
          },
          "409": {
            "$ref": "#/components/responses/ProductConflict"
          },
          "503": {
            "$ref": "#/components/responses/ProductUnavailable"
          },
          "201": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "api_key": {
                      "type": "string"
                    },
                    "key": {
                      "$ref": "#/components/schemas/WorkspaceApiKey"
                    }
                  },
                  "required": [
                    "api_key",
                    "key"
                  ]
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "maxLength": 100
                  }
                },
                "required": []
              }
            }
          }
        }
      }
    },
    "/account/api-keys/{id}": {
      "servers": [
        {
          "url": "https://requestguard.com/api",
          "description": "Hanko session account API; API keys do not authorize workspace administration."
        }
      ],
      "parameters": [
        {
          "name": "id",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "delete": {
        "summary": "Revoke an API key",
        "description": "Owner only. Revokes a key belonging to the selected workspace.",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "deleted": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "deleted"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "400": {
            "$ref": "#/components/responses/ProductBadRequest"
          },
          "409": {
            "$ref": "#/components/responses/ProductConflict"
          },
          "503": {
            "$ref": "#/components/responses/ProductUnavailable"
          }
        }
      }
    },
    "/geolocation": {
      "get": {
        "summary": "Geolocation",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          }
        },
        "x-requestguard-capability": "geolocation",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "geolocation",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Available within the free 1,000-unit monthly allowance. Reserves 1 lookup unit before provider work. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store."
      }
    },
    "/whois": {
      "get": {
        "summary": "Whois",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          }
        },
        "x-requestguard-capability": "full",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "whois",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires full lookup access from an active Suite or Lookups plan. Reserves 1 lookup unit before provider work. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store."
      }
    },
    "/abuse": {
      "get": {
        "summary": "Abuse",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          }
        },
        "x-requestguard-capability": "full",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "abuse",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires full lookup access from an active Suite or Lookups plan. Reserves 1 lookup unit before provider work. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store."
      }
    },
    "/risk": {
      "get": {
        "summary": "Risk",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          }
        },
        "x-requestguard-capability": "full",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "risk",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires full lookup access from an active Suite or Lookups plan. Reserves 1 lookup unit before provider work. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store."
      }
    },
    "/blocklists": {
      "get": {
        "summary": "Blocklists",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          }
        },
        "x-requestguard-capability": "full",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "blocklists",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires full lookup access from an active Suite or Lookups plan. Reserves 1 lookup unit before provider work. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store."
      }
    },
    "/device/fingerprint": {
      "post": {
        "summary": "Device",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          }
        },
        "x-requestguard-capability": "full",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "device",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires full lookup access from an active Suite or Lookups plan. Reserves 1 lookup unit before provider work. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        }
      }
    },
    "/captcha/test": {
      "post": {
        "summary": "Captcha test",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            },
            "headers": {
              "X-RequestGuard-Quota-Limit": {
                "description": "Workspace UTC monthly lookup-unit allowance.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Used": {
                "description": "Reserved lookup units this UTC month.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Remaining": {
                "description": "Remaining lookup units.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RequestGuard-Quota-Reset": {
                "description": "Next UTC monthly reset.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          }
        },
        "x-requestguard-capability": "full",
        "x-requestguard-metered": true,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "captcha-test",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires full lookup access from an active Suite or Lookups plan. Reserves 1 lookup unit before provider work. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        }
      }
    },
    "/events": {
      "get": {
        "summary": "Events",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "account",
        "x-requestguard-metered": false,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "events",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires an active workspace key; returns only that workspace\u2019s data. Unmetered account management/read operation. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store."
      }
    },
    "/events.csv": {
      "get": {
        "summary": "Events csv",
        "responses": {
          "200": {
            "description": "Private workspace event export.",
            "content": {
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "account",
        "x-requestguard-metered": false,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "events-csv",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires an active workspace key; returns only that workspace\u2019s data. Unmetered account management/read operation. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store."
      }
    },
    "/analytics/summary": {
      "get": {
        "summary": "Analytics",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "account",
        "x-requestguard-metered": false,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "analytics",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires an active workspace key; returns only that workspace\u2019s data. Unmetered account management/read operation. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store."
      }
    },
    "/lookups/history": {
      "get": {
        "summary": "History",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LookupHistory"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "account",
        "x-requestguard-metered": false,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "history",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires an active workspace key; returns only that workspace\u2019s data. Unmetered account management/read operation. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store. Captures safe activity summaries only, never raw results or request/email bodies. Access follows current retention allowance; expiry was captured at creation.",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    },
    "/rules": {
      "get": {
        "summary": "Rules",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/LookupRule"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "full",
        "x-requestguard-metered": false,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "rules",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires full lookup access from an active Suite or Lookups plan. Unmetered account management/read operation. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store."
      },
      "post": {
        "summary": "Rules",
        "responses": {
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          },
          "201": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LookupRule"
                }
              }
            }
          }
        },
        "x-requestguard-capability": "full",
        "x-requestguard-metered": false,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "rules",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires full lookup access from an active Suite or Lookups plan. Unmetered account management/read operation. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store. Supplying webhook_url also requires webhook entitlement; this legacy rule field is stored metadata, not an independent delivery path.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LookupRuleInput"
              }
            }
          }
        }
      }
    },
    "/rules/{id}": {
      "patch": {
        "summary": "Rule",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LookupRule"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "x-requestguard-capability": "full",
        "x-requestguard-metered": false,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "rule",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires full lookup access from an active Suite or Lookups plan. Unmetered account management/read operation. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store. Supplying webhook_url also requires webhook entitlement; this legacy rule field is stored metadata, not an independent delivery path.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LookupRulePatch"
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Rule",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "deleted": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "deleted"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "x-requestguard-capability": "full",
        "x-requestguard-metered": false,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "rule",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires full lookup access from an active Suite or Lookups plan. Unmetered account management/read operation. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store."
      }
    },
    "/webhooks": {
      "get": {
        "summary": "Webhooks",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/LookupWebhook"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "x-requestguard-capability": "webhooks",
        "x-requestguard-metered": false,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "webhooks",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires webhook entitlement (Suite Agency or Lookups Growth). Unmetered account management/read operation. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store."
      },
      "post": {
        "summary": "Webhooks",
        "responses": {
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          },
          "201": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LookupWebhook"
                }
              }
            }
          }
        },
        "x-requestguard-capability": "webhooks",
        "x-requestguard-metered": false,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "webhooks",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires webhook entitlement (Suite Agency or Lookups Growth). Unmetered account management/read operation. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LookupWebhookInput"
              }
            }
          }
        }
      }
    },
    "/webhooks/{id}": {
      "patch": {
        "summary": "Webhook",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LookupWebhook"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "x-requestguard-capability": "webhooks",
        "x-requestguard-metered": false,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "webhook",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires webhook entitlement (Suite Agency or Lookups Growth). Unmetered account management/read operation. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LookupWebhookPatch"
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Webhook",
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "deleted": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "deleted"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/LookupForbidden"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "x-requestguard-capability": "webhooks",
        "x-requestguard-metered": false,
        "x-requestguard-unit-kind": "request",
        "x-requestguard-lookup-id": "webhook",
        "security": [
          {
            "BearerAuth": []
          },
          {
            "ApiKeyHeader": []
          }
        ],
        "description": " Requires webhook entitlement (Suite Agency or Lookups Growth). Unmetered account management/read operation. Active workspace API key required; legacy configured/global keys are rejected. Responses are private, no-store."
      }
    },
    "/dashboard/lookup": {
      "servers": [
        {
          "url": "https://requestguard.com/api",
          "description": "Hanko session account API; API keys do not authorize workspace administration."
        }
      ],
      "post": {
        "summary": "Run a dashboard lookup",
        "description": "Owner or included member session. Uses the same registry, capabilities and workspace meter as public API routes. Form/JSON modes run one configured lookup; bulk accepts at most 100 targets and reserves the sum of nested units atomically before any upstream call. Optional apiKey must be active and belong to this workspace. Bulk requires Suite Business/Agency or Lookups Growth.",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "400": {
            "$ref": "#/components/responses/ProductBadRequest"
          },
          "409": {
            "$ref": "#/components/responses/ProductConflict"
          },
          "503": {
            "$ref": "#/components/responses/ProductUnavailable"
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "lookupId": {
                    "type": "string",
                    "enum": [
                      "assess",
                      "ip-reputation",
                      "ip-geolocation",
                      "ip-rdap",
                      "asn-intelligence",
                      "domain-intelligence",
                      "domain-blocklists",
                      "dns-records",
                      "domain-rdap",
                      "email-risk",
                      "email-security",
                      "ssl-certificate",
                      "server-status",
                      "online-check",
                      "bulk-blacklist",
                      "cidr-check",
                      "device-fingerprint",
                      "captcha-fallback",
                      "vulnerability-cve",
                      "vulnerability-npm"
                    ]
                  },
                  "mode": {
                    "type": "string",
                    "enum": [
                      "form",
                      "json",
                      "bulk"
                    ],
                    "default": "form"
                  },
                  "input": {
                    "type": "string"
                  },
                  "form": {
                    "type": "object",
                    "additionalProperties": true
                  },
                  "json": {},
                  "targets": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "minItems": 1,
                    "maxItems": 100
                  },
                  "apiKey": {
                    "type": "string",
                    "description": "Optional active API key from this same workspace; Hanko session already authorizes dashboard use."
                  }
                },
                "required": [
                  "lookupId"
                ]
              }
            }
          }
        }
      }
    },
    "/health": {
      "servers": [
        {
          "url": "https://api.requestguard.com"
        }
      ],
      "get": {
        "summary": "Read API health",
        "description": "Public stateless origin health; caller credentials and query values are not forwarded.",
        "security": [],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "version": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "name",
                    "version"
                  ]
                }
              }
            }
          },
          "503": {
            "description": "Origin unavailable."
          }
        }
      }
    },
    "/account/reports": {
      "servers": [
        {
          "url": "https://requestguard.com/api",
          "description": "Hanko session account API; API keys do not authorize workspace administration."
        }
      ],
      "get": {
        "summary": "Read workspace fraud reports",
        "description": "Owner or included member Hanko session; workspace report history is unmetered. Expired captured reports are hidden; legacy reports with NULL expiry remain visible.",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "503": {
            "$ref": "#/components/responses/ProductUnavailable"
          }
        },
        "x-requestguard-metered": false
      },
      "post": {
        "summary": "Create a workspace fraud report",
        "description": "Owner or included member Hanko session; requires full lookup access from Suite or Lookups. Reserves one lookup unit before report processing and records safe lookup history. Preserves fraud report and assessment event persistence. New reports capture expires_at from the current lookup history allowance; caller-supplied expiry is ignored. Legacy reports retain NULL expiry.",
        "security": [
          {
            "HankoSession": []
          },
          {
            "HankoBearer": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/WorkspaceHeader"
          }
        ],
        "responses": {
          "401": {
            "$ref": "#/components/responses/ProductUnauthorized"
          },
          "403": {
            "$ref": "#/components/responses/ProductForbidden"
          },
          "503": {
            "$ref": "#/components/responses/ProductUnavailable"
          },
          "201": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "402": {
            "$ref": "#/components/responses/ApiQuotaExceeded"
          },
          "400": {
            "$ref": "#/components/responses/ProductBadRequest"
          }
        },
        "x-requestguard-metered": true,
        "x-requestguard-capability": "full",
        "x-requestguard-unit-kind": "request",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          },
          "description": "Assessment input or existing target_type/target_label report input."
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "BearerAuth": {
        "type": "http",
        "scheme": "bearer"
      },
      "HankoSession": {
        "type": "apiKey",
        "in": "cookie",
        "name": "hanko",
        "description": "Validated Hanko session for website account and billing endpoints."
      },
      "HankoBearer": {
        "type": "http",
        "scheme": "bearer",
        "description": "Hanko session token, not a RequestGuard developer API key."
      },
      "ApiKeyHeader": {
        "type": "apiKey",
        "in": "header",
        "name": "X-API-Key",
        "description": "Alternative to the developer API bearer token."
      }
    },
    "parameters": {
      "Ip": {
        "name": "ip",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "Domain": {
        "name": "domain",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "Host": {
        "name": "host",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "WorkspaceHeader": {
        "name": "X-RequestGuard-Workspace",
        "in": "header",
        "required": false,
        "schema": {
          "type": "string"
        },
        "description": "Select a workspace where the signed-in user has active membership. Overrides rg_workspace cookie; otherwise the personal workspace is used."
      }
    },
    "responses": {
      "Unauthorized": {
        "description": "Missing or invalid API key",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiFailure"
            }
          }
        }
      },
      "RateLimited": {
        "description": "Rate limit exceeded",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiFailure"
            }
          }
        }
      },
      "BadRequest": {
        "description": "Invalid request",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiFailure"
            }
          }
        }
      },
      "ProductUnauthorized": {
        "description": "Missing or invalid Hanko session (401).",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ProductError"
            }
          }
        }
      },
      "ProductForbidden": {
        "description": "Workspace membership, owner permission, active plan or same-origin requirement not satisfied (403).",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ProductError"
            }
          }
        }
      },
      "ProductBadRequest": {
        "description": "Invalid request data (400).",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ProductError"
            }
          }
        }
      },
      "ProductConflict": {
        "description": "Resource state, capacity, existing subscription or pending operation conflicts with this request (409).",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ProductError"
            }
          }
        }
      },
      "ProductUnavailable": {
        "description": "Required storage, DNS or provider operation is unavailable (503).",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ProductError"
            }
          }
        }
      },
      "ApiQuotaExceeded": {
        "description": "Monthly developer API allowance exhausted (402, QUOTA_EXCEEDED). No overage is purchased automatically.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiQuotaExceeded"
            }
          }
        }
      },
      "LookupForbidden": {
        "description": "CAPABILITY_REQUIRED, BULK_LOOKUPS_REQUIRED or API_KEY_PAUSED. No provider work or quota allocation occurs for a denied capability.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ProductError"
            }
          }
        }
      }
    },
    "schemas": {
      "ApiError": {
        "type": "object",
        "required": [
          "code",
          "message"
        ],
        "properties": {
          "code": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        }
      },
      "ApiFailure": {
        "type": "object",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "$ref": "#/components/schemas/ApiError"
          }
        }
      },
      "SourceHit": {
        "type": "object",
        "required": [
          "name",
          "type",
          "matched"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "dataset",
              "dnsbl",
              "rdap",
              "geo",
              "heuristic",
              "global_probe"
            ]
          },
          "matched": {
            "type": "boolean"
          },
          "category": {
            "type": "string"
          },
          "confidence": {
            "type": "number"
          },
          "detail": {
            "type": "string"
          }
        }
      },
      "WithSources": {
        "type": "object",
        "properties": {
          "sources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SourceHit"
            }
          }
        }
      },
      "AssessmentRequest": {
        "type": "object",
        "properties": {
          "ip": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "domain": {
            "type": "string"
          },
          "user_agent": {
            "type": "string"
          },
          "event": {
            "type": "string"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": true
          }
        }
      },
      "AssessmentResult": {
        "allOf": [
          {
            "$ref": "#/components/schemas/WithSources"
          },
          {
            "type": "object",
            "properties": {
              "request_id": {
                "type": "string"
              },
              "risk_score": {
                "type": "integer"
              },
              "domain_rating": {
                "type": "number",
                "format": "float",
                "minimum": 0,
                "maximum": 100,
                "description": "Ahrefs Domain Rating. This is separate from RequestGuard's threat score; attribution is provided in sources."
              },
              "decision": {
                "type": "string",
                "enum": [
                  "allow",
                  "review",
                  "block"
                ]
              },
              "reasons": {
                "type": "array",
                "items": {
                  "type": "object"
                }
              }
            }
          }
        ]
      },
      "IpGeolocation": {
        "allOf": [
          {
            "$ref": "#/components/schemas/WithSources"
          },
          {
            "type": "object",
            "properties": {
              "ip": {
                "type": "string"
              },
              "country_code": {
                "type": "string"
              },
              "timezone": {
                "type": "string"
              },
              "confidence": {
                "type": "number"
              }
            }
          }
        ]
      },
      "IpReputation": {
        "allOf": [
          {
            "$ref": "#/components/schemas/WithSources"
          },
          {
            "type": "object",
            "properties": {
              "ip": {
                "type": "string"
              },
              "is_vpn": {
                "type": "boolean"
              },
              "is_proxy": {
                "type": "boolean"
              },
              "is_tor": {
                "type": "boolean"
              },
              "is_datacenter": {
                "type": "boolean"
              },
              "risk_score": {
                "type": "integer"
              }
            }
          }
        ]
      },
      "DomainIntelligence": {
        "allOf": [
          {
            "$ref": "#/components/schemas/WithSources"
          },
          {
            "type": "object",
            "properties": {
              "domain": {
                "type": "string"
              },
              "risk_score": {
                "type": "integer"
              },
              "decision": {
                "type": "string",
                "enum": [
                  "allow",
                  "review",
                  "block"
                ]
              }
            }
          }
        ]
      },
      "SubdomainResponse": {
        "type": "object",
        "required": [
          "domain",
          "apex_domain",
          "subdomains",
          "pagination",
          "sources",
          "_meta"
        ],
        "properties": {
          "domain": {
            "type": "string"
          },
          "apex_domain": {
            "type": "string"
          },
          "subdomains": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SubdomainObservation"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/SubdomainPagination"
          },
          "sources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SourceHit"
            }
          },
          "_meta": {
            "$ref": "#/components/schemas/SubdomainMeta"
          }
        }
      },
      "SubdomainObservation": {
        "type": "object",
        "required": [
          "hostname",
          "first_seen"
        ],
        "properties": {
          "hostname": {
            "type": "string"
          },
          "first_seen": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "First observation time stored in the certificate transparency index. Certificate issuance time is separate."
          }
        }
      },
      "SubdomainPagination": {
        "type": "object",
        "required": [
          "limit",
          "offset",
          "returned",
          "total",
          "available",
          "has_more",
          "truncated"
        ],
        "properties": {
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 500
          },
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "returned": {
            "type": "integer",
            "minimum": 0
          },
          "total": {
            "type": "integer",
            "minimum": 0
          },
          "available": {
            "type": "integer",
            "minimum": 0,
            "maximum": 10000
          },
          "has_more": {
            "type": "boolean"
          },
          "truncated": {
            "type": "boolean"
          }
        }
      },
      "SubdomainMeta": {
        "type": "object",
        "required": [
          "queried_at",
          "cached",
          "stale"
        ],
        "properties": {
          "queried_at": {
            "type": "string",
            "format": "date-time"
          },
          "cached": {
            "type": "boolean"
          },
          "stale": {
            "type": "boolean"
          }
        }
      },
      "HostInfrastructureResponse": {
        "type": "object",
        "required": [
          "hostname",
          "resolved",
          "cname_chain",
          "addresses",
          "edge_network",
          "sources",
          "_meta"
        ],
        "properties": {
          "hostname": {
            "type": "string"
          },
          "resolved": {
            "type": "boolean"
          },
          "cname_chain": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "addresses": {
            "type": "array",
            "maxItems": 8,
            "items": {
              "$ref": "#/components/schemas/HostInfrastructureAddress"
            }
          },
          "edge_network": {
            "type": "boolean",
            "description": "True when the resolved address or CNAME belongs to a recognized CDN or reverse-proxy network."
          },
          "sources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SourceHit"
            }
          },
          "_meta": {
            "$ref": "#/components/schemas/HostInfrastructureMeta"
          }
        }
      },
      "HostInfrastructureAddress": {
        "type": "object",
        "required": [
          "ip",
          "type",
          "country_code",
          "country",
          "region",
          "city",
          "latitude",
          "longitude",
          "asn",
          "organization",
          "network",
          "edge_network"
        ],
        "properties": {
          "ip": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "A",
              "AAAA"
            ]
          },
          "country_code": {
            "type": [
              "string",
              "null"
            ]
          },
          "country": {
            "type": [
              "string",
              "null"
            ]
          },
          "region": {
            "type": [
              "string",
              "null"
            ]
          },
          "city": {
            "type": [
              "string",
              "null"
            ]
          },
          "latitude": {
            "type": [
              "number",
              "null"
            ]
          },
          "longitude": {
            "type": [
              "number",
              "null"
            ]
          },
          "asn": {
            "type": [
              "integer",
              "null"
            ]
          },
          "organization": {
            "type": [
              "string",
              "null"
            ]
          },
          "network": {
            "type": [
              "string",
              "null"
            ]
          },
          "edge_network": {
            "type": "boolean"
          }
        }
      },
      "HostInfrastructureMeta": {
        "type": "object",
        "required": [
          "queried_at",
          "response_time_ms"
        ],
        "properties": {
          "queried_at": {
            "type": "string",
            "format": "date-time"
          },
          "response_time_ms": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "EmailCheckRequest": {
        "type": "object",
        "required": [
          "email"
        ],
        "properties": {
          "email": {
            "type": "string"
          }
        }
      },
      "EmailRisk": {
        "allOf": [
          {
            "$ref": "#/components/schemas/WithSources"
          },
          {
            "type": "object",
            "properties": {
              "email": {
                "type": "string"
              },
              "risk_score": {
                "type": "integer"
              },
              "domain_rating": {
                "type": "number",
                "format": "float",
                "minimum": 0,
                "maximum": 100,
                "description": "Ahrefs Domain Rating. This is separate from RequestGuard's threat score; attribution is provided in sources."
              }
            }
          }
        ]
      },
      "EmailSecurity": {
        "allOf": [
          {
            "$ref": "#/components/schemas/WithSources"
          },
          {
            "type": "object",
            "properties": {
              "domain": {
                "type": "string"
              },
              "spf": {
                "type": "object"
              },
              "dkim": {
                "type": "object"
              },
              "dmarc": {
                "type": "object"
              }
            }
          }
        ]
      },
      "DnsLookup": {
        "type": "object",
        "properties": {
          "domain": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "records": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SourceHit"
            }
          }
        }
      },
      "RdapSummary": {
        "allOf": [
          {
            "$ref": "#/components/schemas/WithSources"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string"
              },
              "query": {
                "type": "string"
              },
              "organization": {
                "type": "string"
              }
            }
          }
        ]
      },
      "AsnIntelligence": {
        "allOf": [
          {
            "$ref": "#/components/schemas/WithSources"
          },
          {
            "type": "object",
            "properties": {
              "asn": {
                "type": "integer"
              },
              "categories": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          }
        ]
      },
      "SslCertificate": {
        "allOf": [
          {
            "$ref": "#/components/schemas/WithSources"
          },
          {
            "type": "object",
            "properties": {
              "host": {
                "type": "string"
              },
              "authorized": {
                "type": "boolean"
              },
              "expires_at": {
                "type": "string"
              }
            }
          }
        ]
      },
      "ServerStatus": {
        "allOf": [
          {
            "$ref": "#/components/schemas/WithSources"
          },
          {
            "type": "object",
            "properties": {
              "host": {
                "type": "string"
              },
              "reachable": {
                "type": "boolean"
              },
              "status_code": {
                "type": "integer"
              }
            }
          }
        ]
      },
      "OnlineCheckRequest": {
        "type": "object",
        "required": [
          "target"
        ],
        "properties": {
          "target": {
            "type": "string"
          },
          "countries": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "method": {
            "type": "string",
            "enum": [
              "HEAD",
              "GET",
              "OPTIONS"
            ]
          }
        }
      },
      "OnlineCheckResult": {
        "allOf": [
          {
            "$ref": "#/components/schemas/WithSources"
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "target": {
                "type": "string"
              },
              "summary": {
                "type": "object"
              },
              "results": {
                "type": "array",
                "items": {
                  "type": "object"
                }
              }
            }
          }
        ]
      },
      "BlocklistCheckRequest": {
        "type": "object",
        "properties": {
          "target": {
            "type": "string"
          },
          "targets": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "BlocklistCheckResult": {
        "allOf": [
          {
            "$ref": "#/components/schemas/WithSources"
          },
          {
            "type": "object",
            "properties": {
              "targets": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/BlocklistTargetResult"
                }
              }
            }
          }
        ]
      },
      "BlocklistTargetResult": {
        "type": "object",
        "required": [
          "target",
          "normalized",
          "type",
          "listed",
          "hits",
          "checked",
          "queried_at"
        ],
        "properties": {
          "target": {
            "type": "string"
          },
          "normalized": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "ip",
              "domain"
            ]
          },
          "listed": {
            "type": "boolean"
          },
          "security_listed": {
            "type": "boolean"
          },
          "risk_relevant": {
            "type": "boolean"
          },
          "hits": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "checked": {
            "type": "integer"
          },
          "available": {
            "type": "integer",
            "description": "Sources that returned a comparable result."
          },
          "unavailable": {
            "type": "integer",
            "description": "Sources that timed out, refused the query, or returned an error."
          },
          "status": {
            "type": "string",
            "enum": [
              "complete",
              "partial",
              "unavailable"
            ]
          },
          "freshness": {
            "type": "string",
            "enum": [
              "fresh",
              "stale"
            ]
          },
          "summary": {
            "$ref": "#/components/schemas/DomainReputationSummary"
          },
          "checks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DomainResolverCheck"
            }
          },
          "risk_score": {
            "type": "number"
          },
          "queried_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "DomainReputationSummary": {
        "type": "object",
        "required": [
          "checked",
          "blocked",
          "threatBlocked",
          "policyBlocked",
          "unavailable"
        ],
        "properties": {
          "checked": {
            "type": "integer"
          },
          "blocked": {
            "type": "integer"
          },
          "threatBlocked": {
            "type": "integer"
          },
          "policyBlocked": {
            "type": "integer"
          },
          "unavailable": {
            "type": "integer"
          }
        }
      },
      "DomainResolverCheck": {
        "type": "object",
        "required": [
          "id",
          "provider",
          "policy",
          "status",
          "evidence",
          "documentationUrl"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "provider": {
            "type": "string"
          },
          "policy": {
            "type": "string",
            "enum": [
              "threat",
              "privacy_mixed",
              "family"
            ]
          },
          "status": {
            "type": "string",
            "enum": [
              "allowed",
              "blocked",
              "unavailable",
              "not_comparable"
            ]
          },
          "classification": {
            "type": "string"
          },
          "evidence": {
            "type": "object",
            "properties": {
              "recordTypes": {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "A",
                    "AAAA"
                  ]
                }
              },
              "responseCodes": {
                "type": "array",
                "items": {
                  "type": "integer"
                }
              },
              "extendedDnsErrors": {
                "type": "array",
                "items": {
                  "type": "integer"
                }
              },
              "sinkAddresses": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "blockedBy": {
                "type": "array",
                "items": {
                  "type": "object"
                }
              },
              "queries": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "recordType",
                    "status",
                    "addresses",
                    "extendedDnsErrors"
                  ],
                  "properties": {
                    "recordType": {
                      "type": "string",
                      "enum": [
                        "A",
                        "AAAA"
                      ]
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "answered",
                        "unavailable"
                      ]
                    },
                    "responseCode": {
                      "type": "integer"
                    },
                    "addresses": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "extendedDnsErrors": {
                      "type": "array",
                      "items": {
                        "type": "integer"
                      }
                    }
                  }
                }
              }
            }
          },
          "documentationUrl": {
            "type": "string",
            "format": "uri"
          },
          "falsePositiveUrl": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "CidrCheckRequest": {
        "type": "object",
        "required": [
          "cidr"
        ],
        "properties": {
          "cidr": {
            "type": "string"
          }
        }
      },
      "CidrCheckResult": {
        "allOf": [
          {
            "$ref": "#/components/schemas/WithSources"
          },
          {
            "type": "object",
            "properties": {
              "cidr": {
                "type": "string"
              },
              "max_prefix": {
                "type": "integer"
              }
            }
          }
        ]
      },
      "NpmPackageSummary": {
        "type": "object",
        "required": [
          "name",
          "ecosystem"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "ecosystem": {
            "type": "string",
            "const": "npm"
          },
          "latestVersion": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "license": {
            "type": "string"
          },
          "repositoryUrl": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "NpmDownloadSummary": {
        "type": "object",
        "properties": {
          "weeklyDownloads": {
            "type": "integer",
            "minimum": 0
          },
          "start": {
            "type": "string",
            "format": "date"
          },
          "end": {
            "type": "string",
            "format": "date"
          }
        }
      },
      "NpmVulnerabilityCounts": {
        "type": "object",
        "properties": {
          "critical": {
            "type": "integer",
            "minimum": 0
          },
          "high": {
            "type": "integer",
            "minimum": 0
          },
          "moderate": {
            "type": "integer",
            "minimum": 0
          },
          "low": {
            "type": "integer",
            "minimum": 0
          },
          "unknown": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "NpmVulnerabilitySummary": {
        "type": "object",
        "properties": {
          "total": {
            "type": "integer",
            "minimum": 0
          },
          "highest": {
            "type": "string",
            "enum": [
              "critical",
              "high",
              "moderate",
              "low",
              "unknown",
              "none"
            ]
          },
          "counts": {
            "$ref": "#/components/schemas/NpmVulnerabilityCounts"
          }
        }
      },
      "NpmVulnerabilityAdvisory": {
        "type": "object",
        "required": [
          "id",
          "severity"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "aliases": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "title": {
            "type": "string"
          },
          "severity": {
            "type": "string",
            "enum": [
              "critical",
              "high",
              "moderate",
              "low",
              "unknown"
            ]
          },
          "publishedAt": {
            "type": "string",
            "format": "date-time"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time"
          },
          "affectedRanges": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "fixedVersions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "references": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uri"
            }
          }
        }
      },
      "NpmVulnerabilitySources": {
        "type": "object",
        "required": [
          "npm",
          "downloads",
          "osv"
        ],
        "properties": {
          "npm": {
            "type": "string",
            "format": "uri-template"
          },
          "downloads": {
            "type": "string",
            "format": "uri-template"
          },
          "osv": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "NpmVulnerabilityIntelligence": {
        "type": "object",
        "required": [
          "package",
          "downloads",
          "summary",
          "advisories",
          "sources",
          "checkedAt",
          "noAdvisoryCopy"
        ],
        "properties": {
          "package": {
            "$ref": "#/components/schemas/NpmPackageSummary"
          },
          "downloads": {
            "$ref": "#/components/schemas/NpmDownloadSummary"
          },
          "summary": {
            "$ref": "#/components/schemas/NpmVulnerabilitySummary"
          },
          "advisories": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NpmVulnerabilityAdvisory"
            }
          },
          "sources": {
            "$ref": "#/components/schemas/NpmVulnerabilitySources"
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          },
          "noAdvisoryCopy": {
            "type": "string"
          }
        }
      },
      "VulnerabilitySource": {
        "type": "object",
        "required": [
          "name",
          "type",
          "url",
          "status",
          "cached",
          "checkedAt"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "registry",
              "advisory",
              "catalog"
            ]
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "status": {
            "type": "string",
            "enum": [
              "fresh",
              "stale",
              "unavailable"
            ]
          },
          "cached": {
            "type": "boolean"
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          },
          "message": {
            "type": "string"
          }
        }
      },
      "KnownExploitedVulnerability": {
        "type": "object",
        "required": [
          "cveId",
          "vendorProject",
          "product",
          "vulnerabilityName",
          "dateAdded",
          "shortDescription",
          "requiredAction",
          "dueDate",
          "knownRansomwareCampaignUse",
          "cwes"
        ],
        "properties": {
          "cveId": {
            "type": "string",
            "example": "CVE-2021-44228"
          },
          "vendorProject": {
            "type": "string"
          },
          "product": {
            "type": "string"
          },
          "vulnerabilityName": {
            "type": "string"
          },
          "dateAdded": {
            "type": "string",
            "format": "date"
          },
          "shortDescription": {
            "type": "string"
          },
          "requiredAction": {
            "type": "string"
          },
          "dueDate": {
            "type": "string",
            "format": "date"
          },
          "knownRansomwareCampaignUse": {
            "type": "string"
          },
          "notes": {
            "type": [
              "string",
              "null"
            ]
          },
          "cwes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "PackageVulnerabilityReport": {
        "type": "object",
        "required": [
          "package",
          "path",
          "versionCheck",
          "summary",
          "advisories",
          "withdrawnAdvisories",
          "sources",
          "checkedAt",
          "pagination",
          "_meta"
        ],
        "properties": {
          "package": {
            "type": "object",
            "required": [
              "name",
              "ecosystem",
              "purl",
              "registryUrl"
            ],
            "additionalProperties": true
          },
          "path": {
            "type": "string"
          },
          "versionCheck": {
            "type": "object",
            "additionalProperties": true
          },
          "summary": {
            "type": "object",
            "additionalProperties": true
          },
          "advisories": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "withdrawnAdvisories": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VulnerabilitySource"
            }
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          },
          "pagination": {
            "type": "object",
            "additionalProperties": true
          },
          "_meta": {
            "type": "object",
            "additionalProperties": true
          }
        }
      },
      "CveVulnerabilityReport": {
        "type": "object",
        "required": [
          "cveId",
          "title",
          "severity",
          "knownExploitation",
          "affectedPackages",
          "references",
          "sources",
          "checkedAt",
          "_meta"
        ],
        "properties": {
          "cveId": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "aliases": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "severity": {
            "type": "string",
            "enum": [
              "critical",
              "high",
              "moderate",
              "low",
              "unknown"
            ]
          },
          "knownExploitation": {
            "type": "string",
            "enum": [
              "listed",
              "not_listed",
              "unavailable"
            ]
          },
          "kev": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/KnownExploitedVulnerability"
              },
              {
                "type": "null"
              }
            ]
          },
          "affectedPackages": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "references": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uri"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VulnerabilitySource"
            }
          },
          "checkedAt": {
            "type": "string",
            "format": "date-time"
          },
          "_meta": {
            "type": "object",
            "additionalProperties": true
          }
        }
      },
      "KnownExploitedResponse": {
        "type": "object",
        "required": [
          "entries",
          "pagination",
          "sources",
          "_meta"
        ],
        "properties": {
          "entries": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/KnownExploitedVulnerability"
            }
          },
          "pagination": {
            "type": "object",
            "additionalProperties": true
          },
          "sources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VulnerabilitySource"
            }
          },
          "_meta": {
            "type": "object",
            "additionalProperties": true
          }
        }
      },
      "WebsiteScanRequest": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "domain"
        ],
        "properties": {
          "domain": {
            "type": "string",
            "example": "www.example.com"
          }
        }
      },
      "WebsiteSecurityCheck": {
        "type": "object",
        "required": [
          "id",
          "category",
          "label",
          "status",
          "earned",
          "possible",
          "detail",
          "recommendation",
          "evidence"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "category": {
            "type": "string",
            "enum": [
              "connection",
              "browser",
              "domain",
              "threats"
            ]
          },
          "label": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "pass",
              "partial",
              "fail",
              "unavailable"
            ]
          },
          "earned": {
            "type": "integer"
          },
          "possible": {
            "type": "integer"
          },
          "detail": {
            "type": [
              "string",
              "null"
            ]
          },
          "recommendation": {
            "type": [
              "string",
              "null"
            ]
          },
          "evidence": {
            "type": "object",
            "additionalProperties": true
          }
        }
      },
      "WebsiteSearchVisibility": {
        "type": "object",
        "description": "Unscored crawl and index signals observed from the public homepage. This does not report whether Google indexed the URL.",
        "required": [
          "status",
          "assessed_url",
          "checks"
        ],
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "pass",
              "partial",
              "fail",
              "unavailable"
            ]
          },
          "assessed_url": {
            "type": "string",
            "format": "uri"
          },
          "checks": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "id",
                "label",
                "status",
                "detail",
                "recommendation",
                "evidence"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "enum": [
                    "crawler_access",
                    "indexing_directives",
                    "robots_txt",
                    "canonical",
                    "search_content",
                    "sitemap"
                  ]
                },
                "label": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "pass",
                    "partial",
                    "fail",
                    "unavailable"
                  ]
                },
                "detail": {
                  "type": "string"
                },
                "recommendation": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "evidence": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          }
        }
      },
      "PublicExposureReference": {
        "type": "object",
        "required": [
          "id",
          "status",
          "report_url"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "status": {
            "type": "string",
            "enum": [
              "queued",
              "running",
              "complete",
              "partial",
              "unavailable"
            ]
          },
          "report_url": {
            "type": "string",
            "description": "Read-only polling URL; does not start a scan."
          }
        }
      },
      "PublicExposureReport": {
        "type": "object",
        "description": "Public bounded crawler observations with redacted findings. Paths are [private finding], signatures and retest are null, and details are generic. Detailed evidence is available only through authorized Website Guard workspace access.",
        "required": [
          "id",
          "domain",
          "model",
          "catalog_version",
          "status",
          "assessed_url",
          "created_at",
          "started_at",
          "checked_at",
          "selected",
          "checked",
          "requests",
          "captured_bytes",
          "technologies",
          "stop_reason",
          "findings"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "domain": {
            "type": "string"
          },
          "model": {
            "const": "public_exposure_v1"
          },
          "catalog_version": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "queued",
              "running",
              "complete",
              "partial",
              "unavailable"
            ]
          },
          "assessed_url": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "started_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "checked_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "selected": {
            "type": "integer",
            "minimum": 100,
            "maximum": 150
          },
          "checked": {
            "type": "integer",
            "minimum": 0,
            "maximum": 150
          },
          "requests": {
            "type": "integer",
            "minimum": 0,
            "maximum": 300,
            "description": "Observed requests, including conservative reservations for interrupted batches."
          },
          "captured_bytes": {
            "type": "integer",
            "minimum": 0,
            "maximum": 8388608
          },
          "technologies": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "wordpress",
                "laravel",
                "symfony",
                "spring",
                "django",
                "rails",
                "php",
                "aspnet"
              ]
            }
          },
          "stop_reason": {
            "type": [
              "string",
              "null"
            ]
          },
          "findings": {
            "type": "array",
            "maxItems": 150,
            "items": {
              "$ref": "#/components/schemas/PublicExposureRedactedFinding"
            }
          }
        }
      },
      "PublicExposureFinding": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "path",
          "category",
          "status",
          "detail",
          "recommendation",
          "retest",
          "evidence"
        ],
        "properties": {
          "path": {
            "type": "string"
          },
          "category": {
            "type": "string",
            "enum": [
              "configuration",
              "backups",
              "administration",
              "diagnostics",
              "api",
              "source"
            ]
          },
          "status": {
            "type": "string",
            "enum": [
              "exposed",
              "review",
              "restricted",
              "not_found",
              "inconclusive"
            ]
          },
          "detail": {
            "type": "string"
          },
          "recommendation": {
            "type": [
              "string",
              "null"
            ]
          },
          "retest": {
            "type": [
              "string",
              "null"
            ]
          },
          "evidence": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "http_status",
              "signature",
              "captured_bytes",
              "truncated"
            ],
            "properties": {
              "http_status": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "signature": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "captured_bytes": {
                "type": "integer",
                "minimum": 0,
                "maximum": 32768
              },
              "truncated": {
                "type": "boolean"
              }
            }
          }
        }
      },
      "WebsiteSecurityReport": {
        "type": "object",
        "required": [
          "domain",
          "apex_domain",
          "scan",
          "score",
          "rank",
          "categories",
          "checks",
          "endpoint",
          "sources",
          "_meta"
        ],
        "properties": {
          "domain": {
            "type": "string"
          },
          "apex_domain": {
            "type": "string"
          },
          "scan": {
            "type": "object",
            "required": [
              "id",
              "status",
              "checked_at",
              "duration_ms"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "status": {
                "type": "string",
                "enum": [
                  "complete",
                  "incomplete"
                ]
              },
              "checked_at": {
                "type": "string",
                "format": "date-time"
              },
              "duration_ms": {
                "type": "integer"
              }
            }
          },
          "score": {
            "type": "object",
            "required": [
              "value",
              "grade",
              "model",
              "coverage",
              "rankable"
            ],
            "properties": {
              "value": {
                "type": [
                  "integer",
                  "null"
                ],
                "minimum": 0,
                "maximum": 100
              },
              "grade": {
                "type": [
                  "string",
                  "null"
                ],
                "enum": [
                  "A",
                  "B",
                  "C",
                  "D",
                  "F",
                  null
                ]
              },
              "model": {
                "const": "website_security_v1"
              },
              "coverage": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100
              },
              "rankable": {
                "type": "boolean"
              }
            }
          },
          "rank": {
            "type": "object",
            "required": [
              "position",
              "total",
              "change_previous",
              "previous_checked_at",
              "change_30d"
            ],
            "properties": {
              "position": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "total": {
                "type": "integer"
              },
              "change_previous": {
                "type": [
                  "integer",
                  "null"
                ],
                "description": "Score change since the previous completed check."
              },
              "previous_checked_at": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time"
              },
              "change_30d": {
                "type": [
                  "integer",
                  "null"
                ],
                "deprecated": true,
                "description": "Deprecated compatibility field; always null."
              }
            }
          },
          "categories": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "checks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebsiteSecurityCheck"
            }
          },
          "endpoint": {
            "type": "object",
            "required": [
              "final_url",
              "status_code",
              "ip_addresses",
              "location"
            ],
            "properties": {
              "final_url": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "uri"
              },
              "status_code": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "ip_addresses": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "location": {
                "type": "object",
                "additionalProperties": true
              }
            }
          },
          "public_exposure": {
            "$ref": "#/components/schemas/PublicExposureReference"
          },
          "search_visibility": {
            "$ref": "#/components/schemas/WebsiteSearchVisibility"
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "name",
                "type",
                "matched",
                "category"
              ],
              "properties": {
                "name": {
                  "type": "string",
                  "description": "Generic public source category; internal provider names are not returned."
                },
                "type": {
                  "type": "string",
                  "enum": [
                    "live_probe",
                    "dataset"
                  ]
                },
                "matched": {
                  "type": "boolean"
                },
                "category": {
                  "type": "string"
                },
                "stale": {
                  "type": "boolean"
                }
              }
            }
          },
          "_meta": {
            "type": "object",
            "required": [
              "queried_at",
              "cached"
            ],
            "properties": {
              "queried_at": {
                "type": "string",
                "format": "date-time"
              },
              "cached": {
                "type": "boolean"
              },
              "stale": {
                "type": "boolean"
              }
            }
          }
        }
      },
      "WebsiteLeaderboardResult": {
        "type": "object",
        "required": [
          "view",
          "entries",
          "pagination",
          "_meta"
        ],
        "properties": {
          "view": {
            "type": "string",
            "enum": [
              "top",
              "improved",
              "new"
            ]
          },
          "entries": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "rank",
                "domain",
                "score",
                "grade",
                "coverage",
                "change_previous",
                "previous_checked_at",
                "change_30d",
                "first_submitted_at",
                "checked_at",
                "country_code",
                "country",
                "location_kind",
                "complete"
              ],
              "properties": {
                "change_previous": {
                  "type": [
                    "integer",
                    "null"
                  ],
                  "description": "Score change since the previous completed check."
                },
                "previous_checked_at": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "format": "date-time"
                },
                "change_30d": {
                  "type": [
                    "integer",
                    "null"
                  ],
                  "deprecated": true
                },
                "first_submitted_at": {
                  "type": "string",
                  "format": "date-time",
                  "deprecated": true,
                  "description": "Mirrors checked_at."
                }
              },
              "additionalProperties": true
            }
          },
          "pagination": {
            "type": "object",
            "required": [
              "limit",
              "offset",
              "returned",
              "total",
              "has_more"
            ],
            "additionalProperties": true
          },
          "_meta": {
            "type": "object",
            "required": [
              "queried_at"
            ],
            "additionalProperties": true
          }
        }
      },
      "GoLinkCreateRequest": {
        "type": "object",
        "properties": {
          "target_url": {
            "type": "string",
            "format": "uri",
            "description": "Destination URL to protect. Use targetUrl instead when calling the JavaScript SDK."
          },
          "expires_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Optional expiry. Null means the protected link does not expire."
          },
          "password": {
            "type": [
              "string",
              "null"
            ],
            "description": "Optional visitor password. Password-protected links are not deduplicated."
          },
          "targetUrl": {
            "type": "string",
            "format": "uri",
            "description": "CamelCase alias for target_url. Accepted by the REST API and used by the JavaScript SDK."
          }
        },
        "anyOf": [
          {
            "required": [
              "target_url"
            ]
          },
          {
            "required": [
              "targetUrl"
            ]
          }
        ]
      },
      "GoLinkCreateResponse": {
        "type": "object",
        "required": [
          "code",
          "protected_url",
          "target_host",
          "expires_at",
          "password_protected",
          "created_at",
          "reused"
        ],
        "properties": {
          "code": {
            "type": "string",
            "example": "vid0test"
          },
          "protected_url": {
            "type": "string",
            "format": "uri",
            "example": "https://go.requestguard.com/vid0test/"
          },
          "target_host": {
            "type": "string",
            "example": "video.example.com"
          },
          "expires_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "password_protected": {
            "type": "boolean"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "reused": {
            "type": "boolean",
            "description": "True when an existing active protected link was returned."
          }
        }
      },
      "ProductError": {
        "type": "object",
        "properties": {
          "error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            },
            "required": [
              "code"
            ]
          }
        },
        "required": [
          "error"
        ]
      },
      "WorkspaceEntitlements": {
        "type": "object",
        "properties": {
          "websiteLimit": {
            "type": "integer",
            "minimum": 0
          },
          "websiteMonitoring": {
            "type": "boolean"
          },
          "emailMonthlyLimit": {
            "type": "integer",
            "minimum": 0
          },
          "emailSenderLimit": {
            "type": "integer",
            "minimum": 0
          },
          "apiMonthlyLimit": {
            "type": "integer",
            "minimum": 0
          },
          "apiKeyLimit": {
            "type": "integer",
            "minimum": 0
          },
          "lookupFullAccess": {
            "type": "boolean"
          },
          "bulkLookups": {
            "type": "boolean"
          },
          "webhooks": {
            "type": "boolean"
          },
          "websiteHistoryDays": {
            "type": "integer",
            "minimum": 0
          },
          "lookupHistoryDays": {
            "type": "integer",
            "minimum": 0
          },
          "teamSeats": {
            "type": "integer",
            "minimum": 0
          },
          "clientReports": {
            "type": "boolean"
          },
          "scheduledReports": {
            "type": "boolean"
          }
        },
        "required": [
          "websiteLimit",
          "websiteMonitoring",
          "emailMonthlyLimit",
          "emailSenderLimit",
          "apiMonthlyLimit",
          "apiKeyLimit",
          "lookupFullAccess",
          "bulkLookups",
          "webhooks",
          "websiteHistoryDays",
          "lookupHistoryDays",
          "teamSeats",
          "clientReports",
          "scheduledReports"
        ],
        "description": "Effective feature-wise maxima across active subscriptions; allowances never add. One active subscription per suite/email/lookups family. Free archived website history is 90 days; it does not inflate Suite Starter\u2019s 30-day allowance."
      },
      "WorkspaceSubscription": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "account_id": {
            "type": "string"
          },
          "plan": {
            "$ref": "#/components/schemas/ProductPlanSlug"
          },
          "product": {
            "type": "string",
            "enum": [
              "suite",
              "email",
              "lookups"
            ]
          },
          "interval": {
            "type": "string",
            "enum": [
              "monthly",
              "annual"
            ]
          },
          "status": {
            "type": "string"
          },
          "current_period_end": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "cancel_at_period_end": {
            "type": "integer",
            "enum": [
              0,
              1
            ]
          },
          "provider_updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "pending_plan": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProductPlanSlug"
              },
              {
                "type": "null"
              }
            ]
          },
          "pending_interval": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "monthly",
                  "annual"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "pending_effective_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "account_id",
          "plan",
          "product",
          "interval",
          "status",
          "current_period_end",
          "cancel_at_period_end",
          "provider_updated_at",
          "created_at",
          "updated_at"
        ],
        "description": "Only current provider-verified plan/status/period grant entitlements. pending_* describes a scheduled next-period change and never grants access early."
      },
      "WorkspaceReference": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "email": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "role": {
            "type": "string",
            "enum": [
              "owner",
              "member"
            ]
          }
        },
        "required": [
          "id",
          "email",
          "role"
        ]
      },
      "WorkspaceApiKey": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "account_id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "key_prefix": {
            "type": "string"
          },
          "last_four": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "last_used_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "revoked_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "paused": {
            "type": "boolean",
            "description": "Excess keys are paused by oldest-active ordering(created_at,id); their IDs and hashes are preserved for reactivation after upgrade."
          }
        },
        "required": [
          "id",
          "account_id",
          "name",
          "key_prefix",
          "last_four",
          "created_at",
          "last_used_at",
          "revoked_at",
          "paused"
        ]
      },
      "WorkspaceAccount": {
        "type": "object",
        "properties": {
          "account": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "email": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "created_at": {
                "type": "string",
                "format": "date-time"
              },
              "updated_at": {
                "type": "string",
                "format": "date-time"
              },
              "quota_period": {
                "type": "string",
                "pattern": "^\\d{4}-\\d{2}$"
              },
              "monthly_quota": {
                "type": "integer",
                "minimum": 0
              },
              "monthly_usage": {
                "type": "integer",
                "minimum": 0
              }
            },
            "required": [
              "id",
              "email",
              "created_at",
              "updated_at",
              "quota_period",
              "monthly_quota",
              "monthly_usage"
            ]
          },
          "role": {
            "type": "string",
            "enum": [
              "owner",
              "member"
            ]
          },
          "entitlements": {
            "$ref": "#/components/schemas/WorkspaceEntitlements"
          },
          "api_keys": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkspaceApiKey"
            }
          },
          "workspaces": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkspaceReference"
            }
          },
          "subscriptions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkspaceSubscription"
            }
          },
          "usage": {
            "type": "object",
            "properties": {
              "api": {
                "type": "object",
                "properties": {
                  "used": {
                    "type": "integer",
                    "minimum": 0
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 0
                  },
                  "period": {
                    "type": "string"
                  }
                },
                "required": [
                  "used",
                  "limit",
                  "period"
                ]
              },
              "email": {
                "type": "object",
                "properties": {
                  "used": {
                    "type": "integer",
                    "minimum": 0
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 0
                  },
                  "period": {
                    "type": "string"
                  }
                },
                "required": [
                  "used",
                  "limit",
                  "period"
                ]
              }
            },
            "required": [
              "api",
              "email"
            ]
          },
          "checkout_enabled": {
            "type": "boolean"
          },
          "pending_changes": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "subscription_id": {
                  "type": "string"
                },
                "plan": {
                  "$ref": "#/components/schemas/ProductPlanSlug"
                },
                "interval": {
                  "type": "string",
                  "enum": [
                    "monthly",
                    "annual"
                  ]
                },
                "effective_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "subscription_id",
                "plan",
                "interval",
                "effective_at"
              ]
            }
          }
        },
        "required": [
          "account",
          "role",
          "entitlements",
          "api_keys",
          "workspaces",
          "subscriptions",
          "usage",
          "checkout_enabled",
          "pending_changes"
        ],
        "description": "Selected workspace account summary. Members receive an empty api_keys array."
      },
      "DnsVerification": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "type": {
            "const": "TXT"
          },
          "value": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "type",
          "value"
        ]
      },
      "WebsiteVerdict": {
        "type": "string",
        "enum": [
          "passed",
          "needs_attention",
          "incomplete",
          "stale"
        ]
      },
      "WebsiteCoverage": {
        "type": "object",
        "properties": {
          "completed": {
            "type": "integer",
            "minimum": 0
          },
          "required": {
            "type": "integer",
            "minimum": 0
          },
          "exposure_checked": {
            "type": "integer",
            "minimum": 0
          },
          "exposure_selected": {
            "type": "integer",
            "minimum": 0
          }
        },
        "required": [
          "completed",
          "required",
          "exposure_checked",
          "exposure_selected"
        ]
      },
      "WebsiteRunSummary": {
        "type": "object",
        "properties": {
          "baseline": {
            "const": "website_baseline_v1"
          },
          "status": {
            "$ref": "#/components/schemas/WebsiteVerdict"
          },
          "checked_at": {
            "type": "string",
            "format": "date-time"
          },
          "coverage": {
            "$ref": "#/components/schemas/WebsiteCoverage"
          },
          "open_findings": {
            "type": "integer",
            "minimum": 0
          },
          "issue_keys": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "baseline",
          "status",
          "checked_at",
          "coverage",
          "open_findings",
          "issue_keys"
        ],
        "description": "Private workspace summary. issue_keys can contain sensitive exposure paths and are excluded from public profiles."
      },
      "MonitoredWebsite": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "hostname": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "report_brand": {
            "type": "string"
          },
          "verified_at": {
            "anyOf": [
              {
                "type": "integer",
                "description": "Unix timestamp in milliseconds."
              },
              {
                "type": "null"
              }
            ]
          },
          "monitoring_enabled": {
            "type": "boolean"
          },
          "published": {
            "type": "boolean"
          },
          "status": {
            "$ref": "#/components/schemas/WebsiteVerdict"
          },
          "checked_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "coverage": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/WebsiteCoverage"
              },
              {
                "type": "null"
              }
            ]
          },
          "open_findings": {
            "type": "integer",
            "minimum": 0
          },
          "next_scan_at": {
            "anyOf": [
              {
                "type": "integer",
                "description": "Unix timestamp in milliseconds."
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "hostname",
          "label",
          "report_brand",
          "verified_at",
          "monitoring_enabled",
          "published",
          "status",
          "checked_at",
          "coverage",
          "open_findings",
          "next_scan_at"
        ]
      },
      "MonitoringRun": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "kind": {
            "type": "string",
            "enum": [
              "daily",
              "manual",
              "confirmation"
            ]
          },
          "state": {
            "type": "string",
            "enum": [
              "queued",
              "running",
              "complete",
              "cancelled"
            ]
          },
          "created_at": {
            "type": "integer",
            "description": "Unix timestamp in milliseconds."
          },
          "started_at": {
            "anyOf": [
              {
                "type": "integer",
                "description": "Unix timestamp in milliseconds."
              },
              {
                "type": "null"
              }
            ]
          },
          "completed_at": {
            "anyOf": [
              {
                "type": "integer",
                "description": "Unix timestamp in milliseconds."
              },
              {
                "type": "null"
              }
            ]
          },
          "summary": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/WebsiteRunSummary"
              },
              {
                "type": "null"
              }
            ]
          },
          "error_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "expires_at": {
            "anyOf": [
              {
                "type": "integer",
                "description": "Captured retention expiry, Unix milliseconds; not reduced by a later downgrade."
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "kind",
          "state",
          "created_at",
          "started_at",
          "completed_at",
          "summary",
          "error_code"
        ],
        "description": "Queued website run with captured expiry; incomplete/failed evidence never establishes a passing result."
      },
      "LatestMonitoringRun": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "kind": {
            "type": "string",
            "enum": [
              "daily",
              "manual",
              "confirmation"
            ]
          },
          "state": {
            "type": "string",
            "enum": [
              "queued",
              "running",
              "complete",
              "cancelled"
            ]
          },
          "summary": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/WebsiteRunSummary"
              },
              {
                "type": "null"
              }
            ]
          },
          "error_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "kind",
          "state",
          "summary",
          "error_code"
        ]
      },
      "WebsiteDetail": {
        "type": "object",
        "properties": {
          "website": {
            "$ref": "#/components/schemas/MonitoredWebsite"
          },
          "verification": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DnsVerification"
              },
              {
                "type": "null"
              }
            ]
          },
          "latest_run": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/LatestMonitoringRun"
              },
              {
                "type": "null"
              }
            ]
          },
          "findings": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "checks": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/WebsiteSecurityCheck"
                    }
                  },
                  "exposure": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/PublicExposureFinding"
                    }
                  }
                },
                "required": [
                  "checks",
                  "exposure"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "evidence_available": {
            "type": "boolean",
            "description": "Whether the latest private evidence could be read from retained storage."
          },
          "evidence_error": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "EVIDENCE_UNAVAILABLE"
                ]
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "website",
          "verification",
          "latest_run",
          "findings",
          "evidence_available",
          "evidence_error"
        ],
        "description": "Authenticated workspace-only evidence. Verification token is null for members. Findings can be null when evidence is absent or temporarily unreadable; metadata and history remain available. A failed evidence write records a current Incomplete run with error_code=evidence_storage_unavailable instead of reusing a historical success."
      },
      "EmailGuardStatus": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "senderLimit": {
            "type": "integer",
            "minimum": 0
          },
          "senders": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EmailSender"
            }
          },
          "usage": {
            "type": "object",
            "properties": {
              "period": {
                "type": "string",
                "pattern": "^\\d{4}-\\d{2}$"
              },
              "used": {
                "type": "integer",
                "minimum": 0
              },
              "limit": {
                "type": "integer",
                "minimum": 0
              },
              "remaining": {
                "type": "integer",
                "minimum": 0
              },
              "resetAt": {
                "type": "string",
                "format": "date-time"
              }
            },
            "required": [
              "period",
              "used",
              "limit",
              "remaining",
              "resetAt"
            ]
          }
        },
        "required": [
          "enabled",
          "senderLimit",
          "senders",
          "usage"
        ],
        "description": "Workspace sender slots and shared monthly usage, never email contents. Free workspace enabled=false,limit=0 is distinct from 5 free checks/month per confirmed exact mailbox."
      },
      "WorkspaceMember": {
        "type": "object",
        "properties": {
          "hanko_user_id": {
            "type": "string"
          },
          "email": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "role": {
            "type": "string",
            "enum": [
              "owner",
              "member"
            ]
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "hanko_user_id",
          "email",
          "role",
          "created_at"
        ]
      },
      "WorkspaceInvitation": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "accepted_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "revoked_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "email",
          "expires_at",
          "accepted_at",
          "revoked_at",
          "created_at"
        ]
      },
      "ApiQuota": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "integer",
            "minimum": 0
          },
          "used": {
            "type": "integer",
            "minimum": 0
          },
          "remaining": {
            "type": "integer",
            "minimum": 0
          },
          "reset_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "limit",
          "used",
          "remaining",
          "reset_at"
        ],
        "description": "Workspace UTC monthly lookup units. Bulk requests reserve all required units or none. Forwarded email checks use a separate monthly meter."
      },
      "ApiQuotaExceeded": {
        "type": "object",
        "properties": {
          "error": {
            "$ref": "#/components/schemas/ApiError"
          },
          "quota": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ApiQuota"
              },
              {
                "type": "object",
                "properties": {
                  "allowed": {
                    "const": false
                  }
                },
                "required": [
                  "allowed"
                ]
              }
            ]
          }
        },
        "required": [
          "error",
          "quota"
        ]
      },
      "PublicExposureRedactedFinding": {
        "allOf": [
          {
            "$ref": "#/components/schemas/PublicExposureFinding"
          },
          {
            "type": "object",
            "properties": {
              "path": {
                "const": "[private finding]"
              },
              "detail": {
                "type": "string",
                "enum": [
                  "A selected path returned recognizable sensitive content.",
                  "A selected public interface needs owner review.",
                  "A selected path could not be assessed conclusively.",
                  "A selected path did not return recognizable sensitive content."
                ]
              },
              "recommendation": {
                "const": "Verify domain control in Website Guard to view private findings for your website."
              },
              "retest": {
                "type": "null"
              },
              "evidence": {
                "type": "object",
                "properties": {
                  "signature": {
                    "type": "null"
                  }
                },
                "required": [
                  "signature"
                ]
              }
            },
            "required": [
              "path",
              "detail",
              "recommendation",
              "retest",
              "evidence"
            ]
          }
        ],
        "description": "Public compatibility shape. Sensitive paths, signatures and retest URLs are withheld; category, status, HTTP status and coverage counters remain."
      },
      "ProductPlanSlug": {
        "type": "string",
        "enum": [
          "suite_starter",
          "suite_business",
          "suite_agency",
          "email_pro",
          "email_business",
          "lookups_developer",
          "lookups_growth"
        ]
      },
      "EmailSender": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "email": {
            "type": "string",
            "format": "email"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "verified",
              "paused",
              "expired"
            ]
          },
          "confirmedAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "expiresAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "email",
          "status",
          "confirmedAt",
          "expiresAt",
          "createdAt"
        ]
      },
      "LookupHistory": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "source": {
                  "type": "string",
                  "enum": [
                    "api",
                    "dashboard"
                  ]
                },
                "lookup_id": {
                  "type": "string"
                },
                "target": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "units": {
                  "type": "integer",
                  "minimum": 0
                },
                "status": {
                  "type": "integer"
                },
                "summary": {
                  "type": "object",
                  "additionalProperties": true
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "expires_at": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "required": [
                "id",
                "source",
                "lookup_id",
                "target",
                "units",
                "status",
                "summary",
                "created_at",
                "expires_at"
              ]
            },
            "maxItems": 100
          },
          "retention_days": {
            "type": "integer",
            "minimum": 0
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "items",
          "retention_days",
          "next_cursor"
        ]
      },
      "LookupRuleInput": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "description": {
            "type": "string",
            "maxLength": 500
          },
          "enabled": {
            "type": "boolean",
            "default": true
          },
          "action": {
            "type": "string",
            "enum": [
              "allow",
              "review",
              "block"
            ]
          },
          "conditions": {
            "type": "object",
            "properties": {
              "events": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "ip_addresses": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "email_domains": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "domains": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "countries": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "asns": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "hosting_provider": {
                "type": "boolean"
              },
              "disposable_email": {
                "type": "boolean"
              },
              "free_email": {
                "type": "boolean"
              },
              "role_account": {
                "type": "boolean"
              },
              "suspicious_tld": {
                "type": "boolean"
              },
              "domain_age_days_lt": {
                "type": "integer",
                "minimum": 0
              },
              "risk_score_gte": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100
              }
            },
            "required": []
          },
          "webhook_url": {
            "type": "string",
            "format": "uri",
            "description": "Optional legacy metadata; requires webhook entitlement. Rule metadata alone does not dispatch a webhook."
          }
        },
        "required": [
          "name",
          "action"
        ]
      },
      "LookupRulePatch": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "description": {
            "type": "string",
            "maxLength": 500
          },
          "enabled": {
            "type": "boolean",
            "default": true
          },
          "action": {
            "type": "string",
            "enum": [
              "allow",
              "review",
              "block"
            ]
          },
          "conditions": {
            "type": "object",
            "properties": {
              "events": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "ip_addresses": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "email_domains": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "domains": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "countries": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "asns": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "hosting_provider": {
                "type": "boolean"
              },
              "disposable_email": {
                "type": "boolean"
              },
              "free_email": {
                "type": "boolean"
              },
              "role_account": {
                "type": "boolean"
              },
              "suspicious_tld": {
                "type": "boolean"
              },
              "domain_age_days_lt": {
                "type": "integer",
                "minimum": 0
              },
              "risk_score_gte": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100
              }
            },
            "required": []
          },
          "webhook_url": {
            "type": "string",
            "format": "uri",
            "description": "Optional legacy metadata; requires webhook entitlement. Rule metadata alone does not dispatch a webhook."
          }
        },
        "required": []
      },
      "LookupRule": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "description": {
            "type": "string",
            "maxLength": 500
          },
          "enabled": {
            "type": "boolean",
            "default": true
          },
          "action": {
            "type": "string",
            "enum": [
              "allow",
              "review",
              "block"
            ]
          },
          "conditions": {
            "type": "object",
            "properties": {
              "events": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "ip_addresses": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "email_domains": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "domains": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "countries": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "asns": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "hosting_provider": {
                "type": "boolean"
              },
              "disposable_email": {
                "type": "boolean"
              },
              "free_email": {
                "type": "boolean"
              },
              "role_account": {
                "type": "boolean"
              },
              "suspicious_tld": {
                "type": "boolean"
              },
              "domain_age_days_lt": {
                "type": "integer",
                "minimum": 0
              },
              "risk_score_gte": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100
              }
            },
            "required": []
          },
          "webhook_url": {
            "type": "string",
            "format": "uri"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "name",
          "enabled",
          "action",
          "conditions",
          "created_at",
          "updated_at"
        ]
      },
      "LookupWebhookInput": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "event_types": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "high_risk_assessment",
                "quota_near_limit",
                "new_abuse_pattern"
              ]
            },
            "default": [
              "high_risk_assessment"
            ]
          },
          "enabled": {
            "type": "boolean",
            "default": true
          }
        },
        "required": [
          "name",
          "url"
        ]
      },
      "LookupWebhookPatch": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "event_types": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "high_risk_assessment",
                "quota_near_limit",
                "new_abuse_pattern"
              ]
            },
            "default": [
              "high_risk_assessment"
            ]
          },
          "enabled": {
            "type": "boolean",
            "default": true
          }
        },
        "required": []
      },
      "LookupWebhook": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "event_types": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "high_risk_assessment",
                "quota_near_limit",
                "new_abuse_pattern"
              ]
            },
            "default": [
              "high_risk_assessment"
            ]
          },
          "enabled": {
            "type": "boolean",
            "default": true
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "name",
          "url",
          "event_types",
          "enabled",
          "created_at",
          "updated_at"
        ]
      }
    }
  },
  "x-requestguard-product-catalog": [
    {
      "slug": "suite_starter",
      "name": "Suite Starter",
      "product": "suite",
      "monthlyPrice": 19,
      "annualPrice": 190,
      "description": "Website monitoring, email checks and lookups for one website.",
      "features": [
        "1 monitored website",
        "50 email checks per month \u00b7 1 sender",
        "1,000 lookups per month \u00b7 1 API key",
        "Full lookup access",
        "30-day website and lookup history"
      ],
      "entitlements": {
        "websiteLimit": 1,
        "websiteMonitoring": true,
        "emailMonthlyLimit": 50,
        "emailSenderLimit": 1,
        "apiMonthlyLimit": 1000,
        "apiKeyLimit": 1,
        "lookupFullAccess": true,
        "bulkLookups": false,
        "webhooks": false,
        "websiteHistoryDays": 30,
        "lookupHistoryDays": 30,
        "teamSeats": 1,
        "clientReports": false,
        "scheduledReports": false
      }
    },
    {
      "slug": "suite_business",
      "name": "Suite Business",
      "product": "suite",
      "monthlyPrice": 49,
      "annualPrice": 490,
      "description": "Keep your websites and team informed with scheduled reports.",
      "features": [
        "5 monitored websites",
        "500 email checks per month \u00b7 5 senders",
        "25,000 lookups per month \u00b7 5 API keys",
        "Bulk lookups and scheduled reports",
        "90-day website and lookup history \u00b7 3 team seats"
      ],
      "entitlements": {
        "websiteLimit": 5,
        "websiteMonitoring": true,
        "emailMonthlyLimit": 500,
        "emailSenderLimit": 5,
        "apiMonthlyLimit": 25000,
        "apiKeyLimit": 5,
        "lookupFullAccess": true,
        "bulkLookups": true,
        "webhooks": false,
        "websiteHistoryDays": 90,
        "lookupHistoryDays": 90,
        "teamSeats": 3,
        "clientReports": false,
        "scheduledReports": true
      }
    },
    {
      "slug": "suite_agency",
      "name": "Suite Agency",
      "product": "suite",
      "monthlyPrice": 129,
      "annualPrice": 1290,
      "description": "Monitor client websites and deliver clear reports at scale.",
      "features": [
        "25 monitored websites",
        "2,500 email checks per month \u00b7 25 senders",
        "250,000 lookups per month \u00b7 25 API keys",
        "Bulk lookups, webhooks and client reports",
        "365-day website and lookup history \u00b7 10 team seats"
      ],
      "entitlements": {
        "websiteLimit": 25,
        "websiteMonitoring": true,
        "emailMonthlyLimit": 2500,
        "emailSenderLimit": 25,
        "apiMonthlyLimit": 250000,
        "apiKeyLimit": 25,
        "lookupFullAccess": true,
        "bulkLookups": true,
        "webhooks": true,
        "websiteHistoryDays": 365,
        "lookupHistoryDays": 365,
        "teamSeats": 10,
        "clientReports": true,
        "scheduledReports": true
      }
    },
    {
      "slug": "email_pro",
      "name": "Email Pro",
      "product": "email",
      "monthlyPrice": 9,
      "annualPrice": 90,
      "description": "More suspicious-email checks for your verified sender.",
      "features": [
        "100 email checks per month",
        "1 verified sender",
        "Forward to scan@requestguard.com"
      ],
      "entitlements": {
        "websiteLimit": 0,
        "websiteMonitoring": false,
        "emailMonthlyLimit": 100,
        "emailSenderLimit": 1,
        "apiMonthlyLimit": 1000,
        "apiKeyLimit": 1,
        "lookupFullAccess": false,
        "bulkLookups": false,
        "webhooks": false,
        "websiteHistoryDays": 90,
        "lookupHistoryDays": 0,
        "teamSeats": 1,
        "clientReports": false,
        "scheduledReports": false
      }
    },
    {
      "slug": "email_business",
      "name": "Email Business",
      "product": "email",
      "monthlyPrice": 29,
      "annualPrice": 290,
      "description": "A shared monthly email allowance for your team\u2019s senders.",
      "features": [
        "1,000 email checks per month",
        "5 verified senders",
        "Forward to scan@requestguard.com"
      ],
      "entitlements": {
        "websiteLimit": 0,
        "websiteMonitoring": false,
        "emailMonthlyLimit": 1000,
        "emailSenderLimit": 5,
        "apiMonthlyLimit": 1000,
        "apiKeyLimit": 1,
        "lookupFullAccess": false,
        "bulkLookups": false,
        "webhooks": false,
        "websiteHistoryDays": 90,
        "lookupHistoryDays": 0,
        "teamSeats": 1,
        "clientReports": false,
        "scheduledReports": false
      }
    },
    {
      "slug": "lookups_developer",
      "name": "Lookups Developer",
      "product": "lookups",
      "monthlyPrice": 19,
      "annualPrice": null,
      "description": "Full security lookups for your applications.",
      "features": [
        "25,000 lookups per month",
        "5 API keys",
        "Full lookup access and 30-day history"
      ],
      "entitlements": {
        "websiteLimit": 0,
        "websiteMonitoring": false,
        "emailMonthlyLimit": 0,
        "emailSenderLimit": 0,
        "apiMonthlyLimit": 25000,
        "apiKeyLimit": 5,
        "lookupFullAccess": true,
        "bulkLookups": false,
        "webhooks": false,
        "websiteHistoryDays": 90,
        "lookupHistoryDays": 30,
        "teamSeats": 1,
        "clientReports": false,
        "scheduledReports": false
      }
    },
    {
      "slug": "lookups_growth",
      "name": "Lookups Growth",
      "product": "lookups",
      "monthlyPrice": 59,
      "annualPrice": null,
      "description": "Higher lookup capacity, bulk requests and webhooks.",
      "features": [
        "250,000 lookups per month",
        "25 API keys",
        "Bulk lookups and webhooks",
        "90-day lookup history"
      ],
      "entitlements": {
        "websiteLimit": 0,
        "websiteMonitoring": false,
        "emailMonthlyLimit": 0,
        "emailSenderLimit": 0,
        "apiMonthlyLimit": 250000,
        "apiKeyLimit": 25,
        "lookupFullAccess": true,
        "bulkLookups": true,
        "webhooks": true,
        "websiteHistoryDays": 90,
        "lookupHistoryDays": 90,
        "teamSeats": 1,
        "clientReports": false,
        "scheduledReports": false
      }
    }
  ],
  "x-requestguard-free-entitlements": {
    "websiteLimit": 0,
    "websiteMonitoring": false,
    "emailMonthlyLimit": 0,
    "emailSenderLimit": 0,
    "apiMonthlyLimit": 1000,
    "apiKeyLimit": 1,
    "lookupFullAccess": false,
    "bulkLookups": false,
    "webhooks": false,
    "websiteHistoryDays": 90,
    "lookupHistoryDays": 0,
    "teamSeats": 1,
    "clientReports": false,
    "scheduledReports": false
  },
  "x-requestguard-cors": {
    "origins": "REQUESTGUARD_ALLOWED_ORIGINS",
    "preflight": "Only registered route/method pairs; unmetered and unauthenticated; invalid method/route 404, disallowed origin/header 403.",
    "allowedHeaders": [
      "Authorization",
      "Content-Type",
      "X-API-Key",
      "Accept"
    ],
    "credentials": false,
    "exposedHeaders": [
      "X-RequestGuard-Quota-Limit",
      "X-RequestGuard-Quota-Used",
      "X-RequestGuard-Quota-Remaining",
      "X-RequestGuard-Quota-Reset"
    ],
    "authorization": "Actual intelligence requests require an active workspace API key independently of CORS."
  }
}
