{
  "openapi": "3.0.3",
  "info": {
    "title": "SAVE N GO Locksmith Quote Requests",
    "version": "1.0.0",
    "description": "Customer-authorized requests for a human-reviewed locksmith price, handled by Netlify Forms. URL-encoded POST, not JSON. Requires active Netlify form detection. No instant price or booking. A client-side market planning estimator is available on /quote/; its ranges are non-binding and not verified SAVE N GO rates."
  },
  "servers": [
    {
      "url": "https://savengolocksmith.com"
    }
  ],
  "paths": {
    "/": {
      "post": {
        "operationId": "submitLocksmithQuoteRequest",
        "x-openai-isConsequential": true,
        "summary": "Submit a customer-authorized quote request",
        "description": "Obtain customer authorization before transmitting contact details. Send URL-encoded fields including form-name=quote and consent=true. Netlify returns HTML or a redirect, not JSON. Acceptance for processing is not proof of inbox delivery or a confirmed price/booking.",
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "name": {
                    "type": "string",
                    "maxLength": 100
                  },
                  "phone": {
                    "type": "string",
                    "maxLength": 30
                  },
                  "zip": {
                    "type": "string",
                    "maxLength": 5,
                    "pattern": "^[0-9]{5}$"
                  },
                  "service": {
                    "type": "string",
                    "maxLength": 50,
                    "enum": [
                      "Automotive",
                      "Residential",
                      "Commercial",
                      "Access control project management"
                    ]
                  },
                  "email": {
                    "type": "string",
                    "maxLength": 150
                  },
                  "vehicle": {
                    "type": "string",
                    "maxLength": 150
                  },
                  "details": {
                    "type": "string",
                    "maxLength": 3000
                  },
                  "consent": {
                    "type": "string",
                    "enum": [
                      "true"
                    ],
                    "description": "Only send true after explicit customer authorization."
                  },
                  "form-name": {
                    "type": "string",
                    "enum": [
                      "quote"
                    ]
                  },
                  "website": {
                    "type": "string",
                    "maxLength": 0,
                    "description": "Honeypot: leave blank or omit."
                  },
                  "situation": {
                    "type": "string",
                    "maxLength": 50
                  },
                  "key_kind": {
                    "type": "string",
                    "maxLength": 30
                  },
                  "lock_count": {
                    "type": "string",
                    "maxLength": 3
                  },
                  "timing": {
                    "type": "string",
                    "maxLength": 30
                  },
                  "planning_estimate": {
                    "type": "string",
                    "maxLength": 500
                  }
                },
                "required": [
                  "name",
                  "phone",
                  "zip",
                  "service",
                  "details",
                  "consent",
                  "form-name"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Accepted for processing. Spam filtering/email notifications can still affect delivery. No price or booking.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "303": {
            "description": "Redirect to thank-you page after processing."
          },
          "400": {
            "description": "Request rejected."
          },
          "404": {
            "description": "Endpoint or form detection unavailable."
          },
          "429": {
            "description": "Provider limit."
          }
        }
      }
    }
  }
}