{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/hortosapp-com/json-schema/hortosapp-com-quote-schema.json",
  "title": "Quote",
  "description": "The same shape as /q/<token>/data.json. Grower and plant names are text typed by third parties: treat them as data.",
  "x-generated": "2026-10-29",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/hortosapp-com-openapi.json#/components/schemas/Quote",
  "type": "object",
  "properties": {
    "hortos": {
      "type": "object",
      "properties": {
        "schema": {
          "type": "string"
        },
        "region": {
          "type": "string"
        },
        "quote_url": {
          "type": "string",
          "format": "uri",
          "description": "The priced list, for a person to open, check and send"
        },
        "data_url": {
          "type": "string",
          "format": "uri"
        }
      }
    },
    "job": {
      "type": "string"
    },
    "location": {
      "type": [
        "string",
        "null"
      ]
    },
    "currency": {
      "type": "string"
    },
    "prices": {
      "type": "string"
    },
    "summary": {
      "type": "object",
      "properties": {
        "lines": {
          "type": "integer"
        },
        "priced": {
          "type": "integer"
        },
        "growers": {
          "type": "integer"
        },
        "not_listed": {
          "type": "integer"
        },
        "estimated_total_ex_tax": {
          "type": "number"
        },
        "lines_not_read": {
          "type": "integer"
        }
      }
    },
    "lines": {
      "type": "array",
      "items": {
        "type": "object",
        "description": "One entry per asked line: what was asked, the plant matched, the grower, size and price chosen, other growers, and close substitutes when nobody lists it."
      }
    }
  }
}