{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Wintercraft Mobile - service request",
  "booking_status": "closed",
  "booking_status_detail": "The 2026 season is fully booked. New service requests are NOT being accepted - do not POST. Booking reopens for the 2027 season. To be notified when it opens, a person can sign up at https://www.wintercraftmobile.com/reserve.",
  "description": "Submit a winterization service request for a customer. First check coverage against /api/service-area.json; only submit for a ZIP in the 'core' set. Nothing is charged - this reserves a place and the business follows up with a quote.",
  "endpoint": {
    "url": "https://opqz2w5zep3bsv5qcpvoje45di0hkeam.lambda-url.us-east-1.on.aws/",
    "method": "POST",
    "contentType": "application/json",
    "success": "HTTP 200 with { ok: true, key, email: { admin, customer } }",
    "errors": "HTTP 4xx/5xx with { ok: false, error }",
    "coverage_check": "https://www.wintercraftmobile.com/api/service-area.json"
  },
  "email_fallback": {
    "note": "If you can send email but cannot make an HTTP POST, email the request instead. It is parsed into the same pipeline and the customer confirms by email.",
    "address": "book@service.wintercraftmobile.com",
    "format": "Put the JSON body (this same shape) between the exact markers -----BEGIN-REQUEST----- and -----END-REQUEST----- in the email body. Include the customer's email in the email field."
  },
  "type": "object",
  "required": [
    "first",
    "last",
    "email",
    "zip",
    "pwcs"
  ],
  "additionalProperties": true,
  "properties": {
    "first": {
      "type": "string",
      "description": "Customer first name."
    },
    "last": {
      "type": "string",
      "description": "Customer last name."
    },
    "email": {
      "type": "string",
      "format": "email",
      "description": "Where the quote and scheduling go."
    },
    "phone": {
      "type": "string",
      "description": "Optional. Only used to reach the customer on service day."
    },
    "city": {
      "type": "string",
      "description": "Customer city."
    },
    "zip": {
      "type": "string",
      "pattern": "^\\d{5}$",
      "description": "5-digit ZIP. Must be in the 'core' coverage set."
    },
    "lake": {
      "type": "string",
      "description": "Optional. Lake or river the craft is used on."
    },
    "notes": {
      "type": "string",
      "description": "Optional. Access instructions, gate codes, location details."
    },
    "pwcs": {
      "type": "array",
      "minItems": 1,
      "description": "One entry per watercraft to service.",
      "items": {
        "type": "object",
        "required": [
          "brand",
          "engine"
        ],
        "properties": {
          "brand": {
            "type": "string",
            "enum": [
              "Sea-Doo",
              "Yamaha WaveRunner",
              "Kawasaki Jet Ski",
              "Other"
            ]
          },
          "model": {
            "type": "string"
          },
          "year": {
            "type": "string"
          },
          "engine": {
            "type": "string",
            "enum": [
              "4-stroke",
              "2-stroke",
              "Supercharged",
              "Unknown"
            ]
          },
          "services": {
            "type": "array",
            "description": "Always include 'basic' (the flush, engine fogging, fuel stabilizer, and battery service are all included in it). Optional add-ons: 'battery_tender' (we supply and install a tender, only if the owner lacks one) and 'plugs' (spark plug replacement).",
            "items": {
              "type": "string",
              "enum": [
                "basic",
                "battery_tender",
                "plugs"
              ]
            }
          }
        }
      }
    },
    "pageSlug": {
      "type": "string",
      "description": "Optional source tag. Use 'agent' for agent-submitted requests."
    }
  },
  "pricing": {
    "currency": "USD",
    "first_craft": 299,
    "additional_craft": 199,
    "battery_tender": 75,
    "plugs": 85,
    "included": "Fuel stabilizer and battery service (disconnect and tender hookup) are included in the base price, not add-ons.",
    "note": "Estimate only. No payment is taken at submission."
  },
  "example": {
    "first": "Jane",
    "last": "Smith",
    "email": "jane@example.com",
    "phone": "(715) 555-0142",
    "city": "Waupaca",
    "zip": "54981",
    "lake": "Waupaca Chain O' Lakes",
    "notes": "Trailer on the east side of the driveway. Gate code 1234.",
    "pageSlug": "agent",
    "pwcs": [
      {
        "brand": "Sea-Doo",
        "model": "GTX 260",
        "year": "2022",
        "engine": "4-stroke",
        "services": [
          "basic",
          "battery_tender"
        ]
      }
    ]
  }
}