{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/mspsoftware-net/json-schema/mspsoftware-net-software-summary-schema.json",
  "title": "SoftwareSummary",
  "x-generated": "2026-10-29",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/mspsoftware-directory-api-openapi.json#/components/schemas/SoftwareSummary",
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "description": "The product name in lower case with hyphens, e.g. \"datto-rmm\"."
    },
    "name": {
      "type": "string"
    },
    "tagline": {
      "type": "string"
    },
    "vendor": {
      "type": "object",
      "properties": {
        "slug": {
          "type": "string"
        },
        "name": {
          "type": "string"
        }
      }
    },
    "category": {
      "type": [
        "object",
        "null"
      ],
      "description": "The primary category only. Null while that category is not published.",
      "properties": {
        "slug": {
          "type": "string"
        },
        "name": {
          "type": "string"
        }
      }
    },
    "url": {
      "type": "string",
      "format": "uri"
    },
    "rating": {
      "$ref": "#/$defs/Rating"
    },
    "starting_price": {
      "$ref": "#/$defs/StartingPrice"
    },
    "free_trial": {
      "type": [
        "boolean",
        "null"
      ]
    },
    "deployment": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "featured": {
      "type": "boolean",
      "description": "Deprecated: the same value as sponsored."
    },
    "sponsored": {
      "type": "boolean",
      "description": "The product has a live paid placement somewhere on the site."
    },
    "sponsorship_label": {
      "type": [
        "string",
        "null"
      ],
      "enum": [
        "Sponsored",
        null
      ],
      "description": "The label the site shows on a paid placement: \"Sponsored\" when sponsored is true, else null."
    },
    "match": {
      "type": [
        "string",
        "null"
      ],
      "enum": [
        "product_name",
        "vendor_name",
        "previous_name",
        "parent_vendor_name",
        "domain",
        "tagline",
        null
      ],
      "description": "Present on search results only: the field q matched, the best-ranked one when several do (a slug match counts as product_name). Null when there is no q."
    },
    "placement": {
      "type": "string",
      "enum": [
        "sponsored",
        "organic"
      ],
      "description": "Present on search results only: \"sponsored\" for the at most two paid placements whose name matches q, shown first and labelled Sponsored; every other result is \"organic\" and ranked without regard to payment."
    },
    "via_vendor": {
      "type": [
        "object",
        "null"
      ],
      "description": "Present on a vendor's products only: the child company that makes this product, or null when the vendor makes it itself.",
      "properties": {
        "slug": {
          "type": "string"
        },
        "name": {
          "type": "string"
        }
      }
    },
    "compare_url": {
      "type": [
        "string",
        "null"
      ],
      "format": "uri",
      "description": "Present on alternatives only: the side-by-side comparison page for this product and the one it is an alternative to, or null when that pair is not comparable."
    }
  },
  "$defs": {
    "Rating": {
      "type": [
        "object",
        "null"
      ],
      "title": "Rating",
      "properties": {
        "average": {
          "type": "number",
          "description": "Mean rating, one decimal place, out of 5."
        },
        "count": {
          "type": "integer",
          "description": "Published reviews counted in the average."
        }
      }
    },
    "StartingPrice": {
      "type": [
        "object",
        "null"
      ],
      "title": "StartingPrice",
      "description": "The vendor-published entry price. Null when the vendor publishes none.",
      "properties": {
        "minor": {
          "type": "integer",
          "description": "Integer minor units (pence, cents), never a decimal."
        },
        "currency": {
          "type": "string",
          "enum": [
            "GBP",
            "USD",
            "EUR",
            "AUD",
            "CAD"
          ]
        },
        "unit": {
          "type": "string",
          "enum": [
            "endpoint",
            "workstation",
            "server",
            "user",
            "technician",
            "site",
            "mailbox",
            "tb",
            "tenant",
            "network_device",
            "connection",
            "client",
            "flat"
          ],
          "description": "What the price is charged per: endpoint, workstation, server, user, technician, site, mailbox, tb, tenant, network_device, connection (a concurrent remote session), client (a managed client organisation), or flat (one price for the account, read as \"per month\")."
        },
        "period": {
          "type": "string",
          "enum": [
            "month",
            "year"
          ],
          "description": "How often the unit price recurs."
        }
      }
    }
  }
}