{
  "title": "Used GPU Price & Stock Monitor — GPUsed",
  "type": "object",
  "schemaVersion": 1,
  "properties": {
    "collections": {
      "title": "GPU collections",
      "type": "array",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "default": [],
      "prefill": [
        "graphics-cards"
      ],
      "description": "Up to three supported GPUsed collection handles. Empty uses graphics-cards. Supported: graphics-cards, nvidia, amd, used-workstation-ai-graphics-cards, nvidia-30-series, nvidia-40-series, nvidia-50-series-gpus."
    },
    "productsPerPage": {
      "title": "Products per source page",
      "type": "integer",
      "default": 5,
      "minimum": 1,
      "maximum": 50,
      "description": "Bounded source window before GPU, availability and keyword filters. Not a whole-market search."
    },
    "maxPagesPerCollection": {
      "title": "Pages per collection",
      "type": "integer",
      "default": 1,
      "minimum": 1,
      "maximum": 4,
      "description": "At most four sequential public catalog pages per collection."
    },
    "inStockOnly": {
      "title": "Only currently listed available",
      "type": "boolean",
      "default": false,
      "description": "Exclude variants the shop marks unavailable. Availability does not disclose exact quantities or reserve stock."
    },
    "modelKeywords": {
      "title": "GPU title keywords",
      "type": "array",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "default": [],
      "description": "Optional literal phrases matched against the product title or explicit model field. Any phrase matches inside the selected source window."
    },
    "minVramGb": {
      "title": "Minimum VRAM (GB)",
      "type": "integer",
      "default": 0,
      "minimum": 0,
      "maximum": 192,
      "description": "If above zero, rows without an explicit unambiguous VRAM amount are excluded. VRAM is not a performance score."
    },
    "maxPriceGbp": {
      "title": "Maximum asking price (GBP)",
      "type": "number",
      "default": 0,
      "minimum": 0,
      "maximum": 1000000,
      "description": "Zero disables this filter. Shipping, fees and tax adjustments are not calculated."
    },
    "maxResults": {
      "title": "Maximum saved records",
      "type": "integer",
      "default": 20,
      "minimum": 1,
      "maximum": 100,
      "description": "Maximum saved billable observations across sources. Partial windows do not advance comparison history."
    },
    "comparePrevious": {
      "title": "Compare with previous complete run",
      "type": "boolean",
      "default": false,
      "description": "Store source observations only after the entire selected window succeeds. New, changed and unchanged records include previous values. Missing records are never inferred closed or deleted."
    },
    "onlyChanges": {
      "title": "Save only new or changed records",
      "type": "boolean",
      "default": false,
      "description": "Enables comparison. Unchanged repeats can correctly save zero rows and incur no dataset-item charges."
    },
    "snapshotName": {
      "title": "Comparison snapshot",
      "type": "string",
      "editor": "textfield",
      "default": "default",
      "description": "1-80 letters, numbers, underscores or hyphens. Separate history for the source list, selected window and filters. Use a new name for an independent workflow."
    },
    "maxRunSeconds": {
      "title": "Run budget in seconds",
      "type": "integer",
      "default": 90,
      "minimum": 30,
      "maximum": 120,
      "description": "Shared deadline with bounded public requests. Access refusals and rate limits stop further requests without a bypass."
    }
  }
}
