{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/hint-health/main/json-schema/hint-health-product-sanitizer-schema.json",
  "title": "ProductSanitizer",
  "x-generated": "2026-10-12",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/hint-health-product-api-openapi.yml#/components/schemas/ProductSanitizer",
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Display name of the marketplace listing."
    },
    "slug": {
      "type": "string",
      "description": "URL-safe identifier (e.g. \"my-product\"). Only settable on create — contact Hint support to change it later."
    },
    "type": {
      "type": "string",
      "description": "Kind of marketplace listing.",
      "enum": [
        "app",
        "integration",
        "solution"
      ]
    },
    "summary": {
      "type": "string",
      "description": "Short tagline shown on the marketplace card (max 80 chars)."
    },
    "built_by_name": {
      "type": "string",
      "description": "Display name of the maker, shown under the listing as \"Built by <name>\"."
    },
    "built_by_url": {
      "type": "string",
      "description": "Url the \"Built by\" link points to."
    },
    "icon": {
      "type": "string",
      "description": "Listing icon as a base64 data URI (e.g. \"data:image/png;base64,...\"). **Note the field-name asymmetry:** the request field is `icon` (data URI input); the GET response surfaces the uploaded image as `icon_url` (hosted URL). Sending `icon_url` as a request field is silently ignored. The listing icon is distinct from the Core Page sidebar icon (`surface.core_page_icon`) — see the surface endpoints for that."
    }
  }
}