{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/buyrecord-app/json-schema/buyrecord-app-merchant-profile-schema.json",
  "title": "MerchantProfile",
  "x-generated": "2026-11-03",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/buyrecord-app-openapi.json#/components/schemas/MerchantProfile",
  "properties": {
    "shop_domain": {
      "type": "string",
      "title": "Shop Domain"
    },
    "product_count": {
      "type": "integer",
      "title": "Product Count"
    },
    "sample_size": {
      "type": "integer",
      "title": "Sample Size"
    },
    "min_sample": {
      "type": "integer",
      "title": "Min Sample"
    },
    "return_rate": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "title": "Return Rate"
    },
    "complaint_rate": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "title": "Complaint Rate"
    },
    "delivery_issue_rate": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "title": "Delivery Issue Rate",
      "description": "Share of outcomes citing late_delivery or damaged."
    },
    "top_reasons": {
      "items": {
        "type": "string",
        "enum": [
          "size",
          "quality",
          "not_as_described",
          "late_delivery",
          "damaged",
          "other"
        ]
      },
      "type": "array",
      "title": "Top Reasons"
    },
    "last_synced_at": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time"
        },
        {
          "type": "null"
        }
      ],
      "title": "Last Synced At"
    },
    "store_policy": {
      "anyOf": [
        {
          "$ref": "#/$defs/StorePolicy"
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "type": "object",
  "required": [
    "shop_domain",
    "product_count",
    "sample_size",
    "min_sample",
    "return_rate",
    "complaint_rate",
    "delivery_issue_rate",
    "top_reasons",
    "last_synced_at",
    "store_policy"
  ],
  "$defs": {
    "StorePolicy": {
      "properties": {
        "return_window_days": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Return Window Days"
        },
        "free_returns": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "title": "Free Returns"
        },
        "label": {
          "type": "string",
          "const": "published on the merchant's site, not verified",
          "title": "Label",
          "default": "published on the merchant's site, not verified"
        }
      },
      "type": "object",
      "required": [
        "return_window_days",
        "free_returns"
      ],
      "title": "StorePolicy",
      "description": "Return policy facts read from the store's public refund policy. Not verified by BuyRecord."
    }
  }
}