HOUSINGFAX agent API API

Public, unauthenticated API to explain HOUSINGFAX, check coverage, identify a building in Spain and request the report for a person, who accepts the consent text first. Every report is free: the full report with web view and PDF.

GitHub OpenAPI

Operations 8

GET /products The report and its consent text #
GET /checks The checks of the report #
GET /coverage Coverage by province and municipality #
GET /address/search Search municipalities and streets #
POST /buildings/resolve Identify the building #
POST /reports/free Request the report #
GET /jobs/{jobId} Status of a requested report #
POST /reports/purchase Not available: every report is free #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/housingfax-com:housingfax-agent-api-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

housingfax-com-api-openapi.json Raw ↑
{
  "openapi": "3.1.1",
  "info": {
    "title": "HOUSINGFAX agent API",
    "summary": "Instant home report on a flat, house or building in Spain, for AI agents and developers.",
    "description": "Public, unauthenticated API to explain HOUSINGFAX, check coverage, identify a building in Spain and request the report for a person, who accepts the consent text first. Every report is free: the full report with web view and PDF.\n\nThe report is a preliminary purchase due-diligence report built from public records, not a technical inspection, valuation or certificate. It never states that a building has aluminosis and never gives percentages. Unknown is not a negative: missing data is shown as \"no data\" with its reason.\n\nReports are private: the API returns a link with a token that must not be published. `POST /reports/purchase` stays in the contract for compatibility and answers 409 `NOT_FOR_SALE`.\n\nInputs are strict: an unknown or repeated parameter or field is rejected with 400 `INVALID_REQUEST`. Read operations (GET) can be called from any origin (CORS); POST operations are meant for servers and agents, not for browser pages on other sites.\n\nThe same operations are available as tools of the MCP server at https://housingfax.com/mcp.",
    "version": "1.3.0",
    "termsOfService": "https://housingfax.com/es-es/terminos",
    "contact": {
      "name": "HOUSINGFAX",
      "email": "ldescals.ssp@gmail.com",
      "url": "https://housingfax.com/es-es/contacto"
    }
  },
  "externalDocs": {
    "description": "HOUSINGFAX for agents and developers",
    "url": "https://housingfax.com/es-es/api"
  },
  "servers": [
    {
      "url": "https://housingfax.com/api/agent/v1"
    }
  ],
  "security": [],
  "x-service-info": {
    "name": "HOUSINGFAX",
    "contract": "agent-api-1.3.0",
    "contact": {
      "email": "ldescals.ssp@gmail.com",
      "url": "https://housingfax.com/es-es/contacto"
    },
    "termsOfService": "https://housingfax.com/es-es/terminos",
    "privacyPolicy": "https://housingfax.com/es-es/privacidad",
    "documentation": {
      "es": "https://housingfax.com/es-es/api",
      "en": "https://housingfax.com/en-es/api",
      "de": "https://housingfax.com/de-es/api",
      "nl": "https://housingfax.com/nl-es/api",
      "fr": "https://housingfax.com/fr-es/api"
    },
    "mcpServer": "https://housingfax.com/mcp",
    "authentication": "none",
    "coverage": "Spain only; Navarre not covered yet.",
    "limits": {
      "activeClients": {
        "max": 40,
        "idleSeconds": 120
      },
      "reportsInProgressPerClient": 3,
      "capacity": "When the channel is serving its maximum of active clients, a new client gets 503 CHANNEL_AT_CAPACITY with Retry-After; clients already active go on.",
      "rateLimited": "Per client and per IP address; 429 with Retry-After when exceeded.",
      "queue": "Shared with the website, without priority."
    },
    "payments": "None: every report is free; POST /reports/purchase answers 409 NOT_FOR_SALE."
  },
  "paths": {
    "/products": {
      "get": {
        "operationId": "getProducts",
        "summary": "The report and its consent text",
        "description": "The report HOUSINGFAX generates (`productMode: free`): a single product, the full report with web view and PDF, free of charge, with the building condition assessment when the building has an IEE/ITE record. Also the capacity limits of the channel, the consent text the person must accept before a report is requested and the Terms version.",
        "x-mcp-tool": "get_products",
        "parameters": [
          {
            "name": "language",
            "in": "query",
            "required": false,
            "schema": {
              "default": "es",
              "type": "string",
              "enum": [
                "es",
                "en",
                "de",
                "nl",
                "fr"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetProductsOutput"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "500": {
            "$ref": "#/components/responses/Error500"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        }
      }
    },
    "/checks": {
      "get": {
        "operationId": "listChecks",
        "summary": "The checks of the report",
        "description": "Every check of the report, numbered, with the question it answers and whether its source is integrated. A check without data is shown as \"no data\" with its reason, never as a pass.",
        "x-mcp-tool": "list_checks",
        "parameters": [
          {
            "name": "language",
            "in": "query",
            "required": false,
            "schema": {
              "default": "es",
              "type": "string",
              "enum": [
                "es",
                "en",
                "de",
                "nl",
                "fr"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListChecksOutput"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "500": {
            "$ref": "#/components/responses/Error500"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        }
      }
    },
    "/coverage": {
      "get": {
        "operationId": "checkCoverage",
        "summary": "Coverage by province and municipality",
        "description": "Whether a province or municipality of Spain is covered. Navarre is not covered yet (foral adapter pending), which never means \"no risk\". Without parameters, every province.",
        "x-mcp-tool": "check_coverage",
        "parameters": [
          {
            "name": "language",
            "in": "query",
            "required": false,
            "schema": {
              "default": "es",
              "type": "string",
              "enum": [
                "es",
                "en",
                "de",
                "nl",
                "fr"
              ]
            }
          },
          {
            "name": "province",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 80
            }
          },
          {
            "name": "municipality",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 2,
              "maxLength": 80
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CheckCoverageOutput"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "500": {
            "$ref": "#/components/responses/Error500"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        }
      }
    },
    "/address/search": {
      "get": {
        "operationId": "searchAddress",
        "summary": "Search municipalities and streets",
        "description": "Step 1 (`kind=municipality`): municipalities of a province. Step 2 (`kind=street`, with the codes of step 1): streets of a municipality. The codes feed `POST /buildings/resolve`.",
        "x-mcp-tool": "search_address",
        "parameters": [
          {
            "name": "kind",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "municipality",
                "street"
              ]
            }
          },
          {
            "name": "language",
            "in": "query",
            "required": false,
            "schema": {
              "default": "es",
              "type": "string",
              "enum": [
                "es",
                "en",
                "de",
                "nl",
                "fr"
              ]
            }
          },
          {
            "name": "provinceCode",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\\d{2}$"
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 80
            }
          },
          {
            "name": "municipalityDgcCode",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^\\d{1,3}$"
            }
          },
          {
            "name": "municipalityIneCode",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^\\d{3}$"
            }
          },
          {
            "name": "streetTypeCode",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[A-Z0-9]{1,4}$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchAddressOutput"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "500": {
            "$ref": "#/components/responses/Error500"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        }
      }
    },
    "/buildings/resolve": {
      "post": {
        "operationId": "resolveBuilding",
        "summary": "Identify the building",
        "description": "Identifies the building by cadastral reference or by the coded address from `/address/search`. When it is resolved, returns a `resolutionToken` (valid for 15 minutes) for `POST /reports/free` and whether the building has an IEE/ITE record, which decides whether the report includes the building condition assessment. No protected cadastral data.",
        "x-mcp-tool": "resolve_building",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResolveBuildingInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResolveBuildingOutput"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "413": {
            "$ref": "#/components/responses/ErrorBodyTooLarge"
          },
          "415": {
            "$ref": "#/components/responses/ErrorUnsupportedMediaType"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "500": {
            "$ref": "#/components/responses/Error500"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        }
      }
    },
    "/reports/free": {
      "post": {
        "operationId": "createFreeReport",
        "summary": "Request the report",
        "description": "Queues the report for a resolved building, once the person has accepted the consent text of `GET /products`. Every report is free: it is the full report with web view and PDF, generated with real data. Returns a private `previewUrl` (token, not indexed) and a `statusToken` to follow it. Never publish the link.",
        "x-mcp-tool": "create_free_report",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateFreeReportInput"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Accepted: the report is queued.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateFreeReportOutput"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "413": {
            "$ref": "#/components/responses/ErrorBodyTooLarge"
          },
          "415": {
            "$ref": "#/components/responses/ErrorUnsupportedMediaType"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "500": {
            "$ref": "#/components/responses/Error500"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        }
      }
    },
    "/jobs/{jobId}": {
      "get": {
        "operationId": "getJobStatus",
        "summary": "Status of a requested report",
        "description": "Status of a report requested with `POST /reports/free` (`queued`, `in_progress` and `ready`; or `failed`, `expired`). Orders opened before the service became free keep their payment states (`awaiting_payment`, `payment_received`, `payment_expired`, `refunded`). When it is `ready`, returns the private link. The `statusToken` given when the report was created goes in `Authorization: Bearer <statusToken>`, never in the URL.",
        "x-mcp-tool": "get_report_status",
        "parameters": [
          {
            "name": "language",
            "in": "query",
            "required": false,
            "schema": {
              "default": "es",
              "type": "string",
              "enum": [
                "es",
                "en",
                "de",
                "nl",
                "fr"
              ]
            }
          },
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^scr_[A-Za-z0-9_-]{22}$"
            }
          }
        ],
        "security": [
          {
            "statusToken": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetJobStatusOutput"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "500": {
            "$ref": "#/components/responses/Error500"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        }
      }
    },
    "/reports/purchase": {
      "post": {
        "operationId": "purchaseReport",
        "summary": "Not available: every report is free",
        "description": "Not available: every report is free; use `POST /reports/free` (MCP tool `create_free_report`). The operation stays in the contract for compatibility and answers 409 `NOT_FOR_SALE` without creating anything.",
        "x-mcp-tool": "purchase_report",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseReportInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Not returned while every report is free: the answer is 409 `NOT_FOR_SALE`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseReportOutput"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "413": {
            "$ref": "#/components/responses/ErrorBodyTooLarge"
          },
          "415": {
            "$ref": "#/components/responses/ErrorUnsupportedMediaType"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "500": {
            "$ref": "#/components/responses/Error500"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "GetProductsOutput": {
        "type": "object",
        "properties": {
          "contract": {
            "type": "string",
            "const": "agent-api-1.3.0"
          },
          "language": {
            "type": "string",
            "enum": [
              "es",
              "en",
              "de",
              "nl",
              "fr"
            ]
          },
          "productMode": {
            "type": "string",
            "enum": [
              "commercial",
              "free"
            ]
          },
          "currency": {
            "type": "string",
            "const": "EUR"
          },
          "vatIncluded": {
            "type": "boolean",
            "const": true
          },
          "priceNote": {
            "type": "string",
            "minLength": 1,
            "maxLength": 600
          },
          "products": {
            "minItems": 1,
            "maxItems": 3,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "tier": {
                  "type": "string",
                  "enum": [
                    "free",
                    "simple",
                    "complete"
                  ]
                },
                "name": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 600
                },
                "priceCents": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "price": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 600
                },
                "description": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 600
                },
                "requiresBuildingConditionRecord": {
                  "type": "boolean"
                },
                "format": {
                  "type": "string",
                  "enum": [
                    "redacted_web_preview",
                    "web_and_pdf"
                  ]
                },
                "emailRequired": {
                  "type": "boolean"
                },
                "orderChannel": {
                  "type": "string",
                  "enum": [
                    "agent_api",
                    "web"
                  ]
                }
              },
              "required": [
                "tier",
                "name",
                "priceCents",
                "price",
                "description",
                "requiresBuildingConditionRecord",
                "format",
                "emailRequired",
                "orderChannel"
              ],
              "additionalProperties": false
            }
          },
          "upgrade": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "from": {
                    "type": "string",
                    "const": "simple"
                  },
                  "to": {
                    "type": "string",
                    "const": "complete"
                  },
                  "priceCents": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 9007199254740991
                  },
                  "price": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 600
                  }
                },
                "required": [
                  "from",
                  "to",
                  "priceCents",
                  "price"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ]
          },
          "freeReportLimits": {
            "type": "object",
            "properties": {
              "perEmail": {
                "type": "object",
                "properties": {
                  "count": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 9007199254740991
                  },
                  "windowDays": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 9007199254740991
                  }
                },
                "required": [
                  "count",
                  "windowDays"
                ],
                "additionalProperties": false
              },
              "note": {
                "type": "string",
                "minLength": 1,
                "maxLength": 600
              },
              "agentChannelPerDay": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "note"
            ],
            "additionalProperties": false
          },
          "capacity": {
            "type": "object",
            "properties": {
              "maxActiveClients": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "clientIdleSeconds": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "maxReportsInProgressPerClient": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "note": {
                "type": "string",
                "minLength": 1,
                "maxLength": 600
              }
            },
            "required": [
              "maxActiveClients",
              "clientIdleSeconds",
              "maxReportsInProgressPerClient",
              "note"
            ],
            "additionalProperties": false
          },
          "consent": {
            "type": "object",
            "properties": {
              "text": {
                "type": "string",
                "minLength": 1,
                "maxLength": 2000
              },
              "statementSha256": {
                "type": "string",
                "pattern": "^[0-9a-f]{64}$"
              },
              "termsVersion": {
                "type": "string",
                "minLength": 1,
                "maxLength": 16
              },
              "termsUrl": {
                "type": "string",
                "maxLength": 400,
                "pattern": "^https:\\/\\/[^\\s]+$"
              },
              "agentContractingTermsUrl": {
                "type": "string",
                "maxLength": 400,
                "pattern": "^https:\\/\\/[^\\s]+$"
              },
              "privacyUrl": {
                "type": "string",
                "maxLength": 400,
                "pattern": "^https:\\/\\/[^\\s]+$"
              }
            },
            "required": [
              "text",
              "statementSha256",
              "termsVersion",
              "termsUrl",
              "privacyUrl"
            ],
            "additionalProperties": false
          },
          "checksCount": {
            "type": "integer",
            "minimum": 1,
            "maximum": 9007199254740991
          },
          "pricingUrl": {
            "type": "string",
            "maxLength": 400,
            "pattern": "^https:\\/\\/[^\\s]+$"
          },
          "orderUrl": {
            "type": "string",
            "maxLength": 400,
            "pattern": "^https:\\/\\/[^\\s]+$"
          },
          "exampleReportUrl": {
            "type": "string",
            "maxLength": 400,
            "pattern": "^https:\\/\\/[^\\s]+$"
          },
          "disclaimer": {
            "type": "string",
            "minLength": 1,
            "maxLength": 600
          }
        },
        "required": [
          "contract",
          "language",
          "currency",
          "vatIncluded",
          "priceNote",
          "products",
          "consent",
          "checksCount",
          "pricingUrl",
          "orderUrl",
          "exampleReportUrl",
          "disclaimer"
        ],
        "additionalProperties": false
      },
      "ListChecksOutput": {
        "type": "object",
        "properties": {
          "contract": {
            "type": "string",
            "const": "agent-api-1.3.0"
          },
          "language": {
            "type": "string",
            "enum": [
              "es",
              "en",
              "de",
              "nl",
              "fr"
            ]
          },
          "count": {
            "type": "integer",
            "minimum": 1,
            "maximum": 9007199254740991
          },
          "checks": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "number": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 99
                },
                "key": {
                  "type": "string",
                  "enum": [
                    "aluminosis",
                    "iee",
                    "risks_by_year",
                    "asbestos",
                    "cadastral_record",
                    "building_condition",
                    "energy_certificate",
                    "land_history",
                    "ground_motion",
                    "geology_and_drainage",
                    "flooding",
                    "seismic",
                    "radon",
                    "sun_hours",
                    "solar_potential",
                    "price_and_market",
                    "surroundings_and_noise",
                    "land_affections",
                    "land_classification",
                    "climate_and_light",
                    "wildfire",
                    "industrial_facilities",
                    "public_safety"
                  ]
                },
                "title": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 600
                },
                "question": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 600
                },
                "integration": {
                  "type": "string",
                  "enum": [
                    "integrated",
                    "pending_integration"
                  ]
                },
                "includedIn": {
                  "minItems": 1,
                  "type": "array",
                  "items": {
                    "type": "string",
                    "enum": [
                      "free",
                      "simple",
                      "complete"
                    ]
                  }
                }
              },
              "required": [
                "number",
                "key",
                "title",
                "question",
                "integration",
                "includedIn"
              ],
              "additionalProperties": false
            }
          },
          "semaphore": {
            "type": "object",
            "properties": {
              "ok": {
                "type": "string",
                "minLength": 1,
                "maxLength": 600
              },
              "attention": {
                "type": "string",
                "minLength": 1,
                "maxLength": 600
              },
              "no_data": {
                "type": "string",
                "minLength": 1,
                "maxLength": 600
              },
              "not_included": {
                "type": "string",
                "minLength": 1,
                "maxLength": 600
              }
            },
            "required": [
              "ok",
              "attention",
              "no_data",
              "not_included"
            ],
      

# --- truncated at 32 KB (70 KB total) ---
# Full source: https://artifacts.apis.io/housingfax-com/openapi/_original/housingfax-com-api-openapi.json