{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://bymoin.com/contracts/cat-01/web-form-intake.schema.json",
  "title": "CAT-01 web form intake",
  "description": "The JSON body a website form POSTs to the CAT-01 intake webhook (n8n path cat01-bymoin-intake, header auth). Field limits match the production normaliser. A repeated intake_key is a double submit and is held once.",
  "type": "object",
  "required": ["name", "email", "message"],
  "properties": {
    "name": { "type": "string", "minLength": 1 },
    "email": { "type": "string", "minLength": 3, "maxLength": 200 },
    "company": { "type": "string", "maxLength": 120 },
    "engagementType": { "type": "string", "maxLength": 60 },
    "message": { "type": "string", "minLength": 1, "maxLength": 4000 },
    "source": { "type": "string", "description": "Where the form lives, for example bymoin.com/contact." },
    "intake_key": { "type": "string", "pattern": "^[0-9a-f]{32}$", "description": "First 32 hex characters of SHA-256 over source|email|message. It de-duplicates a double submit." },
    "utm_source": { "type": "string", "maxLength": 200 },
    "utm_medium": { "type": "string", "maxLength": 200 },
    "utm_campaign": { "type": "string", "maxLength": 200 },
    "utm_term": { "type": "string", "maxLength": 200 },
    "utm_content": { "type": "string", "maxLength": 200 },
    "referrer": { "type": "string", "maxLength": 200 },
    "landing_page": { "type": "string", "maxLength": 200 }
  },
  "additionalProperties": true,
  "examples": [
    {
      "name": "Priya Nandan",
      "email": "priya@example.com",
      "company": "Nandan Roofing",
      "engagementType": "SPEED_TO_LEAD",
      "message": "We get about 40 web enquiries a week and reply the next day. We want to answer in minutes.",
      "source": "bymoin.com/contact",
      "intake_key": "9f2c1d4e7a8b0c3d5e6f708192a3b4c5",
      "utm_source": "newsletter",
      "landing_page": "/catalog/speed-to-lead"
    }
  ]
}
