{
  "openapi": "3.1.0",
  "info": {
    "title": "Request a consultation with London Foster Realty LLC",
    "version": "1.0.0",
    "description": "Ask London Foster Realty LLC for a buyer consultation or a listing appointment. This sends a request only: nothing is booked until an agent of London Foster Realty LLC confirms a time with the person. Send only what the person said they want shared. The request does not sign the person up for texts or calls. London Foster Realty LLC. Equal Housing Opportunity."
  },
  "servers": [
    {
      "url": "https://app.getrealtymind.com"
    }
  ],
  "paths": {
    "/ai/london-foster-realty/request": {
      "post": {
        "operationId": "requestConsultation",
        "summary": "Request a buyer consultation or a listing appointment with London Foster Realty LLC",
        "description": "Use when the person asks to meet an agent about buying or selling a home. Confirm the details with the person first.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "kind",
                  "name"
                ],
                "additionalProperties": false,
                "properties": {
                  "kind": {
                    "type": "string",
                    "enum": [
                      "buyer_consult",
                      "listing_appt"
                    ],
                    "description": "buyer_consult: they want to buy. listing_appt: they want to sell their home."
                  },
                  "name": {
                    "type": "string",
                    "maxLength": 120,
                    "description": "The person’s name."
                  },
                  "phone": {
                    "type": "string",
                    "maxLength": 30,
                    "description": "A US phone number. Give a phone or an email."
                  },
                  "email": {
                    "type": "string",
                    "maxLength": 160,
                    "description": "An email. Give a phone or an email."
                  },
                  "about": {
                    "type": "string",
                    "maxLength": 1000,
                    "description": "What they want, in their words (area, budget, timing)."
                  },
                  "times": {
                    "type": "string",
                    "maxLength": 300,
                    "description": "Days and times they prefer, in their words."
                  },
                  "assistant": {
                    "type": "string",
                    "enum": [
                      "chatgpt",
                      "claude",
                      "gemini",
                      "copilot",
                      "perplexity",
                      "other"
                    ],
                    "description": "Which assistant is sending this."
                  },
                  "language": {
                    "type": "string",
                    "enum": [
                      "en",
                      "es"
                    ],
                    "description": "The language they want to be answered in."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request was sent.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "ok": {
                      "type": "boolean"
                    },
                    "reference": {
                      "type": "string"
                    },
                    "say": {
                      "type": "string",
                      "description": "What to tell the person."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Something is missing. The error says what."
          },
          "429": {
            "description": "Too many requests. Try later."
          }
        }
      }
    },
    "/ai/london-foster-realty/times.json": {
      "get": {
        "operationId": "openTimes",
        "summary": "Open times with London Foster Realty LLC (consultations and listing appointments only)",
        "parameters": [
          {
            "name": "kind",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "buyer_consult",
                "listing_appt"
              ],
              "description": "buyer_consult: they want to buy. listing_appt: they want to sell."
            }
          },
          {
            "name": "from",
            "in": "query",
            "schema": {
              "type": "string",
              "description": "First day, MM/DD/YYYY"
            }
          },
          {
            "name": "days",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 14
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Open days, each with times. Use a time’s start to book."
          }
        }
      }
    },
    "/ai/london-foster-realty/book": {
      "post": {
        "operationId": "bookTime",
        "summary": "Book an open time with London Foster Realty LLC",
        "description": "Confirm the time, the name and a phone or an email with the person first, then send person_confirmed true. Booking does not sign the person up for texts or calls.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "kind",
                  "start",
                  "first_name",
                  "person_confirmed"
                ],
                "additionalProperties": false,
                "properties": {
                  "kind": {
                    "type": "string",
                    "enum": [
                      "buyer_consult",
                      "listing_appt"
                    ],
                    "description": "buyer_consult: they want to buy. listing_appt: they want to sell."
                  },
                  "start": {
                    "type": "string",
                    "description": "The start of the time, exactly as openTimes gave it."
                  },
                  "first_name": {
                    "type": "string",
                    "maxLength": 60
                  },
                  "last_name": {
                    "type": "string",
                    "maxLength": 60
                  },
                  "phone": {
                    "type": "string",
                    "maxLength": 30
                  },
                  "email": {
                    "type": "string",
                    "maxLength": 160
                  },
                  "note": {
                    "type": "string",
                    "maxLength": 1000
                  },
                  "assistant": {
                    "type": "string",
                    "enum": [
                      "chatgpt",
                      "claude",
                      "gemini",
                      "copilot",
                      "perplexity",
                      "siri",
                      "alexa",
                      "meta",
                      "other"
                    ]
                  },
                  "language": {
                    "type": "string",
                    "enum": [
                      "en",
                      "es"
                    ]
                  },
                  "person_confirmed": {
                    "type": "boolean"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Booked. say: what to tell the person."
          },
          "400": {
            "description": "Not booked. The error says why."
          }
        }
      }
    }
  }
}