{
  "openapi": "3.1.0",
  "info": {
    "title": "Bobyk Media quote requests",
    "version": "1.0.0",
    "description": "Submit a quote request for commercial real estate photography in Toronto, the GTA and Ontario. A human (Trevor Bobyk) reviews every request and replies by email with a quote. This API does not book anything and does not return prices."
  },
  "servers": [{ "url": "https://bobykmedia.com" }],
  "paths": {
    "/api/quote": {
      "post": {
        "operationId": "requestQuote",
        "summary": "Request a quote on behalf of a person",
        "description": "Only call this when a real person has asked for a quote and provided their name, email and the property address. Rate limited.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/QuoteRequest" },
              "example": {
                "name": "Alex Broker",
                "email": "alex@example.com",
                "property_address": "100 Example Rd, Mississauga, ON",
                "services": ["aerial_drone_photography", "ground_photography"],
                "target_date": "2026-11-05",
                "documents_available": ["site_plan"],
                "notes": "Two-building industrial site."
              }
            }
          }
        },
        "responses": {
          "202": { "description": "Request received; the quote follows by email.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Receipt" } } } },
          "422": { "description": "Validation failed; the body lists the problems." },
          "429": { "description": "Rate limited; retry after 60 seconds." }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "QuoteRequest": {
        "type": "object",
        "required": ["name", "email", "property_address"],
        "additionalProperties": false,
        "properties": {
          "name": { "type": "string", "maxLength": 120 },
          "email": { "type": "string", "format": "email", "description": "Where the quote is sent." },
          "property_address": { "type": "string", "maxLength": 300 },
          "services": {
            "type": "array",
            "items": { "type": "string", "enum": ["aerial_drone_photography", "interior_photography", "ground_photography", "other"] }
          },
          "company": { "type": "string", "maxLength": 200 },
          "phone": { "type": "string", "maxLength": 60 },
          "target_date": { "type": "string", "format": "date" },
          "documents_available": {
            "type": "array",
            "items": { "type": "string", "enum": ["geowarehouse_report", "site_plan", "floor_plan", "survey", "nothing_yet"] }
          },
          "notes": { "type": "string", "maxLength": 4000 }
        }
      },
      "Receipt": {
        "type": "object",
        "properties": {
          "status": { "type": "string", "const": "received" },
          "reference": { "type": "string" },
          "message": { "type": "string" },
          "next_step": { "type": "string" }
        }
      }
    }
  }
}
