{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/jobspipe/json-schema/jobspipe-stack-scan-response-schema.json",
  "title": "StackScanResponse",
  "x-generated": "2026-11-10",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/jobspipe-stack-api-openapi.yml#/components/schemas/StackScanResponse",
  "type": "object",
  "required": [
    "domain",
    "scanned_at",
    "http_status",
    "detected"
  ],
  "properties": {
    "domain": {
      "type": "string",
      "description": "The normalized domain that was scanned."
    },
    "scanned_at": {
      "type": "string",
      "format": "date-time",
      "description": "ISO 8601 timestamp of when the scan was performed."
    },
    "http_status": {
      "type": "integer",
      "description": "HTTP status code returned by the scanned domain."
    },
    "detected": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/DetectedTech"
      },
      "description": "The technologies detected on the domain."
    }
  },
  "$defs": {
    "DetectedTech": {
      "type": "object",
      "description": "A technology detected on the scanned domain.",
      "required": [
        "slug",
        "name",
        "categories",
        "confidence",
        "signals",
        "pricing",
        "saas",
        "oss"
      ],
      "properties": {
        "slug": {
          "type": "string",
          "description": "Stable technology identifier, e.g. 'nextjs'."
        },
        "name": {
          "type": "string",
          "description": "Display name, e.g. 'Next.js'."
        },
        "categories": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Categories the technology belongs to, e.g. 'Web frameworks', 'Analytics'."
        },
        "confidence": {
          "type": "number",
          "description": "0-100 match confidence for this detection."
        },
        "version": {
          "type": [
            "string",
            "null"
          ],
          "description": "Detected version, when the fingerprint reveals one."
        },
        "signals": {
          "type": "array",
          "description": "The evidence behind the detection: what kind of fingerprint matched and the matched value.",
          "items": {
            "type": "object",
            "required": [
              "kind",
              "match"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "description": "Signal type, e.g. 'header', 'script', 'meta', 'cookie'."
              },
              "match": {
                "type": "string",
                "description": "The matched fingerprint value."
              }
            }
          }
        },
        "description": {
          "type": [
            "string",
            "null"
          ],
          "description": "Short description of the technology."
        },
        "website": {
          "type": [
            "string",
            "null"
          ],
          "description": "The technology vendor's website."
        },
        "icon": {
          "type": [
            "string",
            "null"
          ],
          "description": "Icon identifier for the technology."
        },
        "pricing": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Pricing traits, e.g. 'freemium', 'payg'."
        },
        "saas": {
          "type": "boolean",
          "description": "True if offered as a hosted SaaS."
        },
        "oss": {
          "type": "boolean",
          "description": "True if open source."
        }
      }
    }
  }
}