{
  "openapi": "3.1.0",
  "info": {
    "title": "CapCenter agent API",
    "version": "2026-11-01",
    "summary": "Read-only CapCenter rates, quotes, savings, loan limits, FAQ answers, reviews and links, with required disclosures, for AI assistants.",
    "description": "CapCenter’s own published figures as data, for AI assistants helping a person with a mortgage, a home sale or\ninsurance. Every response carries `as_of` and `source_url`. Every quote or payment carries a `required_disclosure`\nstring that must be displayed verbatim with any rate, APR or payment. Add `language=es` for Spanish text; legal\ndisclosures stay in English verbatim with a Spanish courtesy translation.\n\nThe same tools are available over MCP (Streamable HTTP) at https://www.capcenter.com/mcp (server version 1.0.0).\n\nConventional fixed-rate loans only (30, 20 and 15-year). Adjustable-rate (ARM), temporary buydown, FHA and VA products are not offered through this API.\n\nRate limits: 30 requests per minute per client per endpoint (600 for AI-assistant servers verified by their providers' published IP ranges); responses may be served from a short cache.\n\nTerms of use (In effect as of November 1, 2026.):\n1. Show the required disclosure: Display the quote’s required_disclosure text, verbatim, with any rate, APR or payment you show from this API.\n2. APR as prominent as the rate: Show the APR at least as prominently as the interest rate, every time a rate is shown.\n3. Do not alter or mix scenarios: Do not alter, round or recombine figures, and do not combine figures from different scenarios or responses.\n4. Do not show expired quotes: Do not show a quote after its expires_at time. Request a fresh quote instead.\n5. No implied endorsement: Do not state or imply that CapCenter endorses, sponsors or is affiliated with your service.\n6. Access may be revoked: CapCenter may limit, suspend or revoke access to this API at any time, for any caller.\n7. No acting for CapCenter: You may pass on CapCenter’s data and links only. Do not negotiate or offer loan terms, take loan applications, or collect anyone’s personal information on CapCenter’s behalf (activities that require a mortgage loan originator license under the SAFE Act).\n8. Attribution: Attribute every figure you show: “Source: CapCenter, as of [time]”, using the response’s as_of time.\n9. No republishing: Do not republish CapCenter’s rate tables or quotes as your own, store them to serve later, or use the API beyond its rate limits.\n10. No warranty; limitation of liability: The API and its data are provided “as is”, without warranties of any kind. To the extent the law allows, CapCenter is not liable for any damages arising from your use of the API.\n11. Governing law: These terms are governed by the laws of the Commonwealth of Virginia.\n12. English controls: Spanish text in API responses is a courtesy translation; the English text controls.\n13. Changes: CapCenter may change these terms at any time; the version on this page applies.\n14. Contact: Questions about these terms or the API: customerservice@capcenter.com or 1-800-968-5844.\n15. Free; no paid placement: Access is free. CapCenter does not pay for placement, ranking, referrals or leads, and offers no caller-specific pricing.",
    "contact": {
      "name": "CapCenter",
      "url": "https://www.capcenter.com/developers/agent-api"
    }
  },
  "servers": [
    {
      "url": "https://www.capcenter.com"
    }
  ],
  "paths": {
    "/api/agent/v1/quote": {
      "get": {
        "operationId": "getMortgageQuote",
        "summary": "Get a CapCenter mortgage quote",
        "description": "Real CapCenter conventional fixed-rate quotes (30, 20 and 15-year) for a purchase, refinance or cash-out refinance scenario in a county CapCenter serves: rate, APR, points, monthly principal and interest, ZERO Closing Costs, and a required_disclosure for any rate, APR or payment. Inputs are rounded before pricing. Answers in Spanish with language=es (cotización hipotecaria). Also returns an apply link.",
        "x-summary-es": "Obtener una cotización hipotecaria de CapCenter",
        "x-description-es": "Cotizaciones reales de CapCenter para préstamos convencionales a tasa fija (30, 20 y 15 años): tasa, APR, puntos, pago mensual de capital e intereses y la divulgación obligatoria.",
        "x-mcp-tool": "get_mortgage_quote",
        "parameters": [
          {
            "name": "state",
            "in": "query",
            "required": true,
            "description": "Two-letter state code. Only states CapCenter is licensed in are quoted.",
            "x-description-es": "Código de estado de dos letras. Solo se cotizan los estados donde CapCenter tiene licencia.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z]{2}$",
              "examples": [
                "VA"
              ]
            }
          },
          {
            "name": "county",
            "in": "query",
            "required": true,
            "description": "Location slug as used on the CapCenter mortgage rates pages (/mortgage-rates/{state}/{slug}), e.g. henrico-county or richmond.",
            "x-description-es": "Identificador de la ubicación como en las páginas de tasas de CapCenter, p. ej. henrico-county.",
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9][a-z0-9'-]{1,59}$",
              "examples": [
                "henrico-county"
              ]
            }
          },
          {
            "name": "purpose",
            "in": "query",
            "required": true,
            "description": "purchase, refinance or cash-out (cash-out refinance).",
            "x-description-es": "purchase (compra), refinance (refinanciamiento) o cash-out (refinanciamiento con retiro de efectivo).",
            "schema": {
              "type": "string",
              "enum": [
                "purchase",
                "refinance",
                "cash-out"
              ],
              "examples": [
                "purchase"
              ]
            }
          },
          {
            "name": "value",
            "in": "query",
            "required": true,
            "description": "Home value (the purchase price on a purchase), whole dollars.",
            "x-description-es": "Valor de la vivienda (precio de compra en una compra), en dólares.",
            "schema": {
              "type": "integer",
              "minimum": 75000,
              "maximum": 5000000,
              "examples": [
                450000
              ]
            }
          },
          {
            "name": "down",
            "in": "query",
            "required": false,
            "description": "Purchase only: down payment in whole dollars, 3–90% of value. If omitted, 20% down is assumed and the response sets down_payment_assumed.",
            "x-description-es": "Solo compra: pago inicial en dólares. Si se omite, se asume un 20 % y la respuesta indica down_payment_assumed.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 5000000,
              "examples": [
                90000
              ]
            }
          },
          {
            "name": "balance",
            "in": "query",
            "required": false,
            "description": "Refinance and cash-out only (required): the mortgage balance being replaced, whole dollars.",
            "x-description-es": "Solo refinanciamiento (obligatorio): saldo de la hipoteca actual, en dólares.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 3000000
            }
          },
          {
            "name": "cashOut",
            "in": "query",
            "required": false,
            "description": "Cash-out only (required): cash out, whole dollars.",
            "x-description-es": "Solo retiro de efectivo (obligatorio): efectivo a retirar, en dólares.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 3000000
            }
          },
          {
            "name": "credit",
            "in": "query",
            "required": true,
            "description": "Credit score band (620 is the minimum).",
            "x-description-es": "Rango de puntaje de crédito (el mínimo es 620).",
            "schema": {
              "type": "string",
              "enum": [
                "780-plus",
                "760-779",
                "740-759",
                "720-739",
                "700-719",
                "680-699",
                "660-679",
                "640-659",
                "620-639"
              ],
              "examples": [
                "740-759"
              ]
            }
          },
          {
            "name": "occupancy",
            "in": "query",
            "required": true,
            "description": "primary, second (second home) or investment.",
            "x-description-es": "primary (principal), second (segunda vivienda) o investment (inversión).",
            "schema": {
              "type": "string",
              "enum": [
                "primary",
                "second",
                "investment"
              ],
              "examples": [
                "primary"
              ]
            }
          },
          {
            "name": "propertyType",
            "in": "query",
            "required": true,
            "description": "sfr (single-family home), condo or townhouse.",
            "x-description-es": "sfr (unifamiliar), condo o townhouse.",
            "schema": {
              "type": "string",
              "enum": [
                "sfr",
                "condo",
                "townhouse"
              ],
              "examples": [
                "sfr"
              ]
            }
          },
          {
            "name": "language",
            "in": "query",
            "required": false,
            "description": "Response language: en (default) or es (Spanish). Legal disclosures stay in English verbatim, with a Spanish courtesy translation added.",
            "x-description-es": "Idioma de la respuesta: en (predeterminado) o es (español). Las divulgaciones legales se mantienen en inglés textualmente, con una traducción de cortesía al español.",
            "schema": {
              "type": "string",
              "enum": [
                "en",
                "es"
              ],
              "examples": [
                "es"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The answer, with as_of, source_url and any required disclosures.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentQuote"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or unknown parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "The API is not available in this environment."
          },
          "422": {
            "description": "Not available for this input (for example state_not_licensed or county_not_served).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests from this client.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "503": {
            "description": "Temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        }
      }
    },
    "/api/agent/quote": {
      "get": {
        "operationId": "getMortgageQuoteAlias",
        "summary": "Get a CapCenter mortgage quote (alias of /api/agent/v1/quote)",
        "description": "Real CapCenter conventional fixed-rate quotes (30, 20 and 15-year) for a purchase, refinance or cash-out refinance scenario in a county CapCenter serves: rate, APR, points, monthly principal and interest, ZERO Closing Costs, and a required_disclosure for any rate, APR or payment. Inputs are rounded before pricing. Answers in Spanish with language=es (cotización hipotecaria). Also returns an apply link.",
        "x-summary-es": "Obtener una cotización hipotecaria de CapCenter",
        "x-description-es": "Cotizaciones reales de CapCenter para préstamos convencionales a tasa fija (30, 20 y 15 años): tasa, APR, puntos, pago mensual de capital e intereses y la divulgación obligatoria.",
        "x-mcp-tool": "get_mortgage_quote",
        "parameters": [
          {
            "name": "state",
            "in": "query",
            "required": true,
            "description": "Two-letter state code. Only states CapCenter is licensed in are quoted.",
            "x-description-es": "Código de estado de dos letras. Solo se cotizan los estados donde CapCenter tiene licencia.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z]{2}$",
              "examples": [
                "VA"
              ]
            }
          },
          {
            "name": "county",
            "in": "query",
            "required": true,
            "description": "Location slug as used on the CapCenter mortgage rates pages (/mortgage-rates/{state}/{slug}), e.g. henrico-county or richmond.",
            "x-description-es": "Identificador de la ubicación como en las páginas de tasas de CapCenter, p. ej. henrico-county.",
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9][a-z0-9'-]{1,59}$",
              "examples": [
                "henrico-county"
              ]
            }
          },
          {
            "name": "purpose",
            "in": "query",
            "required": true,
            "description": "purchase, refinance or cash-out (cash-out refinance).",
            "x-description-es": "purchase (compra), refinance (refinanciamiento) o cash-out (refinanciamiento con retiro de efectivo).",
            "schema": {
              "type": "string",
              "enum": [
                "purchase",
                "refinance",
                "cash-out"
              ],
              "examples": [
                "purchase"
              ]
            }
          },
          {
            "name": "value",
            "in": "query",
            "required": true,
            "description": "Home value (the purchase price on a purchase), whole dollars.",
            "x-description-es": "Valor de la vivienda (precio de compra en una compra), en dólares.",
            "schema": {
              "type": "integer",
              "minimum": 75000,
              "maximum": 5000000,
              "examples": [
                450000
              ]
            }
          },
          {
            "name": "down",
            "in": "query",
            "required": false,
            "description": "Purchase only: down payment in whole dollars, 3–90% of value. If omitted, 20% down is assumed and the response sets down_payment_assumed.",
            "x-description-es": "Solo compra: pago inicial en dólares. Si se omite, se asume un 20 % y la respuesta indica down_payment_assumed.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 5000000,
              "examples": [
                90000
              ]
            }
          },
          {
            "name": "balance",
            "in": "query",
            "required": false,
            "description": "Refinance and cash-out only (required): the mortgage balance being replaced, whole dollars.",
            "x-description-es": "Solo refinanciamiento (obligatorio): saldo de la hipoteca actual, en dólares.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 3000000
            }
          },
          {
            "name": "cashOut",
            "in": "query",
            "required": false,
            "description": "Cash-out only (required): cash out, whole dollars.",
            "x-description-es": "Solo retiro de efectivo (obligatorio): efectivo a retirar, en dólares.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 3000000
            }
          },
          {
            "name": "credit",
            "in": "query",
            "required": true,
            "description": "Credit score band (620 is the minimum).",
            "x-description-es": "Rango de puntaje de crédito (el mínimo es 620).",
            "schema": {
              "type": "string",
              "enum": [
                "780-plus",
                "760-779",
                "740-759",
                "720-739",
                "700-719",
                "680-699",
                "660-679",
                "640-659",
                "620-639"
              ],
              "examples": [
                "740-759"
              ]
            }
          },
          {
            "name": "occupancy",
            "in": "query",
            "required": true,
            "description": "primary, second (second home) or investment.",
            "x-description-es": "primary (principal), second (segunda vivienda) o investment (inversión).",
            "schema": {
              "type": "string",
              "enum": [
                "primary",
                "second",
                "investment"
              ],
              "examples": [
                "primary"
              ]
            }
          },
          {
            "name": "propertyType",
            "in": "query",
            "required": true,
            "description": "sfr (single-family home), condo or townhouse.",
            "x-description-es": "sfr (unifamiliar), condo o townhouse.",
            "schema": {
              "type": "string",
              "enum": [
                "sfr",
                "condo",
                "townhouse"
              ],
              "examples": [
                "sfr"
              ]
            }
          },
          {
            "name": "language",
            "in": "query",
            "required": false,
            "description": "Response language: en (default) or es (Spanish). Legal disclosures stay in English verbatim, with a Spanish courtesy translation added.",
            "x-description-es": "Idioma de la respuesta: en (predeterminado) o es (español). Las divulgaciones legales se mantienen en inglés textualmente, con una traducción de cortesía al español.",
            "schema": {
              "type": "string",
              "enum": [
                "en",
                "es"
              ],
              "examples": [
                "es"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The answer, with as_of, source_url and any required disclosures.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentQuote"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or unknown parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "The API is not available in this environment."
          },
          "422": {
            "description": "Not available for this input (for example state_not_licensed or county_not_served).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests from this client.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "503": {
            "description": "Temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        }
      }
    },
    "/api/agent/v1/rates": {
      "get": {
        "operationId": "getTodaysRates",
        "summary": "Get today's CapCenter mortgage rates",
        "description": "Today's published CapCenter mortgage rate tables for a county (the same tables its rates page shows): Conventional, Veteran (VA) and FHA 30- and 15-year fixed, each row with rate, APR, points and ZERO Closing Costs, plus the scenario they were priced for, the as-of time, the source page and the required disclosures. Answers in Spanish with language=es (tasas hipotecarias de hoy).",
        "x-summary-es": "Consultar las tasas hipotecarias de hoy de CapCenter",
        "x-description-es": "Las tablas de tasas hipotecarias publicadas hoy por CapCenter para un condado: tasa, APR, puntos y costos de cierre ZERO, con la hora de vigencia y las divulgaciones.",
        "x-mcp-tool": "get_todays_rates",
        "parameters": [
          {
            "name": "state",
            "in": "query",
            "required": true,
            "description": "Two-letter state code. Only states CapCenter is licensed in are answered.",
            "x-description-es": "Código de estado de dos letras. Solo se responden los estados donde CapCenter tiene licencia.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z]{2}$",
              "examples": [
                "VA"
              ]
            }
          },
          {
            "name": "county",
            "in": "query",
            "required": true,
            "description": "Location slug as used on the CapCenter mortgage rates pages, e.g. henrico-county.",
            "x-description-es": "Identificador de la ubicación como en las páginas de tasas de CapCenter, p. ej. henrico-county.",
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9][a-z0-9'-]{1,59}$",
              "examples": [
                "henrico-county"
              ]
            }
          },
          {
            "name": "purpose",
            "in": "query",
            "required": false,
            "description": "purchase (default) or refinance: which rates page view.",
            "x-description-es": "purchase (compra, predeterminado) o refinance (refinanciamiento).",
            "schema": {
              "type": "string",
              "enum": [
                "purchase",
                "refinance"
              ],
              "examples": [
                "purchase"
              ]
            }
          },
          {
            "name": "program",
            "in": "query",
            "required": false,
            "description": "all (default), conventional, va (Veteran) or fha.",
            "x-description-es": "all (todos, predeterminado), conventional, va (veteranos) o fha.",
            "schema": {
              "type": "string",
              "enum": [
                "all",
                "conventional",
                "va",
                "fha"
              ],
              "examples": [
                "all"
              ]
            }
          },
          {
            "name": "language",
            "in": "query",
            "required": false,
            "description": "Response language: en (default) or es (Spanish). Legal disclosures stay in English verbatim, with a Spanish courtesy translation added.",
            "x-description-es": "Idioma de la respuesta: en (predeterminado) o es (español). Las divulgaciones legales se mantienen en inglés textualmente, con una traducción de cortesía al español.",
            "schema": {
              "type": "string",
              "enum": [
                "en",
                "es"
              ],
              "examples": [
                "es"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The answer, with as_of, source_url and any required disclosures.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentAnswer"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or unknown parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "The API is not available in this environment."
          },
          "422": {
            "description": "Not available for this input (for example state_not_licensed or county_not_served).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests from this client.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "503": {
            "description": "Temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        }
      }
    },
    "/api/agent/v1/savings": {
      "get": {
        "operationId": "getSavingsEstimate",
        "summary": "Estimate CapCenter savings",
        "description": "Estimate what a client saves with CapCenter when buying, selling, selling and buying, or refinancing in a county CapCenter serves: the itemized typical-lender closing costs vs CapCenter (ZERO Closing Costs), the Realty Purchase Credit (up to 0.5% of the price, where CapCenter Realty operates), the 1% Listing Fee (1.5% sell-only, $3,000 minimum, vs a typical 3%), and the insurance statement \"Clients save 20% on average.\" Uses the site’s own math. Answers in Spanish with language=es (ahorros).",
        "x-summary-es": "Estimar los ahorros con CapCenter",
        "x-description-es": "Estima cuánto ahorra un cliente con CapCenter al comprar, vender o refinanciar: costos de cierre típicos frente a CapCenter, Realty Purchase Credit, 1% Listing Fee y el ahorro promedio en seguros.",
        "x-mcp-tool": "get_savings_estimate",
        "parameters": [
          {
            "name": "goal",
            "in": "query",
            "required": true,
            "description": "buy (buy a home with a CapCenter mortgage and agent), sell, sell-and-buy, or refinance.",
            "x-description-es": "buy (comprar), sell (vender), sell-and-buy (vender y comprar) o refinance (refinanciar).",
            "schema": {
              "type": "string",
              "enum": [
                "buy",
                "sell",
                "sell-and-buy",
                "refinance"
              ],
              "examples": [
                "buy"
              ]
            }
          },
          {
            "name": "state",
            "in": "query",
            "required": true,
            "description": "Two-letter state code.",
            "x-description-es": "Código de estado de dos letras.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z]{2}$",
              "examples": [
                "VA"
              ]
            }
          },
          {
            "name": "county",
            "in": "query",
            "required": true,
            "description": "Location slug as used on the CapCenter mortgage rates pages, e.g. henrico-county.",
            "x-description-es": "Identificador de la ubicación como en las páginas de tasas de CapCenter.",
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9][a-z0-9'-]{1,59}$",
              "examples": [
                "henrico-county"
              ]
            }
          },
          {
            "name": "price",
            "in": "query",
            "required": false,
            "description": "buy and sell-and-buy (required): purchase price of the home being bought, whole dollars.",
            "x-description-es": "Comprar (obligatorio): precio de compra, en dólares.",
            "schema": {
              "type": "integer",
              "minimum": 75000,
              "maximum": 5000000,
              "examples": [
                450000
              ]
            }
          },
          {
            "name": "down",
            "in": "query",
            "required": false,
            "description": "buy and sell-and-buy: down payment, whole dollars (3–90% of the price). If omitted, 20% down is assumed and the response sets down_payment_assumed.",
            "x-description-es": "Comprar: pago inicial, en dólares (3–90 % del precio). Si se omite, se asume un 20 %.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 5000000,
              "examples": [
                90000
              ]
            }
          },
          {
            "name": "sale_price",
            "in": "query",
            "required": false,
            "description": "sell and sell-and-buy (required): expected sale price of the home being sold, whole dollars.",
            "x-description-es": "Vender (obligatorio): precio de venta esperado, en dólares.",
            "schema": {
              "type": "integer",
              "minimum": 75000,
              "maximum": 5000000,
              "examples": [
                400000
              ]
            }
          },
          {
            "name": "value",
            "in": "query",
            "required": false,
            "description": "refinance (required): home value, whole dollars.",
            "x-description-es": "Refinanciar (obligatorio): valor de la vivienda, en dólares.",
            "schema": {
              "type": "integer",
              "minimum": 75000,
              "maximum": 5000000
            }
          },
          {
            "name": "balance",
            "in": "query",
            "required": false,
            "description": "refinance (required): current mortgage balance, whole dollars.",
            "x-description-es": "Refinanciar (obligatorio): saldo actual de la hipoteca, en dólares.",
            "schema": {
              "type": "integer",
              "minimum": 50000,
              "maximum": 3000000
            }
          },
          {
            "name": "language",
            "in": "query",
            "required": false,
            "description": "Response language: en (default) or es (Spanish). Legal disclosures stay in English verbatim, with a Spanish courtesy translation added.",
            "x-description-es": "Idioma de la respuesta: en (predeterminado) o es (español). Las divulgaciones legales se mantienen en inglés textualmente, con una traducción de cortesía al español.",
            "schema": {
              "type": "string",
              "enum": [
                "en",
                "es"
              ],
              "examples": [
                "es"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The answer, with as_of, source_url and any required disclosures.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentAnswer"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or unknown parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "The API is not available in this environment."
          },
          "422": {
            "description": "Not available for this input (for example state_not_licensed or county_not_served).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests from this client.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "503": {
            "description": "Temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        }
      }
    },
    "/api/agent/v1/loan-options": {
      "get": {
        "operationId": "explainLoanOptions",
        "summary": "Explain CapCenter loan options",
        "description": "Answers questions about CapCenter's loan programs, ZERO Closing Costs (what it covers and what is still paid), eligibility basics (620 minimum credit score, DTI up to 50%), refinance and home equity options, the states CapCenter is licensed in and its NMLS ID. Every answer is CapCenter's published FAQ text, verbatim, with its source URL. With language=es, a Spanish courtesy translation is included beside the English (opciones de préstamo, requisitos).",
        "x-summary-es": "Explicar las opciones de préstamo de CapCenter",
        "x-description-es": "Responde preguntas sobre los programas de préstamo de CapCenter, ZERO Closing Costs, los requisitos básicos (puntaje de crédito mínimo de 620, DTI de hasta 50 %), refinanciamiento, préstamos sobre el valor neto de la vivienda, los estados con licencia y el NMLS. Cada respuesta es el texto publicado de las preguntas frecuentes, con su URL de origen.",
        "x-mcp-tool": "explain_loan_options",
        "parameters": [
          {
            "name": "topic",
            "in": "query",
            "required": false,
            "description": "Which answers to return: all (default), zero-closing-costs, programs, eligibility (credit score, DTI), refinance, home-equity or licensing (states, NMLS).",
            "x-description-es": "Qué respuestas devolver: all (todas, predeterminado), zero-closing-costs, programs, eligibility (puntaje de crédito, DTI), refinance, home-equity o licensing (estados, NMLS).",
            "schema": {
              "type": "string",
              "enum": [
                "all",
                "zero-closing-costs",
                "programs",
                "eligibility",
                "refinance",
                "home-equity",
                "licensing"
              ],
              "examples": [
                "eligibility"
              ]
            }
          },
          {
            "name": "language",
            "in": "query",
            "required": false,
            "description": "Response language: en (default) or es (Spanish). Legal disclosures stay in English verbatim, with a Spanish courtesy translation added.",
            "x-description-es": "Idioma de la respuesta: en (predeterminado) o es (español). Las divulgaciones legales se mantienen en inglés textualmente, con una traducción de cortesía al español.",
            "schema": {
              "type": "string",
              "enum": [
                "en",
                "es"
              ],
              "examples": [
                "es"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The answer, with as_of, source_url and any required disclosures.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentAnswer"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or unknown parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "The API is not available in this environment."
          },
          "422": {
            "description": "Not available for this input (for example state_not_licensed or county_not_served).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests from this client.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "503": {
            "description": "Temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        }
      }
    },
    "/api/agent/v1/next-step": {
      "get": {
        "operationId": "getNextStepLink",
        "summary": "Get a CapCenter next-step link",
        "description": "Returns a link to the next step on capcenter.com: apply for a mortgage (optionally prefilled with purpose, home value, balance and county), meet a CapCenter real estate agent, or request an insurance quote. Links only; personal details are entered by the person on capcenter.com. Spanish labels with language=es (solicitar, siguiente paso).",
        "x-summary-es": "Obtener el enlace para el siguiente paso",
        "x-description-es": "Devuelve un enlace al siguiente paso en capcenter.com: solicitar una hipoteca, conocer a un agente o cotizar un seguro. Solo enlaces; la persona ingresa sus datos personales en capcenter.com.",
        "x-mcp-tool": "get_next_step_link",
        "parameters": [
          {
            "name": "action",
            "in": "query",
            "required": true,
            "description": "apply (loan application), meet-agent (request a CapCenter REALTOR®) or insurance-quote.",
            "x-description-es": "apply (solicitud de préstamo), meet-agent (conocer a un agente) o insurance-quote (cotización de seguro).",
            "schema": {
              "type": "string",
              "enum": [
                "apply",
                "meet-agent",
                "insurance-quote"
              ],
              "examples": [
                "apply"
              ]
            }
          },
          {
            "name": "purpose",
            "in": "query",
            "required": false,
            "description": "apply only, optional prefill: purchase, refinance or cash-out.",
            "x-description-es": "Solo apply, prellenado opcional: purchase, refinance o cash-out.",
            "schema": {
              "type": "string",
              "enum": [
                "purchase",
                "refinance",
                "cash-out"
              ]
            }
          },
          {
            "name": "value",
            "in": "query",
            "required": false,
            "description": "apply only, optional prefill: home value (purchase price on a purchase), whole dollars.",
            "x-description-es": "Solo apply, prellenado opcional: valor de la vivienda, en dólares.",
            "schema": {
              "type": "integer",
              "minimum": 75000,
              "maximum": 5000000
            }
          },
          {
            "name": "balance",
            "in": "query",
            "required": false,
            "description": "apply only, optional prefill (refinance and cash-out): current mortgage balance, whole dollars.",
            "x-description-es": "Solo apply, prellenado opcional (refinanciamiento): saldo actual de la hipoteca, en dólares.",
            "schema": {
              "type": "integer",
              "minimum": 5000,
              "maximum": 3000000
            }
          },
          {
            "name": "state",
            "in": "query",
            "required": false,
            "description": "apply only, optional prefill: two-letter state code.",
            "x-description-es": "Solo apply, prellenado opcional: código de estado de dos letras.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z]{2}$"
            }
          },
          {
            "name": "county",
            "in": "query",
            "required": false,
            "description": "apply only, optional prefill: rates-page location slug, e.g. henrico-county.",
            "x-description-es": "Solo apply, prellenado opcional: identificador de ubicación, p. ej. henrico-county.",
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9][a-z0-9'-]{1,59}$"
            }
          },
          {
            "name": "language",
            "in": "query",
            "required": false,
            "description": "Response language: en (default) or es (Spanish). Legal disclosures stay in English verbatim, with a Spanish courtesy translation added.",
            "x-description-es": "Idioma de la respuesta: en (predeterminado) o es (español). Las divulgaciones legales se mantienen en inglés textualmente, con una traducción de cortesía al español.",
            "schema": {
              "type": "string",
              "enum": [
                "en",
                "es"
              ],
              "examples": [
                "es"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The answer, with as_of, source_url and any required disclosures.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentAnswer"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or unknown parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "The API is not available in this environment."
          },
          "422": {
            "description": "Not available for this input (for example state_not_licensed or county_not_served).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests from this client.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "503": {
            "description": "Temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        }
      }
    },
    "/api/agent/v1/affordability": {
      "get": {
        "operationId": "getAffordabilityEstimate",
        "summary": "Estimate how much home you can afford",
        "description": "Estimate the most home a person could finance with CapCenter from gross income, monthly debts, cash for the down payment, their estimated monthly taxes/insurance/HOA, credit band and county: a 50% maximum debt-to-income ratio, at 80% loan-to-value or less, then a REAL CapCenter quote (rate, APR, payment and required disclosure) for the estimated price. An estimate, not a pre-approval. Answers in Spanish with language=es (cuánto puedo pagar).",
        "x-summary-es": "Estimar cuánta vivienda puede pagar",
        "x-description-es": "Estima la vivienda máxima que una persona podría financiar con CapCenter según su ingreso, deudas, pago inicial, impuestos y seguros, crédito y condado (DTI máximo de 50 %, LTV de 80 % o menos), con una cotización real. Es una estimación, no una preaprobación.",
        "x-mcp-tool": "get_affordability_estimate",
        "parameters": [
          {
            "name": "income",
            "in": "query",
            "required": true,
            "description": "Gross annual household income, whole dollars.",
            "x-description-es": "Ingreso bruto anual del hogar, en dólares.",
            "schema": {
              "type": "integer",
              "minimum": 10000,
              "maximum": 10000000,
              "examples": [
                120000
              ]
            }
          },
          {
            "name": "monthly_debts",
            "in": "query",
            "required": true,
            "description": "Monthly debt payments (car, student loans, minimum card payments), whole dollars. Not rent.",
            "x-description-es": "Pagos mensuales de deudas (auto, préstamos estudiantiles, mínimos de tarjetas), en dólares. Sin incluir el alquiler.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 100000,
              "examples": [
                600
              ]
            }
          },
          {
            "name": "down_payment",
            "in": "query",
            "required": true,
            "description": "Cash available for the down payment, whole dollars.",
            "x-description-es": "Efectivo disponible para el pago inicial, en dólares.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 5000000,
              "examples": [
                60000
              ]
            }
          },
          {
            "name": "state",
            "in": "query",
            "required": true,
            "description": "Two-letter state code. Only states CapCenter is licensed in are answered.",
            "x-description-es": "Código de estado de dos letras.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z]{2}$",
              "examples": [
                "VA"
              ]
            }
          },
          {
            "name": "county",
            "in": "query",
            "required": true,
            "description": "Location slug as used on the CapCenter mortgage rates pages, e.g. henrico-county.",
            "x-description-es": "Identificador de la ubicación como en las páginas de tasas de CapCenter, p. ej. henrico-county.",
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9][a-z0-9'-]{1,59}$",
              "examples": [
                "henrico-county"
              ]
            }
          },
          {
            "name": "credit",
            "in": "query",
            "required": true,
            "description": "Credit score band (620 is the minimum).",
            "x-description-es": "Rango de puntaje de crédito (el mínimo es 620).",
            "schema": {
              "type": "string",
              "enum": [
                "780-plus",
                "760-779",
                "740-759",
                "720-739",
                "700-719",
                "680-699",
                "660-679",
                "640-659",
                "620-639"
              ],
              "examples": [
                "740-759"
              ]
            }
          },
          {
            "name": "taxes_insurance",
            "in": "query",
            "required": true,
            "description": "Required: estimated monthly property taxes, homeowners insurance and HOA dues for the kind of home being considered, whole dollars (the person’s figures or a listing’s). CapCenter has no county tax data to estimate them from.",
            "x-description-es": "Obligatorio: impuestos, seguro de vivienda y cuotas de HOA mensuales estimados para el tipo de vivienda buscada, en dólares (los datos de la persona o de un anuncio).",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 50000,
              "examples": [
                500
              ]
            }
          },
          {
            "name": "language",
            "in": "query",
            "required": false,
            "description": "Response language: en (default) or es (Spanish). Legal disclosures stay in English verbatim, with a Spanish courtesy translation added.",
            "x-description-es": "Idioma de la respuesta: en (predeterminado) o es (español). Las divulgaciones legales se mantienen en inglés textualmente, con una traducción de cortesía al español.",
            "schema": {
              "type": "string",
              "enum": [
                "en",
                "es"
              ],
              "examples": [
                "es"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The answer, with as_of, source_url and any required disclosures.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentAnswer"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or unknown parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "The API is not available in this environment."
          },
          "422": {
            "description": "Not available for this input (for example state_not_licensed or county_not_served).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests from this client.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "503": {
            "description": "Temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        }
      }
    },
    "/api/agent/v1/loan-limits": {
      "get": {
        "operationId": "getLoanLimits",
        "summary": "Get 2026 county loan limits",
        "description": "The 2026 conforming (FHFA, Fannie Mae / Freddie Mac) and FHA (HUD) loan limits for 1–4 unit homes in a county CapCenter serves, with the official sources. A loan above the conforming limit is a Jumbo loan. Answers in Spanish with language=es (límites de préstamo).",
        "x-summary-es": "Consultar los límites de préstamo del condado para 2026",
        "x-description-es": "Los límites de préstamo conforme (FHFA) y FHA (HUD) de 2026 para viviendas de 1 a 4 unidades en un condado que atiende CapCenter, con las fuentes oficiales.",
        "x-mcp-tool": "get_loan_limits",
        "parameters": [
          {
            "name": "state",
            "in": "query",
            "required": true,
            "description": "Two-letter state code. Only states CapCenter is licensed in are answered.",
            "x-description-es": "Código de estado de dos letras.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z]{2}$",
              "examples": [
                "VA"
              ]
            }
          },
          {
            "name": "county",
            "in": "query",
            "required": true,
            "description": "Location slug as used on the CapCenter mortgage rates pages, e.g. henrico-county or richmond.",
            "x-description-es": "Identificador de la ubicación como en las páginas de tasas de CapCenter, p. ej. henrico-county.",
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9][a-z0-9'-]{1,59}$",
              "examples": [
                "henrico-county"
              ]
            }
          },
          {
            "name": "language",
            "in": "query",
            "required": false,
            "description": "Response language: en (default) or es (Spanish). Legal disclosures stay in English verbatim, with a Spanish courtesy translation added.",
            "x-description-es": "Idioma de la respuesta: en (predeterminado) o es (español). Las divulgaciones legales se mantienen en inglés textualmente, con una traducción de cortesía al español.",
            "schema": {
              "type": "string",
              "enum": [
                "en",
                "es"
              ],
              "examples": [
                "es"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The answer, with as_of, source_url and any required disclosures.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentAnswer"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or unknown parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "The API is not available in this environment."
          },
          "422": {
            "description": "Not available for this input (for example state_not_licensed or county_not_served).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests from this client.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "503": {
            "description": "Temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        }
      }
    },
    "/api/agent/v1/reviews": {
      "get": {
        "operationId": "getReviewsAndRatings",
        "summary": "CapCenter reviews and ratings",
        "description": "CapCenter's public ratings as shown on capcenter.com (Zillow 5.0 with 800+ reviews, Google 4.8 with 600+ reviews, BBB A+), each with its source link and as-of date, plus a few client quotes CapCenter publishes (BestCompany reviews, first name and last initial). Answers in Spanish with language=es (opiniones, calificaciones).",
        "x-summary-es": "Opiniones y calificaciones de CapCenter",
        "x-description-es": "Calificaciones públicas de CapCenter tal como aparecen en capcenter.com (Zillow, Google, BBB) con su enlace de origen y fecha, más algunas opiniones de clientes que CapCenter publica.",
        "x-mcp-tool": "get_reviews_and_ratings",
        "parameters": [
          {
            "name": "language",
            "in": "query",
            "required": false,
            "description": "Response language: en (default) or es (Spanish). Legal disclosures stay in English verbatim, with a Spanish courtesy translation added.",
            "x-description-es": "Idioma de la respuesta: en (predeterminado) o es (español). Las divulgaciones legales se mantienen en inglés textualmente, con una traducción de cortesía al español.",
            "schema": {
              "type": "string",
              "enum": [
                "en",
                "es"
              ],
              "examples": [
                "es"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The answer, with as_of, source_url and any required disclosures.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentAnswer"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or unknown parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "The API is not available in this environment."
          },
          "422": {
            "description": "Not available for this input (for example state_not_licensed or county_not_served).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests from this client.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "503": {
            "description": "Temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        }
      }
    },
    "/api/agent/v1/refinance-compare": {
      "get": {
        "operationId": "compareRefinanceOptions",
        "summary": "Compare refinance options",
        "description": "Compare keeping a current mortgage with a CapCenter rate-and-term refinance, a cash-out refinance and a home equity loan, using real CapCenter pricing: new monthly principal and interest, the change, cost to close (ZERO Closing Costs; points shown), break-even months, total interest and estimated benefit over the years the client plans to stay. Flags when keeping the current loan is better. An estimate, not a loan offer. Answers in Spanish with language=es (refinanciamiento).",
        "x-summary-es": "Comparar opciones de refinanciamiento",
        "x-description-es": "Compara mantener la hipoteca actual con un refinanciamiento de tasa y plazo, un refinanciamiento con retiro de efectivo y un préstamo sobre el valor neto de la vivienda, con precios reales de CapCenter.",
        "x-mcp-tool": "compare_refinance_options",
        "parameters": [
          {
            "name": "state",
            "in": "query",
            "required": true,
            "description": "Two-letter state code.",
            "x-description-es": "Código de estado de dos letras.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z]{2}$",
              "examples": [
                "VA"
              ]
            }
          },
          {
            "name": "county",
            "in": "query",
            "required": true,
            "description": "Location slug as used on the CapCenter mortgage rates pages, e.g. henrico-county.",
            "x-description-es": "Identificador de la ubicación como en las páginas de tasas de CapCenter.",
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9][a-z0-9'-]{1,59}$",
              "examples": [
                "henrico-county"
              ]
            }
          },
          {
            "name": "value",
            "in": "query",
            "required": true,
            "description": "Home value, whole dollars.",
            "x-description-es": "Valor de la vivienda, en dólares.",
            "schema": {
              "type": "integer",
              "minimum": 75000,
              "maximum": 5000000,
              "examples": [
                500000
              ]
            }
          },
          {
            "name": "credit",
            "in": "query",
            "required": true,
            "description": "Credit score band (620 is the minimum).",
            "x-description-es": "Rango de puntaje de crédito (el mínimo es 620).",
            "schema": {
              "type": "string",
              "enum": [
                "780-plus",
                "760-779",
                "740-759",
                "720-739",
                "700-719",
                "680-699",
                "660-679",
                "640-659",
                "620-639"
              ],
              "examples": [
                "740-759"
              ]
            }
          },
          {
            "name": "current_rate",
            "in": "query",
            "required": true,
            "description": "Current mortgage interest rate, percent, e.g. 7.25.",
            "x-description-es": "Tasa de interés actual, en porcentaje, p. ej. 7.25.",
            "schema": {
              "type": "number",
              "minimum": 0.5,
              "maximum": 20,
              "examples": [
                7.25
              ]
            }
          },
          {
            "name": "balance",
            "in": "query",
            "required": true,
            "description": "Current mortgage balance, whole dollars.",
            "x-description-es": "Saldo actual de la hipoteca, en dólares.",
            "schema": {
              "type": "integer",
              "minimum": 10000,
              "maximum": 3000000,
              "examples": [
                300000
              ]
            }
          },
          {
            "name": "payment",
            "in": "query",
            "required": false,
            "description": "Current monthly principal and interest payment only (no taxes, insurance or escrow), whole dollars; computed from rate, balance and years left if omitted.",
            "x-description-es": "Pago mensual actual solo de capital e intereses (sin impuestos, seguros ni plica), en dólares; se calcula si se omite.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100000
            }
          },
          {
            "name": "years_left",
            "in": "query",
            "required": true,
            "description": "Years left on the current loan.",
            "x-description-es": "Años que le quedan al préstamo actual.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 40,
              "examples": [
                27
              ]
            }
          },
          {
            "name": "cash_wanted",
            "in": "query",
            "required": false,
            "description": "Cash wanted from home equity, whole dollars (0 or omitted = none).",
            "x-description-es": "Efectivo deseado del valor neto de la vivienda, en dólares.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 3000000,
              "examples": [
                50000
              ]
            }
          },
          {
            "name": "years_staying",
            "in": "query",
            "required": true,
            "description": "Years the client expects to keep the home and loan.",
            "x-description-es": "Años que el cliente espera conservar la vivienda y el préstamo.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 30,
              "examples": [
                7
              ]
            }
          },
          {
            "name": "occupancy",
            "in": "query",
            "required": false,
            "description": "primary (default), second or investment.",
            "x-description-es": "primary (predeterminado), second o investment.",
            "schema": {
              "type": "string",
              "enum": [
                "primary",
                "second",
                "investment"
              ]
            }
          },
          {
            "name": "propertyType",
            "in": "query",
            "required": false,
            "description": "sfr (default, single-family home), condo or townhouse.",
            "x-description-es": "sfr (predeterminado, unifamiliar), condo o townhouse.",
            "schema": {
              "type": "string",
              "enum": [
                "sfr",
                "condo",
                "townhouse"
              ]
            }
          },
          {
            "name": "language",
            "in": "query",
            "required": false,
            "description": "Response language: en (default) or es (Spanish). Legal disclosures stay in English verbatim, with a Spanish courtesy translation added.",
            "x-description-es": "Idioma de la respuesta: en (predeterminado) o es (español). Las divulgaciones legales se mantienen en inglés textualmente, con una traducción de cortesía al español.",
            "schema": {
              "type": "string",
              "enum": [
                "en",
                "es"
              ],
              "examples": [
                "es"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The answer, with as_of, source_url and any required disclosures.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentAnswer"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or unknown parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "The API is not available in this environment."
          },
          "422": {
            "description": "Not available for this input (for example state_not_licensed or county_not_served).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests from this client.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "503": {
            "description": "Temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        }
      }
    },
    "/api/agent/v1/consultation": {
      "get": {
        "operationId": "bookConsultation",
        "summary": "Book a CapCenter consultation",
        "description": "Returns links to book time with CapCenter: a loan consultation (scheduling page and contact page), a real estate agent to buy or sell, or an insurance quote. Links only; personal details are entered by the person on capcenter.com. Answers in Spanish with language=es (consulta, cita).",
        "x-summary-es": "Reservar una consulta con CapCenter",
        "x-description-es": "Devuelve enlaces para reservar tiempo con CapCenter: una consulta de préstamo, un agente para comprar o vender, o una cotización de seguro. Solo enlaces; la persona ingresa sus datos allí.",
        "x-mcp-tool": "book_consultation",
        "parameters": [
          {
            "name": "topic",
            "in": "query",
            "required": false,
            "description": "mortgage (default), buy-home, sell-home or insurance.",
            "x-description-es": "mortgage (hipoteca, predeterminado), buy-home (comprar), sell-home (vender) o insurance (seguro).",
            "schema": {
              "type": "string",
              "enum": [
                "mortgage",
                "buy-home",
                "sell-home",
                "insurance"
              ],
              "examples": [
                "mortgage"
              ]
            }
          },
          {
            "name": "language",
            "in": "query",
            "required": false,
            "description": "Response language: en (default) or es (Spanish). Legal disclosures stay in English verbatim, with a Spanish courtesy translation added.",
            "x-description-es": "Idioma de la respuesta: en (predeterminado) o es (español). Las divulgaciones legales se mantienen en inglés textualmente, con una traducción de cortesía al español.",
            "schema": {
              "type": "string",
              "enum": [
                "en",
                "es"
              ],
              "examples": [
                "es"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The answer, with as_of, source_url and any required disclosures.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentAnswer"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or unknown parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "The API is not available in this environment."
          },
          "422": {
            "description": "Not available for this input (for example state_not_licensed or county_not_served).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests from this client.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "503": {
            "description": "Temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        }
      }
    },
    "/api/agent/v1/homes-for-sale": {
      "get": {
        "operationId": "searchHomesForSale",
        "summary": "Search homes for sale",
        "description": "Homes for sale on capcenter.com in a city, county or ZIP code in a state CapCenter is licensed in, filtered by price, bedrooms, bathrooms and home type (up to 10). Returns the public listing facts (price, beds, baths, square feet, city, ZIP, photo, status), the capcenter.com listing link, the MLS attribution to show with each listing, a quote link with the price filled in and a link to meet a CapCenter Realty agent. Answers in Spanish with language=es (viviendas en venta).",
        "x-summary-es": "Buscar viviendas en venta",
        "x-description-es": "Viviendas en venta en capcenter.com en una ciudad, condado o código postal, con el precio, habitaciones, baños, enlace a la propiedad, la atribución del MLS y un enlace de cotización.",
        "x-mcp-tool": "search_homes_for_sale",
        "parameters": [
          {
            "name": "state",
            "in": "query",
            "required": true,
            "description": "Two-letter state code. Only states CapCenter is licensed in are answered.",
            "x-description-es": "Código de estado de dos letras.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z]{2}$",
              "examples": [
                "VA"
              ]
            }
          },
          {
            "name": "city",
            "in": "query",
            "required": false,
            "description": "City name, e.g. Richmond or Glen Allen. Give exactly one of city, county or zip.",
            "x-description-es": "Nombre de la ciudad. Indique solo uno: city, county o zip.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 60,
              "examples": [
                "Richmond"
              ]
            }
          },
          {
            "name": "county",
            "in": "query",
            "required": false,
            "description": "County name, e.g. Henrico or Chesterfield County. Give exactly one of city, county or zip.",
            "x-description-es": "Nombre del condado. Indique solo uno: city, county o zip.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 60
            }
          },
          {
            "name": "zip",
            "in": "query",
            "required": false,
            "description": "Five-digit ZIP code. Give exactly one of city, county or zip.",
            "x-description-es": "Código postal de cinco dígitos. Indique solo uno: city, county o zip.",
            "schema": {
              "type": "string",
              "pattern": "^\\d{5}$"
            }
          },
          {
            "name": "price_min",
            "in": "query",
            "required": false,
            "description": "Lowest list price, whole dollars.",
            "x-description-es": "Precio de lista mínimo, en dólares.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 50000000
            }
          },
          {
            "name": "price_max",
            "in": "query",
            "required": false,
            "description": "Highest list price, whole dollars.",
            "x-description-es": "Precio de lista máximo, en dólares.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50000000,
              "examples": [
                450000
              ]
            }
          },
          {
            "name": "beds_min",
            "in": "query",
            "required": false,
            "description": "Minimum bedrooms.",
            "x-description-es": "Mínimo de habitaciones.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10
            }
          },
          {
            "name": "baths_min",
            "in": "query",
            "required": false,
            "description": "Minimum bathrooms, e.g. 2 or 1.5.",
            "x-description-es": "Mínimo de baños, p. ej. 2 o 1.5.",
            "schema": {
              "type": "number",
              "minimum": 0,
              "maximum": 10
            }
          },
          {
            "name": "property_type",
            "in": "query",
            "required": false,
            "description": "house, townhouse, condo, manufactured or land.",
            "x-description-es": "house (casa), townhouse, condo, manufactured (prefabricada) o land (terreno).",
            "schema": {
              "type": "string",
              "enum": [
                "house",
                "townhouse",
                "condo",
                "manufactured",
                "land"
              ]
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many listings to return, 1 to 10 (default 5).",
            "x-description-es": "Cuántas propiedades devolver, de 1 a 10.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10
            }
          },
          {
            "name": "language",
            "in": "query",
            "required": false,
            "description": "Response language: en (default) or es (Spanish). Legal disclosures stay in English verbatim, with a Spanish courtesy translation added.",
            "x-description-es": "Idioma de la respuesta: en (predeterminado) o es (español). Las divulgaciones legales se mantienen en inglés textualmente, con una traducción de cortesía al español.",
            "schema": {
              "type": "string",
              "enum": [
                "en",
                "es"
              ],
              "examples": [
                "es"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The answer, with as_of, source_url and any required disclosures.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentAnswer"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or unknown parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "The API is not available in this environment."
          },
          "422": {
            "description": "Not available for this input (for example state_not_licensed or county_not_served).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests from this client.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "503": {
            "description": "Temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        }
      }
    },
    "/api/agent/v1/home-value": {
      "get": {
        "operationId": "getHomeValueEstimate",
        "summary": "Get a home value estimate",
        "description": "CapCenter’s automated home value estimate (low, median and high) for an address or a capcenter.com listing URL in a state CapCenter is licensed in, with its as-of date and disclaimer (an estimate, not an appraisal), and links to the three next steps in order: cash out and stay, buy the next home, sell. Answers in Spanish with language=es (valor de la vivienda).",
        "x-summary-es": "Obtener una estimación del valor de la vivienda",
        "x-description-es": "La estimación automatizada del valor de una vivienda de CapCenter (baja, media y alta) para una dirección o un enlace de capcenter.com, con su fecha y aviso, y enlaces a los siguientes pasos.",
        "x-mcp-tool": "get_home_value_estimate",
        "parameters": [
          {
            "name": "address",
            "in": "query",
            "required": false,
            "description": "The home’s street address with city, state and ZIP, e.g. \"123 Main St, Richmond, VA 23220\". Give address or listing_url.",
            "x-description-es": "Dirección de la vivienda con ciudad, estado y código postal. Indique address o listing_url.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200,
              "examples": [
                "123 Main St, Richmond, VA 23220"
              ]
            }
          },
          {
            "name": "listing_url",
            "in": "query",
            "required": false,
            "description": "A capcenter.com listing URL, https://www.capcenter.com/homes/real-estate/{listing}. Give address or listing_url.",
            "x-description-es": "Un enlace de una propiedad en capcenter.com. Indique address o listing_url.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 300
            }
          },
          {
            "name": "mortgage_balance",
            "in": "query",
            "required": false,
            "description": "Optional: the current mortgage balance, whole dollars. Only fills in the cash-out link (rounded to $10,000); never stored.",
            "x-description-es": "Opcional: el saldo actual de la hipoteca, en dólares. Solo completa el enlace de retiro de efectivo.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 3000000
            }
          },
          {
            "name": "language",
            "in": "query",
            "required": false,
            "description": "Response language: en (default) or es (Spanish). Legal disclosures stay in English verbatim, with a Spanish courtesy translation added.",
            "x-description-es": "Idioma de la respuesta: en (predeterminado) o es (español). Las divulgaciones legales se mantienen en inglés textualmente, con una traducción de cortesía al español.",
            "schema": {
              "type": "string",
              "enum": [
                "en",
                "es"
              ],
              "examples": [
                "es"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The answer, with as_of, source_url and any required disclosures.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentAnswer"
                }
              }
            }
          },
          "400": {
            "description": "Invalid or unknown parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "The API is not available in this environment."
          },
          "422": {
            "description": "Not available for this input (for example state_not_licensed or county_not_served).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests from this client.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "503": {
            "description": "Temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "AgentAnswer": {
        "type": "object",
        "required": [
          "object",
          "api_version",
          "language",
          "as_of",
          "source_url"
        ],
        "properties": {
          "object": {
            "type": "string"
          },
          "api_version": {
            "type": "string"
          },
          "language": {
            "type": "string",
            "enum": [
              "en",
              "es"
            ]
          },
          "as_of": {
            "type": "string",
            "description": "When the facts stated were current (ISO 8601 date or date-time)."
          },
          "source_url": {
            "type": "string",
            "format": "uri",
            "description": "The capcenter.com page that states the same facts."
          }
        },
        "additionalProperties": true
      },
      "Error": {
        "type": "object",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "object",
            "required": [
              "code",
              "message"
            ],
            "properties": {
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              },
              "issues": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "param": {
                      "type": "string"
                    },
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "Quote": {
        "type": "object",
        "required": [
          "term_years",
          "number_of_payments",
          "rate_percent",
          "apr_percent",
          "points_percent",
          "points_dollars",
          "monthly_principal_and_interest",
          "loan_amount",
          "rate_lock_days",
          "required_disclosure"
        ],
        "properties": {
          "product": {
            "type": "string",
            "examples": [
              "30-year fixed"
            ]
          },
          "program": {
            "type": "string",
            "const": "Conventional"
          },
          "rate_type": {
            "type": "string",
            "const": "fixed"
          },
          "term_years": {
            "type": "integer"
          },
          "number_of_payments": {
            "type": "integer"
          },
          "rate_percent": {
            "type": "number"
          },
          "apr_percent": {
            "type": "number"
          },
          "points_percent": {
            "type": "number",
            "description": "Negative = lender credit."
          },
          "points_dollars": {
            "type": "number",
            "description": "Negative = lender credit."
          },
          "points_note": {
            "type": [
              "string",
              "null"
            ]
          },
          "monthly_principal_and_interest": {
            "type": "number",
            "description": "Principal and interest only; excludes taxes, insurance and mortgage insurance."
          },
          "loan_amount": {
            "type": "number"
          },
          "rate_lock_days": {
            "type": "integer"
          },
          "closing_costs": {
            "type": "string",
            "examples": [
              "ZERO Closing Costs"
            ]
          },
          "required_disclosure": {
            "type": "string",
            "description": "Display verbatim with any rate, APR or payment from this quote."
          },
          "translation_es": {
            "type": "object",
            "description": "language=es only: Spanish text, including a courtesy translation of required_disclosure."
          }
        }
      },
      "AgentQuote": {
        "type": "object",
        "required": [
          "scenario",
          "quotes",
          "rates_as_of",
          "generated_at",
          "expires_at",
          "disclosures",
          "lender",
          "apply_url"
        ],
        "properties": {
          "object": {
            "type": "string",
            "const": "capcenter.agent_quote"
          },
          "api_version": {
            "type": "string"
          },
          "language": {
            "type": "string",
            "enum": [
              "en",
              "es"
            ]
          },
          "as_of": {
            "type": "string",
            "format": "date-time",
            "description": "The rate sheet time (= rates_as_of)."
          },
          "source_url": {
            "type": "string",
            "format": "uri",
            "description": "The CapCenter rates page for this county."
          },
          "scenario": {
            "type": "object",
            "description": "The BUCKETED scenario that was priced.",
            "properties": {
              "purpose": {
                "type": "string",
                "enum": [
                  "purchase",
                  "refinance",
                  "cash-out"
                ]
              },
              "state": {
                "type": "string"
              },
              "county": {
                "type": "string"
              },
              "county_label": {
                "type": "string"
              },
              "home_value": {
                "type": "number"
              },
              "down_payment": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "down_payment_percent": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "existing_balance": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "cash_out": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "loan_amount": {
                "type": "number"
              },
              "ltv_percent": {
                "type": "number"
              },
              "loan_amount_type": {
                "type": [
                  "string",
                  "null"
                ],
                "enum": [
                  "Conforming",
                  "Jumbo",
                  null
                ]
              },
              "credit_band": {
                "type": "string"
              },
              "occupancy": {
                "type": "string",
                "enum": [
                  "primary",
                  "second",
                  "investment"
                ]
              },
              "occupancy_label": {
                "type": "string"
              },
              "property_type": {
                "type": "string",
                "enum": [
                  "sfr",
                  "condo",
                  "townhouse"
                ]
              },
              "property_type_label": {
                "type": "string"
              },
              "rate_lock_days": {
                "type": "integer"
              },
              "bucketed": {
                "type": "boolean"
              },
              "bucketing_note": {
                "type": "string"
              }
            }
          },
          "quotes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Quote"
            }
          },
          "products": {
            "type": "string"
          },
          "rates_as_of": {
            "type": "string",
            "format": "date-time"
          },
          "generated_at": {
            "type": "string",
            "format": "date-time"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time",
            "description": "Do not show the quote after this time."
          },
          "disclosures": {
            "type": "object",
            "properties": {
              "subject_to_change": {
                "type": "string"
              },
              "not_a_commitment": {
                "type": "string"
              },
              "payment_excludes": {
                "type": "string"
              },
              "closing_costs": {
                "type": "string"
              },
              "closing_costs_covered": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "closing_costs_still_paid": {
                "type": "string"
              },
              "offer_details_url": {
                "type": "string",
                "format": "uri"
              },
              "equal_housing": {
                "type": "string"
              }
            }
          },
          "lender": {
            "type": "object",
            "properties": {
              "legal_name": {
                "type": "string"
              },
              "nmls_id": {
                "type": "string"
              },
              "nmls_consumer_access_url": {
                "type": "string",
                "format": "uri"
              },
              "state_license": {
                "type": "string"
              },
              "equal_housing_lender": {
                "type": "boolean"
              }
            }
          },
          "apply_url": {
            "type": "string",
            "format": "uri",
            "description": "Prefill is limited: the application opens with the purpose, home value, balance (refinance) and county filled in as suggestions. Everything else, and every consent, is entered by the person applying."
          },
          "apply_prefill_note": {
            "type": "string"
          },
          "terms_url": {
            "type": "string",
            "format": "uri"
          },
          "terms_status": {
            "type": "string"
          },
          "openapi_url": {
            "type": "string",
            "format": "uri"
          }
        }
      }
    }
  }
}