HOUSINGFAX
Immediate home report for a building or flat in Spain: 22 checks from official public sources.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"mcp": {
"url": "https://housingfax.com/mcp"
}
}
}Remote endpoints
https://housingfax.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (8)
🟢get_products(language)
Returns the three HOUSINGFAX report types for a home in Spain with prices in EUR, VAT included: Free report (€0), Essential report (€11 VAT included) and Complete report with building condition (€19 VAT included; upgrade from the essential one €8 VAT included). Also returns the free-report limits and the consent text (with its SHA-256) that the person must accept before create_free_report. Use it when someone asks what HOUSINGFAX offers, how much it costs, or before ordering. The complete report can only be ordered when the building has an IEE/ITE record. Always tell the person: it is a preliminary, automated report built from public records, not a technical inspection, valuation, certificate, safety assessment or legal advice; probabilities are given as words (very low to very high), never as percentages; a check without data (○) means unknown, not negative or safe; Navarra is not covered yet; the report is only available as a private link.
Input Schema
{
"type": "object",
"properties": {
"language": {
"default": "es",
"type": "string",
"enum": [
"es",
"en",
"de",
"nl",
"fr"
],
"description": "Language of the texts in the answer (and of the report): es, en, de, nl or fr. Default es."
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"contract": {
"type": "string",
"const": "agent-api-1.1.0"
},
"language": {
"type": "string",
"enum": [
"es",
"en",
"de",
"nl",
"fr"
]
},
"currency": {
"type": "string",
"const": "EUR"
},
"vatIncluded": {
"type": "boolean",
"const": true
},
"priceNote": {
"type": "string",
"minLength": 1,
"maxLength": 600
},
"products": {
"minItems": 3,
"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": {
"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
},
"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": [
"perEmail",
"note",
"agentChannelPerDay"
],
"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",
"upgrade",
"freeReportLimits",
"consent",
"checksCount",
"pricingUrl",
"orderUrl",
"exampleReportUrl",
"disclaimer"
],
"additionalProperties": false
}🟢list_checks(language)
Lists the 22 numbered checks of the report (title, question it answers, whether its source is integrated yet and which report types include it) and the meaning of the ✓ / ⚠ / ○ marks. Use it to explain what the report looks at. Checks marked pending_integration show as ○ no data, never as a negative result. Always tell the person: it is a preliminary, automated report built from public records, not a technical inspection, valuation, certificate, safety assessment or legal advice; probabilities are given as words (very low to very high), never as percentages; a check without data (○) means unknown, not negative or safe; Navarra is not covered yet; the report is only available as a private link.
Input Schema
{
"type": "object",
"properties": {
"language": {
"default": "es",
"type": "string",
"enum": [
"es",
"en",
"de",
"nl",
"fr"
],
"description": "Language of the texts in the answer (and of the report): es, en, de, nl or fr. Default es."
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"contract": {
"type": "string",
"const": "agent-api-1.1.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"
],
"additionalProperties": false
},
"methodologyUrl": {
"type": "string",
"maxLength": 400,
"pattern": "^https:\\/\\/[^\\s]+$"
}
},
"required": [
"contract",
"language",
"count",
"checks",
"semaphore",
"methodologyUrl"
],
"additionalProperties": false
}🟢check_coverage(language, province, municipality)
Says whether HOUSINGFAX can produce a report for a province (name or two-digit INE code) and, optionally, finds the municipality in the official street directory. Status covered, not_yet_covered (Navarra: foral adapter pending) or unrecognized; not_yet_covered never means no risk. In the Basque Country (Araba, Bizkaia, Gipuzkoa) the report covers the whole building, not a single flat. municipalityLookup unavailable means the directory did not answer: unknown, not missing. Call it before search_address when you are not sure the place is covered.
Input Schema
{
"type": "object",
"properties": {
"language": {
"default": "es",
"type": "string",
"enum": [
"es",
"en",
"de",
"nl",
"fr"
],
"description": "Language of the texts in the answer (and of the report): es, en, de, nl or fr. Default es."
},
"province": {
"type": "string",
"minLength": 1,
"maxLength": 80,
"description": "Spanish province by name (Madrid, València, Bizkaia…) or two-digit INE code (28). Omit both fields to list every province."
},
"municipality": {
"type": "string",
"minLength": 2,
"maxLength": 80,
"description": "Optional municipality name; it is looked up in the official street directory of the province."
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"contract": {
"type": "string",
"const": "agent-api-1.1.0"
},
"language": {
"type": "string",
"enum": [
"es",
"en",
"de",
"nl",
"fr"
]
},
"provinces": {
"minItems": 1,
"type": "array",
"items": {
"type": "object",
"properties": {
"provinceCode": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{2}$"
},
{
"type": "null"
}
]
},
"provinceLabel": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 120
},
{
"type": "null"
}
]
},
"territoryCode": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 64
},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"enum": [
"covered",
"not_yet_covered",
"unrecognized"
]
},
"foral": {
"type": "boolean"
},
"addressSource": {
"anyOf": [
{
"type": "string",
"enum": [
"dgc",
"nora_foral_cadastres"
]
},
{
"type": "null"
}
]
},
"unitSelection": {
"anyOf": [
{
"type": "string",
"enum": [
"dwelling_or_building",
"building_only"
]
},
{
"type": "null"
}
]
},
"buildingConditionRegistry": {
"anyOf": [
{
"type": "string",
"enum": [
"integrated",
"not_integrated"
]
},
{
"type": "null"
}
]
},
"reason": {
"anyOf": [
{
"type": "string",
"enum": [
"foral_adapter_pending",
"not_a_spanish_province"
]
},
{
"type": "null"
}
]
},
"note": {
"type": "string",
"minLength": 1,
"maxLength": 600
}
},
"required": [
"provinceCode",
"provinceLabel",
"territoryCode",
"status",
"foral",
"addressSource",
"unitSelection",
"buildingConditionRegistry",
"reason",
"note"
],
"additionalProperties": false
}
},
"municipalities": {
"anyOf": [
{
"maxItems": 20,
"type": "array",
"items": {
"type": "object",
"properties": {
"provinceCode": {
"type": "string",
"pattern": "^\\d{2}$"
},
"municipalityDgcCode": {
"type": "string",
"pattern": "^\\d{1,3}$"
},
"municipalityIneCode": {
"type": "string",
"pattern": "^\\d{3}$"
},
"officialLabel": {
"type": "string",
"minLength": 1,
"maxLength": 120
}
},
"required": [
"provinceCode",
"municipalityDgcCode",
"municipalityIneCode",
"officialLabel"
],
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"municipalityLookup": {
"type": "string",
"enum": [
"not_requested",
"found",
"not_found",
"unavailable"
]
},
"coverageNote": {
"type": "string",
"minLength": 1,
"maxLength": 600
}
},
"required": [
"contract",
"language",
"provinces",
"municipalities",
"municipalityLookup",
"coverageNote"
],
"additionalProperties": false
}🟢search_address(kind, language, provinceCode, q, municipalityDgcCode, ...)
Two steps to build an address. kind=municipality with provinceCode and q returns municipalities and their codes. kind=street with provinceCode, municipalityDgcCode, municipalityIneCode (from the first step) and q returns streets with streetTypeCode and streetCode (and localityId in the Basque Country). Pass the chosen street, the house number and the codes to resolve_building. Only for places check_coverage reports as covered. Do not store or publish the address.
Input Schema
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"municipality",
"street"
],
"description": "municipality (step 1) or street (step 2)."
},
"language": {
"default": "es",
"type": "string",
"enum": [
"es",
"en",
"de",
"nl",
"fr"
],
"description": "Language of the texts in the answer (and of the report): es, en, de, nl or fr. Default es."
},
"provinceCode": {
"type": "string",
"pattern": "^\\d{2}$",
"description": "Two-digit INE province code (e.g. 28 Madrid, 08 Barcelona)."
},
"q": {
"type": "string",
"minLength": 1,
"maxLength": 80,
"description": "Text to search: municipality name, or street name optionally followed by the number (\"Colón, 5\")."
},
"municipalityDgcCode": {
"type": "string",
"pattern": "^\\d{1,3}$",
"description": "Only with kind=street: municipalityDgcCode from step 1."
},
"municipalityIneCode": {
"type": "string",
"pattern": "^\\d{3}$",
"description": "Only with kind=street: municipalityIneCode from step 1."
},
"streetTypeCode": {
"type": "string",
"pattern": "^[A-Z0-9]{1,4}$",
"description": "Only with kind=street, optional: street type code to narrow the search (CL, AV, PZ…)."
}
},
"required": [
"kind",
"provinceCode",
"q"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"contract": {
"type": "string",
"const": "agent-api-1.1.0"
},
"language": {
"type": "string",
"enum": [
"es",
"en",
"de",
"nl",
"fr"
]
},
"kind": {
"type": "string",
"enum": [
"municipality",
"street"
]
},
"options": {
"anyOf": [
{
"maxItems": 20,
"type": "array",
"items": {
"type": "object",
"properties": {
"provinceCode": {
"type": "string",
"pattern": "^\\d{2}$"
},
"municipalityDgcCode": {
"type": "string",
"pattern": "^\\d{1,3}$"
},
"municipalityIneCode": {
"type": "string",
"pattern": "^\\d{3}$"
},
"officialLabel": {
"type": "string",
"minLength": 1,
"maxLength": 120
}
},
"required": [
"provinceCode",
"municipalityDgcCode",
"municipalityIneCode",
"officialLabel"
],
"additionalProperties": false
}
},
{
"maxItems": 20,
"type": "array",
"items": {
"type": "object",
"properties": {
"provinceCode": {
"type": "string",
"pattern": "^\\d{2}$"
},
"municipalityDgcCode": {
"type": "string",
"pattern": "^\\d{1,3}$"
},
"municipalityIneCode": {
"type": "string",
"pattern": "^\\d{3}$"
},
"officialLabel": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"streetTypeCode": {
"type": "string",
"pattern": "^[A-Z0-9]{1,4}$"
},
"streetCode": {
"type": "string",
"pattern": "^[A-Z0-9]{1,15}$"
},
"streetTypeLabel": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"localityId": {
"type": "string",
"pattern": "^[0-9]{14}$"
},
"localityLabel": {
"type": "string",
"minLength": 1,
"maxLength": 120
}
},
"required": [
"provinceCode",
"municipalityDgcCode",
"municipalityIneCode",
"officialLabel",
"streetTypeCode",
"streetCode"
],
"additionalProperties": false
}
}
]
},
"numberHint": {
"type": "string",
"minLength": 1,
"maxLength": 16
}
},
"required": [
"contract",
"language",
"kind",
"options"
],
"additionalProperties": false
}🟢resolve_building(language, cadastralReference, scope, address)
Identifies the building from an address found with search_address (object address) or from a cadastral reference (14 characters = building or plot; 18 or 20 = a single flat). Give either cadastralReference or address, not both. status resolved returns a resolutionToken (valid 15 minutes) for create_free_report, the building's public cadastral data, whether an IEE/ITE record exists (ieeAvailability; unverified means the registry did not answer, not that there is none) and the report types that can be ordered. status select_unit lists the units: ask the person which flat, or repeat with the 14-character reference and scope=building for the whole building. Only non-protected cadastral data is returned. Do not publish the address or reference.
Input Schema
{
"type": "object",
"properties": {
"language": {
"default": "es",
"type": "string",
"enum": [
"es",
"en",
"de",
"nl",
"fr"
],
"description": "Language of the texts in the answer (and of the report): es, en, de, nl or fr. Default es."
},
"cadastralReference": {
"type": "string",
"pattern": "^[A-Z0-9]{14}([A-Z0-9]{4}|[A-Z0-9]{6})?$",
"description": "Cadastral reference: 14 characters (building or plot), 18 or 20 (a flat). Use instead of address."
},
"scope": {
"type": "string",
"const": "building",
"description": "Only with a 14-character cadastralReference: building to report on the whole building."
},
"address": {
"type": "object",
"properties": {
"provinceCode": {
"type": "string",
"pattern": "^\\d{2}$"
},
"municipalityDgcCode": {
"type": "string",
"pattern": "^\\d{1,3}$"
},
"municipalityIneCode": {
"type": "string",
"pattern": "^\\d{3}$"
},
"streetTypeCode": {
"type": "string",
"pattern": "^[A-Z0-9]{1,4}$"
},
"streetCode": {
"type": "string",
"pattern": "^[A-Z0-9]{1,15}$"
},
"number": {
"type": "string",
"minLength": 1,
"maxLength": 16,
"pattern": "^[\\p{L}\\p{N}/ -]+$"
},
"localityId": {
"type": "string",
"pattern": "^[0-9]{14}$"
},
"block": {
"type": "string",
"minLength": 1,
"maxLength": 16,
"pattern": "^[\\p{L}\\p{N}/ .-]+$"
},
"stair": {
"type": "string",
"minLength": 1,
"maxLength": 16,
"pattern": "^[\\p{L}\\p{N}/ .-]+$"
},
"floor": {
"type": "string",
"minLength": 1,
"maxLength": 16,
"pattern": "^[\\p{L}\\p{N}/ .-]+$"
},
"door": {
"type": "string",
"minLength": 1,
"maxLength": 16,
"pattern": "^[\\p{L}\\p{N}/ .-]+$"
}
},
"required": [
"provinceCode",
"municipalityDgcCode",
"municipalityIneCode",
"streetTypeCode",
"streetCode",
"number"
],
"additionalProperties": false,
"description": "Coded address from search_address (provinceCode, municipalityDgcCode, municipalityIneCode, streetTypeCode, streetCode, number; localityId in the Basque Country; optional block, stair, floor, door). Use instead of cadastralReference."
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"contract": {
"type": "string",
"const": "agent-api-1.1.0"
},
"language": {
"type": "string",
"enum": [
"es",
"en",
"de",
"nl",
"fr"
]
},
"status": {
"type": "string",
"enum": [
"resolved",
"select_unit",
"not_found",
"unconfirmed"
]
},
"evaluationScope": {
"anyOf": [
{
"type": "string",
"enum": [
"building",
"dwelling"
]
},
{
"type": "null"
}
]
},
"building": {
"anyOf": [
{
"type": "object",
"properties": {
"cadastralReference": {
"type": "string",
"pattern": "^[A-Z0-9]{14,20}$"
},
"rc14": {
"type": "string",
"pattern": "^[A-Z0-9]{14}$"
},
"address": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"postalCode": {
"type": "string",
"pattern": "^\\d{5}$"
},
"municipality": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"province": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"use": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"surfaceAreaM2": {
"type": "number",
"exclusiveMinimum": 0
},
"constructionYear": {
"type": "integer",
"minimum": 1000,
"maximum": 2100
},
"stair": {
"type": "string",
"minLength": 1,
"maxLength": 16
},
"floor": {
"type": "string",
"minLength": 1,
"maxLength": 16
},
"door": {
"type": "string",
"minLength": 1,
"maxLength": 16
}
},
"required": [
"cadastralReference",
"rc14"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"candidates": {
"maxItems": 200,
"type": "array",
"items": {
"type": "object",
"properties": {
"cadastralReference": {
"type": "string",
"pattern": "^[A-Z0-9]{14,20}$"
},
"rc14": {
"type": "string",
"pattern": "^[A-Z0-9]{14}$"
},
"address": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"postalCode": {
"type": "string",
"pattern": "^\\d{5}$"
},
"municipality": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"province": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"use": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"surfaceAreaM2": {
"type": "number",
"exclusiveMinimum": 0
},
"constructionYear": {
"type": "integer",
"minimum": 1000,
"maximum": 2100
},
"stair": {
"type": "string",
"minLength": 1,
"maxLength": 16
},
"floor": {
"type": "string",
"minLength": 1,
"maxLength": 16
},
"door": {
"type": "string",
"minLength": 1,
"maxLength": 16
}
},
"required": [
"cadastralReference",
"rc14"
],
"additionalProperties": false
}
},
"availableNumbers": {
"maxItems": 40,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 16
}
},
"resolutionToken": {
"anyOf": [
{
"type": "string",
"pattern": "^[A-Za-z0-9_-]{43}$"
},
{
"type": "null"
}
]
},
"resolutionExpiresInSeconds": {
"anyOf": [
{
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"ieeAvailability": {
"anyOf": [
{
"type": "string",
"enum": [
"available",
"none",
"not_integrated",
"unverified"
]
},
{
"type": "null"
}
]
},
"availableTiers": {
"maxItems": 3,
"type": "array",
"items": {
"type": "string",
"enum": [
"free",
"simple",
"complete"
]
}
},
"notice": {
"type": "string",
"minLength": 1,
"maxLength": 600
}
},
"required": [
"contract",
"language",
"status",
"evaluationScope",
"building",
"candidates",
"resolutionToken",
"resolutionExpiresInSeconds",
"ieeAvailability",
"availableTiers",
"notice"
],
"additionalProperties": false
}🟡create_free_report(language, resolutionToken, consent, consentStatementSha256, email)
Queues the free report for the building resolved with resolve_building and returns a private link (previewUrl) and a statusToken for get_report_status. The free report is a blurred web preview without PDF; it is generated in minutes. CONSENT: before calling, show the person the consent text returned by get_products (consent.text, same language) with its terms and privacy links, and set consent=true only if the person has explicitly accepted it in this conversation; pass consent.statementSha256 as consentStatementSha256. Never accept on the person's behalf. The email is optional (ready notice; at most 2 free reports per email every 14 days) and only with the person's permission. The link is private: give it only to the person, never publish it. Always tell the person: it is a preliminary, automated report built from public records, not a technical inspection, valuation, certificate, safety assessment or legal advice; probabilities are given as words (very low to very high), never as percentages; a check without data (○) means unknown, not negative or safe; Navarra is not covered yet; the report is only available as a private link.
Input Schema
{
"type": "object",
"properties": {
"language": {
"default": "es",
"type": "string",
"enum": [
"es",
"en",
"de",
"nl",
"fr"
],
"description": "Language of the report and of the texts: es, en, de, nl or fr. Default es. Must be the language of the consent text shown."
},
"resolutionToken": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{43}$",
"description": "resolutionToken returned by resolve_building (valid 15 minutes)."
},
"consent": {
"type": "boolean",
"const": true,
"description": "true only if the person explicitly accepted the consent text from get_products."
},
"consentStatementSha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$",
"description": "consent.statementSha256 from get_products for the same language."
},
"email": {
"type": "string",
"minLength": 6,
"maxLength": 254,
"pattern": "^[^\\s@]+@[^\\s@]+\\.[^\\s@]{2,}$",
"description": "Optional email of the person for the ready notice, only with their permission."
}
},
"required": [
"resolutionToken",
"consent",
"consentStatementSha256"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"contract": {
"type": "string",
"const": "agent-api-1.1.0"
},
"language": {
"type": "string",
"enum": [
"es",
"en",
"de",
"nl",
"fr"
]
},
"jobId": {
"type": "string",
"pattern": "^scr_[A-Za-z0-9_-]{22}$"
},
"status": {
"type": "string",
"const": "queued"
},
"statusToken": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{43}\\.[A-Za-z0-9_-]{43}$"
},
"previewUrl": {
"type": "string",
"maxLength": 400,
"pattern": "^https:\\/\\/[^\\s]+$"
},
"pollAfterSeconds": {
"type": "integer",
"minimum": 1,
"maximum": 600
},
"emailNotice": {
"type": "boolean"
},
"notice": {
"type": "string",
"minLength": 1,
"maxLength": 600
}
},
"required": [
"contract",
"language",
"jobId",
"status",
"statusToken",
"previewUrl",
"pollAfterSeconds",
"emailNotice",
"notice"
],
"additionalProperties": false
}🟢get_report_status(language, jobId, statusToken)
Returns the status of a report created with create_free_report: queued, in_progress, ready, failed or expired, with the private link when ready. Wait pollAfterSeconds between calls. withLimitations=true means some source did not answer and its check shows ○ no data with the reason (unknown, not negative). Give the link only to the person.
Input Schema
{
"type": "object",
"properties": {
"language": {
"default": "es",
"type": "string",
"enum": [
"es",
"en",
"de",
"nl",
"fr"
],
"description": "Language of the texts in the answer (and of the report): es, en, de, nl or fr. Default es."
},
"jobId": {
"type": "string",
"pattern": "^scr_[A-Za-z0-9_-]{22}$",
"description": "jobId returned by create_free_report or purchase_report."
},
"statusToken": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{43}\\.[A-Za-z0-9_-]{43}$",
"description": "statusToken returned by create_free_report or purchase_report."
}
},
"required": [
"jobId",
"statusToken"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"contract": {
"type": "string",
"const": "agent-api-1.1.0"
},
"language": {
"type": "string",
"enum": [
"es",
"en",
"de",
"nl",
"fr"
]
},
"jobId": {
"type": "string",
"pattern": "^scr_[A-Za-z0-9_-]{22}$"
},
"status": {
"type": "string",
"enum": [
"awaiting_payment",
"payment_received",
"queued",
"in_progress",
"ready",
"failed",
"expired",
"payment_expired",
"refunded"
]
},
"stage": {
"anyOf": [
{
"type": "string",
"pattern": "^[A-Z0-9_]{1,64}$"
},
{
"type": "null"
}
]
},
"queuePosition": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"estimatedSeconds": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"previewUrl": {
"type": "string",
"maxLength": 400,
"pattern": "^https:\\/\\/[^\\s]+$"
},
"withLimitations": {
"type": "boolean"
},
"errorCode": {
"type": "string",
"pattern": "^[A-Z0-9_]{1,100}$"
},
"pollAfterSeconds": {
"type": "integer",
"minimum": 1,
"maximum": 600
},
"payment": {
"type": "object",
"properties": {
"orderId": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
},
"status": {
"type": "string",
"enum": [
"pending",
"paid",
"expired",
"failed",
"refunded"
]
}
},
"required": [
"orderId",
"status"
],
"additionalProperties": false
},
"notice": {
"type": "string",
"minLength": 1,
"maxLength": 600
}
},
"required": [
"contract",
"language",
"jobId",
"status",
"stage",
"notice"
],
"additionalProperties": false
}🟡purchase_report(language, tier, resolutionToken, freeReport, email, ...)
Opens an order for a paid report and returns a Stripe Checkout URL (checkoutUrl) where the person, or you on their behalf, pays: Essential report €11 VAT included or Complete report with building condition €19 VAT included, VAT included, one-off payment, no subscription. Use it only when the person has decided to buy that report type. The complete report can only be bought when resolve_building says ieeAvailability=available. The building comes from resolve_building (resolutionToken, valid 15 minutes) or from a free report that is ready (freeReport with its jobId and statusToken; the paid report then reuses its sources). ACCEPTANCE: by calling it you accept, on the person's behalf, the consent text from get_products (data processing, immediate execution and loss of the right of withdrawal) and the Terms in force, including the clause on contracting through an agent; the person who delegates to you is bound by it, so tell them before calling. Pass consent=true with consent.statementSha256, termsVersion from get_products, acceptTerms=true and waiveWithdrawalRight=true. The email is required: receipt, report link and withdrawal confirmation go there. Nothing is generated until Stripe confirms the payment; then the report is ready in minutes (the AI summary follows) and the link is emailed. Poll get_report_status with the returned jobId and statusToken: awaiting_payment, payment_received, queued, in_progress, ready (or payment_expired, refunded, failed). Never publish the checkout or report link. Always tell the person: it is a preliminary, automated report built from public records, not a technical inspection, valuation, certificate, safety assessment or legal advice; probabilities are given as words (very low to very high), never as percentages; a check without data (○) means unknown, not negative or safe; Navarra is not covered yet; the report is only available as a private link.
Input Schema
{
"type": "object",
"properties": {
"language": {
"default": "es",
"type": "string",
"enum": [
"es",
"en",
"de",
"nl",
"fr"
],
"description": "Language of the report, the checkout page and the texts: es, en, de, nl or fr. Default es. Must be the language of the consent text shown."
},
"tier": {
"type": "string",
"enum": [
"simple",
"complete"
],
"description": "simple (essential report) or complete (only when the building has an IEE/ITE record)."
},
"resolutionToken": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{43}$",
"description": "resolutionToken returned by resolve_building (valid 15 minutes). Give this or freeReport, not both."
},
"freeReport": {
"type": "object",
"properties": {
"jobId": {
"type": "string",
"pattern": "^scr_[A-Za-z0-9_-]{22}$"
},
"statusToken": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{43}\\.[A-Za-z0-9_-]{43}$"
}
},
"required": [
"jobId",
"statusToken"
],
"additionalProperties": false,
"description": "A ready free report of the same person to buy from: { jobId, statusToken } from create_free_report. Give this or resolutionToken, not both."
},
"email": {
"type": "string",
"minLength": 6,
"maxLength": 254,
"pattern": "^[^\\s@]+@[^\\s@]+\\.[^\\s@]{2,}$",
"description": "Email of the person (required): receipt, private report link and withdrawal confirmation."
},
"consent": {
"type": "boolean",
"const": true,
"description": "true: you accept the consent text from get_products on the person's behalf."
},
"consentStatementSha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$",
"description": "consent.statementSha256 from get_products for the same language."
},
"termsVersion": {
"type": "string",
"minLength": 1,
"maxLength": 16,
"description": "consent.termsVersion from get_products (the Terms version you accept)."
},
"acceptTerms": {
"type": "boolean",
"const": true,
"description": "true: you accept the Terms, including the clause on contracting through an agent (consent.agentContractingTermsUrl)."
},
"waiveWithdrawalRight": {
"type": "boolean",
"const": true,
"description": "true: the person asks for immediate execution and loses the 14-day right of withdrawal once the report is supplied."
}
},
"required": [
"tier",
"email",
"consent",
"consentStatementSha256",
"termsVersion",
"acceptTerms",
"waiveWithdrawalRight"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"contract": {
"type": "string",
"const": "agent-api-1.1.0"
},
"language": {
"type": "string",
"enum": [
"es",
"en",
"de",
"nl",
"fr"
]
},
"orderId": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
},
"status": {
"type": "string",
"const": "awaiting_payment"
},
"tier": {
"type": "string",
"enum": [
"simple",
"complete"
]
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 600
},
"priceCents": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"price": {
"type": "string",
"minLength": 1,
"maxLength": 600
},
"currency": {
"type": "string",
"const": "EUR"
},
"vatIncluded": {
"type": "boolean",
"const": true
},
"checkoutUrl": {
"type": "string",
"maxLength": 2048,
"pattern": "^https:\\/\\/checkout\\.stripe\\.com\\/\\S+$"
},
"checkoutExpiresAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
"jobId": {
"type": "string",
"pattern": "^scr_[A-Za-z0-9_-]{22}$"
},
"statusToken": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{43}\\.[A-Za-z0-9_-]{43}$"
},
"reportUrl": {
"type": "string",
"maxLength": 400,
"pattern": "^https:\\/\\/[^\\s]+$"
},
"pollAfterSeconds": {
"type": "integer",
"minimum": 1,
"maximum": 600
},
"termsVersion": {
"type": "string",
"minLength": 1,
"maxLength": 16
},
"agentContractingTermsUrl": {
"type": "string",
"maxLength": 400,
"pattern": "^https:\\/\\/[^\\s]+$"
},
"notice": {
"type": "string",
"minLength": 1,
"maxLength": 600
}
},
"required": [
"contract",
"language",
"orderId",
"status",
"tier",
"name",
"priceCents",
"price",
"currency",
"vatIncluded",
"checkoutUrl",
"checkoutExpiresAt",
"jobId",
"statusToken",
"reportUrl",
"pollAfterSeconds",
"termsVersion",
"agentContractingTermsUrl",
"notice"
],
"additionalProperties": false
}Community
Evidence